CSS关于居中的问题

news2024/9/26 5:12:23

文章目录

  • 1. 行内和块级元素自身相对父控件居中
    • 1.1. 块级元素相对父控件居中
    • 1.2. 行内元素相对于父控件居中
  • 2. 实现单行文字垂直居中
  • 3. 子绝父相实现子元素的水平垂直居中
    • 3.1. 方案一
      • 3.1.1. 示例
    • 3.2. 方案二
      • 3.2.1. 示例
    • 3.3. 方案三(推荐)
      • 3.3.1. 示例
    • 3.4. 方案四(了解一下)
  • 4. flex 实现水平垂直居中
    • 4.1. 方法一
    • 4.2. 方法二
    • 4.2. 方法二

1. 行内和块级元素自身相对父控件居中

给行内和块级元素设置宽高,出现的现象:

  • 设置宽高对行内元素没有效果
  • 设置宽度对块级元素有效果
span {
  width: 100px;
  height: 100px;
  text-align: center;
  background-color: skyblue;
}
div {
  width: 100px;
  height: 100px;
  background-color: pink;
}

image-20240309142431457

原因是因为行内元素的宽高是由内容决定的。

1.1. 块级元素相对父控件居中

只能通过盒子模型的外边距实现,这个属性写在元素本身上面。

div {
  width: 100px;
  height: 100px;
  background-color: pink;
  margin: 0 auto;
}

image-20240309142720538

如果是没有设置宽高的话,可以通过父控件的text-align实现,但是不能用margin: 0 auto实现。

1.2. 行内元素相对于父控件居中

只能通过父控件的text-align实现。

body {
  text-align: center;
}
span {
  width: 100px;
  height: 100px;
  background-color: skyblue;
}

image-20240309142928395

2. 实现单行文字垂直居中

对于单行文字:可以实现文字垂直居中(height 等于 line-height)。

image-20240309144235356

div {
  width: 300px;
  height: 300px;
  background-color: pink;
  line-height: 300px;
}
<div>我是单行文字</div>

由于字体设计原因,靠上述办法实现的居中,并不是绝对的垂直居中,但如果一行中都是文字,不会太影响观感。

3. 子绝父相实现子元素的水平垂直居中

前提:定位的元素必须设置宽和高!!!

这里我们创建父元素和子元素,并设置样式。

.father {
  width: 600px;
  height: 600px;
  background: pink;
}
.son {
  width: 300px;
  height: 300px;
  background: #95a299;
}

image-20240310184506760

3.1. 方案一

直接计算移动的需要距离。

left: 父子元素高度差的一半;
top: 父子元素宽度差的一半;

3.1.1. 示例

子元素 y 轴移动的距离是父子元素高度差的一半,

子元素 x 轴移动的距离是父子元素宽度差的一半。

.father {
  width: 600px;
  height: 600px;
  background: pink;
  position: relative;
}

.son {
  width: 300px;
  height: 300px;
  background: #95a299;
  position: absolute;
  top: 150px;
  left: 150px;
}

弊端:偏移值lefttop是写死的,如果父元素的宽度发生改变,子元素就无法水平居中了。

3.2. 方案二

这里的lefttop我们可以用百分比来表示,子元素相对父元素移动 50%的距离后,再根据子元素的外边距进行调整。

left: 50%;
top: 50%;
margin-left: 自身宽度的一半;
margin-top: 自身高度的一半;

3.2.1. 示例

.son {
  width: 300px;
  height: 300px;
  background: #95a299;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -150px; /* 向左移动自身宽度的一半 */
  margin-top: -150px; /* 向上移动自身宽度的一半 */
}

弊端:由于margin-leftmargin-top值是写死的,如果 son 的宽度发生改变,子元素也无法水平居中。

3.3. 方案三(推荐)

子元素相对父元素移动 50%的距离后,使用transform调整子元素的位置。

3.3.1. 示例

width: 300px;
height: 300px;
background: #95a299;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

优势:不用计算调整子元素移动移动的距离,用百分比表示即可。

3.4. 方案四(了解一下)

子绝父相,子元素设置以下属性,也能进行水平垂直居中。

简单理解:四个方向有相同的力在拉这个盒子,margin:auto是让这个盒子的位置保持中立,来达到盒子处于正中心。

        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        margin: auto;

4. flex 实现水平垂直居中

4.1. 方法一

父元素开启 flex 布局,随后使用 justify-contentalign-items 实现水平垂直居中。

display: flex;
/* 设置子元素水平居中 */
justify-content: center;
/* 设置子元素垂直居中 */
align-items: center;
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>12-flex布局-实现子元素水平垂直居中</title>
    <style>
      .father {
        background: pink;
        height: 300px;
        display: flex;
        /* 设置子元素水平居中 */
        justify-content: center;
        /* 设置子元素垂直居中 */
        align-items: center;
      }
      .son {
        width: 100px;
        height: 100px;
        background: #a5ccaf;
      }
    </style>
  </head>
  <body>
    <div class="father">
      <div class="son"></div>
    </div>
  </body>
</html>

4.2. 方法二

父容器开启 flex 布局,随后子元素 margin: auto

.father {
  background: pink;
  height: 300px;
  display: flex;
}
.son {
  width: 100px;
  height: 100px;
  background: #a5ccaf;
  margin: auto;
}
```

4.2. 方法二

父容器开启 flex 布局,随后子元素 margin: auto

.father {
  background: pink;
  height: 300px;
  display: flex;
}
.son {
  width: 100px;
  height: 100px;
  background: #a5ccaf;
  margin: auto;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1914608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【linux】 sudo apt update报错——‘由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32’

【linux】 sudo apt update报错——‘由于没有公钥&#xff0c;无法验证下列签名&#xff1a; NO_PUBKEY 3B4FE6ACC0B21F32’ 在运行sudo apt update时遇到报错&#xff0c;由于没有公钥&#xff0c;无法验证下列签名&#xff1a; NO_PUBKEY 3B4FE6ACC0B21F32 解决方法&#x…

Vue 项目中 history 路由模式的使用

在最近帮客户开发的一个项目中&#xff0c;由于项目的特殊性&#xff0c;需要用到 Vue 中的 history路由模式。该模式使用时会涉及到“上传白屏”和“刷新 404 问题”。在帮助客户解决这两个问题的过程中&#xff0c;总结问题的解决方案并记录下来&#xff0c;希望能够保留这篇…

【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树

目录 1 -> 红黑树 1.1 -> 红黑树的概念 1.2 -> 红黑树的性质 1.3 -> 红黑树节点的定义 1.4 -> 红黑树的结构 1.5 -> 红黑树的插入操作 1.6 -> 红黑树的验证 1.8 -> 红黑树与AVL树的比较 2 -> 红黑树模拟实现STL中的map与set 2.1 -> 红…

私域流量新纪元:解锁电商增长新引擎

一、私域流量的战略价值再审视 在数字化转型的浪潮中&#xff0c;流量已成为企业生命力的源泉。相较于公域流量的广泛而难以深度触及&#xff0c;私域流量以其独有的专属性和高复用性&#xff0c;为企业搭建起通往用户内心的桥梁。它不仅赋予企业精准营销的能力&#xff0c;还…

Qt:11.输入类控件(QLineEdit-单行文本输入控件、QTextEdit-多行文本输入控件、QComboBox-下拉列表的控件)

一、QLineEdit-单行文本输入控件&#xff1a; 1.1QLineEdit介绍&#xff1a; QLineEdit 是 Qt 库中的一个单行文本输入控件&#xff0c;不能换行。允许用户输入和编辑单行文本。 1.2属性介绍&#xff1a; inputMask 设置输入掩码&#xff0c;以限定输入格式。setInputMask(con…

C#知识|账号管理系统:数据库查询账号类别动态绑定到下拉框。

哈喽,你好啊,我是雷工! 本节学习如何将数据库中账号类别动态添加到下拉框列表中。 以下为学习笔记。 01 类型表 SQLServer数据库LGAccountManagentDB中AccountType表的数据内容为: 该数据库及数据表的创建可以查看: 《 数据库|基于T-SQL创建数据表(练习笔记)》 更多关于…

(一)项目实践-利用Appdesigner制作目标跟踪仿真软件

目录 前言 一、软件页面设计 二、仿真部分 &#xff08;一&#xff09;参数输入 &#xff08;二&#xff09;绘图部分 &#xff08;三&#xff09;目标追踪程序 总结 前言 本博客有一个专栏用来介绍有关MATLAB中的Appdesigner的操作以及使用&#xff0c;本文是为了深化读者对于…

动态规划专题一 斐波那契数问题

目录 题一 最小花费爬楼梯 1、算法解析 1&#xff09;确定状态&#xff1a; ​编辑2&#xff09;状态转移方程&#xff1a; ​编辑3&#xff09;初始化&#xff1a; 4&#xff09;填表顺序&#xff1a; 5&#xff09;返回值&#xff1a; 2、代码 题二 第N个泰波那锲数 …

Git 命令行快速入门

前言 &#xff08;1&#xff09;新手个人建议使用TortoiseGit这类图形化界面来上手学习。 &#xff08;2&#xff09;如果一定需要用命令行进行操作&#xff0c;可以按照B站&#xff1a;程式与网页开发者必备技能&#xff01;Git 和 GitHub 零基础快速上手&#xff0c;轻松掌握…

odoo模型继承

odoo模型继承 模块化是Odoo一个非常重要的功能。一个模块通常定义一块业务内容&#xff0c;模块之间是可以交互的。所以从已有模块中去继承修改原有模块功能就很有必要。 Odoo中&#xff0c;模型之间也定义了一套继承的逻辑&#xff0c;目前有三种继承方 式&#xff1a; 1、…

学习测试7-ADB的使用

ADB是什么&#xff1f; ADB&#xff0c;即 Android Debug Bridge&#xff08;安卓调试桥&#xff09; 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具&#xff0c;它可为各种设备操作提供便利&#xff0c;如安装和调试应用&#xff0c;并提供对 Unix shell&…

ScrapySharp框架:小红书视频数据采集的API集成与应用

引言 随着大数据时代的到来&#xff0c;数据采集成为了互联网企业获取信息的重要手段。小红书作为一个集社交和电商于一体的平台&#xff0c;其丰富的用户生成内容&#xff08;UGC&#xff09;为数据采集提供了丰富的资源。本文将介绍如何使用ScrapySharp框架进行小红书视频数…

FLinkCDC引起的生产事故(二)

背景&#xff1a; 最近在做实时数据的抽取工作&#xff0c;利用FLinkCDC实时抽取目标库Oracle的数据到Doris中&#xff0c;但是在抽取的过程中&#xff0c;会导致目标库的生产库数据库非常卡顿&#xff0c;为了避免对生产环境的数据库造成影响&#xff0c;对生产环境的数据库利…

BJT交流分析+共发射极(CE)放大器+单片机的中断系统(中断的产生背景+使用中断重写秒表程序+中断优先级)

2024-7-10&#xff0c;星期三&#xff0c;16:58&#xff0c;天气&#xff1a;阴&#xff0c;心情&#xff1a;晴。今天终于阴天啦&#xff0c;有点风凉快一点了&#xff0c;不然真要受不了了&#xff0c;然后没有什么特殊的事情发生&#xff0c;继续学习啦&#xff0c;加油加油…

物流数据分析成本利润计算软件,佳易王物流货运单管理系统操作教程

前言&#xff1a; 物流数据分析成本利润计算软件&#xff0c;佳易王物流货运单管理系统操作教程 以下软件操作教程以&#xff0c;佳易王物流单统计分析软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件操作教程 1、佳易王物流货运…

原生小程序生成二维码方法之一

效果图&#xff1a; 第一步&#xff1a;下载对应的包并构建&#xff08;工具---》构建npm&#xff09; npm install weapp-qrcode --save 第二步&#xff1a;在wxml页面声明canvas <canvas style"width: 200px; height: 200px;margin:0 auto;" canvas-id"myQ…

【QT】QComboBox允许输入查询,且不区分大小写

目录 0.简介 1.环境 2.详细代码 3.参考 0.简介 项目需求&#xff0c;原本有一个下拉框&#xff0c;但是条目太多&#xff0c;不好搜索&#xff0c;所以用户要求可以输入查找 修改前 &#xff1a; 修改后&#xff1a; 1.环境 windows11 vs-code qt5.12 2.详细代码 QComboB…

常用网络概念

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ​​ 目录 了解组织 局域网技术 …

将文档做成试卷生成小程序

&#x1f449;将文档题库导入&#xff0c;轻松开启题目随机组卷&#xff0c;生成考试试卷 &#x1f449;创建考试&#xff0c;从题库中抽取试题&#xff0c;配置分值&#xff0c;组成标准的试卷 &#x1f449;如果想要在线组织答题考试的话&#xff0c;进入到考试详情页面&…

大数据信用评分太低,是什么原因引起的?

在大数据时代&#xff0c;个人的大数据信用评分变得尤为重要。它不仅影响着我们能否顺利地获得贷款、信用卡等金融服务&#xff0c;还在很多方面影响着我们的日常生活。那么&#xff0c;哪些原因可能会导致我们的大数据信用评分降低呢?本文将对此进行详细的总结&#xff0c;一…