一文大白话讲清楚CSS元素的水平居中和垂直居中
文章目录
- 一文大白话讲清楚CSS元素的水平居中和垂直居中
- 1.已知元素宽高的居中方案
- 1.1 利用定位+margin:auto
- 1.2 利用定位+margin负值
- 1.3 table布局
- 2.未知元素宽高的居中方案
- 2.1利用定位+transform
- 2.2 flex弹性布局
- 2.3 grid网格布局
- 3. 内联元素的居中布局
一文大白话讲清楚CSS元素的水平居中和垂直居中
- 先说为啥就要讲居中,不讲别的,因为很简单,因为居中常用且关键
- 那讲一个元素居中,先得看这个元素是个什么货色了吧
- 一般有两种货色,
- 元素的宽高已知
- 元素的宽高未知
- 为啥这么分,因为宽高已知的号操作啊,我都知道你多大了,然后页面就那么大,如果你不居中我就移动呗,移动到居中
- 剩下的不知道宽高的,那没法移啊,不知道移到哪合适,那就要另外另外想办法了
- 所以,先讲宽高已知的
1.已知元素宽高的居中方案
1.1 利用定位+margin:auto
- 上代码
<style>.parent{width: 300px;height: 300px;border: 1px solid green;position: relative;}.child{width: 100px;height: 100px;background-color: red;position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;}
</style>
<div class="parent"><div class="child"></div>
</div>
- 父元素设置相对定位,子元素设置绝对定位,并且子元素的4个定位属性都设置为0,这时候如果子元素没有宽高,会被拉满父元素
- 但是这时候他有宽高,所以它显示100x100,但是这时候子元素的虚拟占位已经撑满了整个父级,如果我们再给一个margin:auto他就可以上下左右都居中了。
- 哪有又问了,凭啥margin:auto就居中了,要是不给auto,给个margin: 10 50 50 10呢。
- 那就会按照这个margin去排列。
- 说白了就是这么个意思,现在父元素下子元素的虚拟占位跟父元素一样大,然后我们把子元素的位置放进去,放进去因为不一样大,就要考虑跟父元素哪个边近一点。有可能哪个都想近一点,哪个都想远一点,那怎么办,auto,你们自己看着分吧,看着分怎么分,平分呗。所以居中了。
- 明白了没有。
1.2 利用定位+margin负值
- 直接上代码
<style>.parent{width: 300px;height: 300px;border: 1px solid green;position: relative;}.child{width: 100px;height: 100px;background-color: red;position: absolute;top:50%;left: 50%;margin-top: -50px;margin-left: -50px;}
</style>
<div class="parent"><div class="child"></div>
</div>
- 这个啥意思,这个好理解,就是我先把你top:50%,left:50%,如果子元素宽高小到极限的话是不是已经居中了,但是现在你有宽度各位一百,那怎么办,我在倒着往回移元素本身的一半不就OK了
- 上图

1.3 table布局
- 设置父元素的display:table-cell,子元素设置display:inline-block,利用vertical和text-align让所有行内块级元素水平垂直居中
- 上代码
<style>.parent{display:table-cell;width: 300px;height: 300px;vertical-align:middle;text-align: center;border: 1px solid black;}.child{display:inline-block;width: 100px;height: 100px;background-color: red;}
</style>
<div class="parent"><div class="child"></div>
</div>

2.未知元素宽高的居中方案
2.1利用定位+transform
- 这个跟定位+margin-负值用法是一样的
- 只不过margin-负值的时候我们需要负元素宽高的一半,所以我们必须先知道宽高是多少,然后才能写
- transform的也是负值,不过translate会自动获取元素的宽高,并以元素的宽高为基准进行百分比偏移,所以我们可以设定偏移量为元素宽高的50%
- 上代码
<meta charset="utf-8">
<style>.parent{width: 300px;height: 300px;border: 1px solid green;position: relative;}.child{background-color: red;position: absolute;top:50%;left: 50%;transform:translate(-50%,-50%);/*用位移代替margin进行偏移了*//*margin-top: -50px;*//*margin-left: -50px;*/}
</style>
<div class="parent"><div class="child">我是子元素,我没有设置宽高</div>
</div>
- 搞定

2.2 flex弹性布局
- 这个最简单,只要父元素设置display:flex,子元素通过justify-content:center和align-items:center轻松实现居中
<meta charset="utf-8">
<style>.parent{width: 300px;height: 300px;border: 1px solid green;display: flex;align-items:center;justify-content:center;}.child{background-color: red;}
</style>
<div class="parent"><div class="child">我是子元素,我没有设置宽高</div>
</div>
- 搞定

2.3 grid网格布局
- grid网格布局和flex弹性布局用法一毛一样,但是兼容性差
- 直接上代码
<meta charset="utf-8">
<style>.parent{width: 300px;height: 300px;border: 1px solid green;display: grid;align-items:center;justify-content:center;}.child{background-color: red;}
</style>
<div class="parent"><div class="child">我是子元素,我没有设置宽高</div>
</div>
3. 内联元素的居中布局
- 上面讲的都是块级元素的居中方式,下面讲内联元素的
- 水平居中
- 行内元素可设置text-algin:center
<meta charset="utf-8">
<style>.parent{width: 500px;height: 300px;text-align: center;background-color: green;}.child{background-color: red;}
</style>
<div class="parent"><span class="child">我是子元素,我是内联元素<br>我的水平居中只需要父元素text-align:center就行</span></div>

- 如果子元素的布局是flex,则父元素的justify-content:center就行
<meta charset="utf-8">
<style>.parent{width: 300px;height: 300px;background-color: green;display: flex;justify-content:center}.child{background-color: red;line-height: 300px;}
</style>
<div class="parent"><span class="child">我是子元素,我是内联flex元素<br>我的水平居中只需要父元素justify-content:center就行</span>
</div>

- 垂直居中
- 单行文本垂直居中,只需要让子元素的line-height=父元素的height
<meta charset="utf-8">
<style>.parent{width: 600px;height: 300px;background-color: green;display: flex;justify-content:center;}.child{width: 400px;background-color: red;line-height: 300px;}
</style>
<div class="parent"><span class="child">单行文本,垂直居中line-height=父height</span>
</div>

- 多行文本父元素垂直居中,可以设置父元素display:table-cell,vertical-align:middle
<meta charset="utf-8">
<style>.parent{width: 600px;height: 300px;background-color: green;display:table-cell;vertical-align:middle;}.child{width: 400px;background-color: red;}
</style>
<div class="parent"><span class="child">我是多行文本,垂直居中只需要让父元素display:table-cell;vertical-align:middle</span>
</div>

相关文章:
一文大白话讲清楚CSS元素的水平居中和垂直居中
文章目录 一文大白话讲清楚CSS元素的水平居中和垂直居中1.已知元素宽高的居中方案1.1 利用定位margin:auto1.2 利用定位margin负值1.3 table布局 2.未知元素宽高的居中方案2.1利用定位transform2.2 flex弹性布局2.3 grid网格布局 3. 内联元素的居中布局 一文大白话讲清楚CSS元素…...
航顺芯片推出HK32A040方案,赋能汽车矩阵大灯安全与智能化升级
汽车安全行驶对整车照明系统的要求正在向智能化方向发展。车灯位于汽车两侧,前期有各种各样的实现包括氙气灯、LED灯等等光源技术。矩阵大灯对汽车照明系统朝着安全性和智能化兼具的方向发展起到了重要推动作用。矩阵大灯可以精细控制到每一个小灯珠,从而…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之12 方案再探:特定于领域的模板 之2 首次尝试和遗留问题解决
本文提要 现在就剩下“体”本身的 约定了--这必然是 自律自省的,或者称为“戒律” --即“体”的自我训导discipline。完整表述为: 严格双相的庄严“相” (<head>侧),完全双性的本质“性”(<boot>侧&…...
redis zset底层实现
1.Redis zset底层实现 转载自:https://marticles.github.io/2019/03/19/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Redis-Zset%E5%8E%9F%E7%90%86/ zset底层是压缩列表 跳表实现的。 跳表里面又由字典hash表 跳表实现。 什么时候用压缩列表?什么时候用…...
go.Bar如何让hovertext显示为legend
在 Plotly 的 go.Bar 图中,如果你想让鼠标悬停时 (hover) 显示的文本 (hovertext) 与图例 (legend) 一致,可以通过 hovertemplate 来控制悬停时的显示内容。 实现方法 hovertemplate 是一种自定义工具,允许你完全控制悬停时的文本显示格式。…...
【Vue】分享一个快速入门的前端框架以及如何搭建
先上效果图: 登录 菜单: 下载地址: 链接:https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码:ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…...
Flink源码解析之:如何根据JobGraph生成ExecutionGraph
Flink源码解析之:如何根据JobGraph生成ExecutionGraph 在上一篇Flink源码解析中,我们介绍了Flink如何根据StreamGraph生成JobGraph的流程,并着重分析了其算子链的合并过程和JobGraph的构造流程。 对于StreamGraph和JobGraph的生成来说&…...
UE(虚幻)学习(三) UnrealSharp插件中调用非托管DLL
上一篇文章中我使用UnrealSharp成功使用了我的一个C#控制台程序中的网络模块,这个程序是基于KCP网络了,其中调用了Cmake 编译的一个C的DLL,在虚幻中DLL需要放在Binaries目录中才可以。Unity中只要放在任意Plugins目录中就可以。 但是Binaries…...
leetcode 3219. 切蛋糕的最小总开销 II
题目:3219. 切蛋糕的最小总开销 II - 力扣(LeetCode) 排序贪心。 开销越大的越早切。 注意m或n为1的情况。 class Solution { public:long long minimumCost(int m, int n, vector<int>& horizontalCut, vector<int>&…...
vant 地址记录
vant ui 的官网地址记录 vant 4 Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. vant2 https://vant-ui.github.io/vant/v2/ vant3 Vant 3 - Lightweight Mobile UI Components built on Vue...
Lua语言入门 - Lua常量
在Lua中,虽然没有直接的常量关键字(如C中的const),但你可以通过一些编程技巧和约定来实现类似常量的行为。以下是几种常见的方法: 1. 使用全局变量并命名规范 你可以定义一个全局变量,并通过命名约定来表示…...
在Microsoft Windows上安装MySQL
MySQL仅适用于Microsoft Windows 64位操作系统,在Microsoft Windows上安装MySQL有不同的方法:MSI、包含您解压缩的所有必要文件的标准二进制版本(打包为压缩文件)以及自己编译MySQL源文件。 注意:MySQL8.4服务器需要在…...
windows下vscode使用msvc编译器出现中文乱码
文章目录 [toc]1、概述2、修改已创建文件编码3、修改vscode默认编码 更多精彩内容👉内容导航 👈👉C 👈👉开发工具 👈 1、概述 在使用MSVC编译器时,出现中文报错的问题可能与编码格式有关。UTF-…...
Git 解决 everything up-to-date
首先使用git log查看历史提交,找到最新一次提交,比如: PS D:\Unity Projects\CoffeeHouse\CoffeeHouse_BurstDebugInformation_DoNotShip> git log commit a1b54c309ade7c07c3981d3ed748b0ffac2759a3 (HEAD -> master, origin/master)…...
Windows配置cuda,并安装配置Pytorch-GPU版本
文章目录 1. CUDA Toolkit安装2. 安装cuDNN3. 添加环境变量配置Pytorch GPU版本 博主的电脑是Windows11,在安装cuda之前,请先查看pytorch支持的版本,cuda可以向下兼容,但是pytorch不行,请先进入:https://py…...
Neo4j 图数据库安装与操作指南(以mac为例)
目录 一、安装前提条件 1.1 Java环境 1.2 Homebrew(可选) 二、下载并安装Neo4j 2.1 从官方网站下载 2.1.1 访问Neo4j的官方网站 2.1.2 使用Homebrew安装 三、配置Neo4j 3.1 设置环境变量(可选) 3.2 打开配置文件(bash_profile) 3.2.1 打开终端…...
2024年12月个人工作生活总结
本文为 2024年12月工作生活总结。 研发编码 Golang语言byte数组赋值 假定有如下变量: var strCode string var bCode [9]byte现需将string类型转换成byte类型,如下: bCode []byte(strCode)无法转换,提示: cannot…...
PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目
在创建PHP项目之前我们需要安装PHP插件,安装步骤如下:Windows:IntelliJ IDEA Ultimate 安装 PHP 插件-CSDN博客 1、导入已有PHP项目,导入之后选择,File > Setting 选择对应CLL Interpreter,如果没有操作…...
【嵌入式C语言】指针数组结构体
指针与数组 指针与数组指针数组数组指针 多维数组数组名的保存 结构体定义结构体定义结构体变量使用typedef简化结构体声明访问结构体成员结构体内存分配字节对齐位域定义位域位域的限制示例 指针与数组 指针数组和数组指针是两个不同的概念,它们涉及到指针和数组的…...
国产数据库TiDB从入门到放弃教程
国家层面战略,安全的角度,硬件、软件国产化是趋势,鸿蒙电脑操作系统、鸿蒙手机操作系统…数据库也会慢慢国产化,国产数据库TiDB用起来比OceanBase丝滑,本身没有那么重。 从入门到放弃 1. 介绍1.1 TiDB 的主要特点1.2 T…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
