CSS实现垂直居中的十五种方法

article/2025/6/24 1:07:05

情景一:单行文字垂直居中

 

1、line-height

    原理是在于将单行文字的行高设定后,文字会位于行高的垂直中间位置

<div class="text-con">单行文字垂直居中</div><style>.text-con {width: 200px;height:  60px;line-height: 60px;color: #fff;background: #000;text-align: center;}</style>

 

情景二:多行文字垂直居中

1、absolute + margin负值

    定位设置top:50%来抓取空间高度的50%,然后将居中元素的margin-top设置为负一半的高度

<h3>absolute + margin负值</h3><div class="box"><div class="content">absolute + margin负值多行文本垂直居中<a>absolute + margin负值多行文本垂直居中</a>absolute + margin负值多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;position: relative;}.content {width: 400px;background: #ccc;height: 70px;position: absolute;top: 50%;left: 50%;margin-left: -200px;margin-top: -35px;}</style>

 

2、absolute + margin auto

    当元素设置为绝对定位后,假设它是抓取不到整体可运用的空间范围,所以margin:auto会失效,但是当你设置了top:0;bottom:0;时,绝对定位元素就抓到了可运用的空间了,这是你的margin:auto;就生效了。此方法的缺点是定位元素必须有固定的宽高(百分比也可)才能正常居中

<h3>absolute + margin auto</h3><div class="box"><div class="content">absolute + margin auto 多行文本垂直居中<a>absolute + margin auto 多行文本垂直居中</a>absolute + margin auto 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;position: relative;}.content {width: 400px;height: 70px;background: #ccc;position: absolute;top: 0;right: 0;bottom: 0;left: 0;margin: auto;}</style>

 

3、absolute + translate

    此居中的定位元素不需要固定的宽高,我们利用绝对定位的top和left设置元素跟上方和左方各为50%,再利用translate(-50%, -50%)位移居中元素自身的宽和高的50%来达到居中;不设置宽高时会自动充满

<h3>absolute + translate</h3><div class="box"><div class="content">absolute + translate 多行文本垂直居中<a>absolute + translate 多行文本垂直居中</a>absolute + translate 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;position: relative;}.content {background: #ccc;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}</style>

 

4、flex + align-items

    只要设定父层display:flex以及设定次轴属性align-items:center就好了,有点事不需要设置高度就可以自动居中,代码简单

    

<h3>flex + align-items</h3><div class="box"><div class="content">flex + align-items 多行文本垂直居中<a>flex + align-items 多行文本垂直居中</a>flex + align-items 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: flex;justify-content: center;align-items: center;}.content {width: 400px;background: #ccc;}</style>

 

5、flex + auto

    父层元素设置display:flex,里层元素设置margin:auto就可实现垂直居中

<h3>flex + margin:auto</h3><div class="box"><div class="content">flex + margin:auto 多行文本垂直居中<a>flex + margin:auto 多行文本垂直居中</a>flex + margin:auto 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: flex;}.content {width: 400px;background: #ccc;margin: auto;}</style>

 

6、grid + template

    把模板设置成三列,就能搞定垂直居中了

<h3>grid + template</h3><div class="box"><div class="content">grid + template 多行文本垂直居中<a>grid + template 多行文本垂直居中</a>grid + template 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: grid;grid-template-rows: 1fr auto 1fr;grid-template-columns: 1fr auto 1fr;grid-template-areas:'. . .''. amos .''. . .';}.content {width: 400px;background: #ccc;grid-area: amos;}</style>

 

7、grid + align-items

    在flex中align-items是针对次轴cross axis作对齐,而grid中是针对Y轴作对齐,可以把它想象成表格中存储单元的vertical-align属性来看

<h3>grid + align-items</h3><div class="box"><div class="content">grid + align-items 多行文本垂直居中<a>grid + align-items 多行文本垂直居中</a>grid + align-items 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: grid;justify-content: center;align-items: center;}.content {width: 400px;background: #ccc;}</style>

 

8、grid + align-content

    grid中的align-content与flex中的有些差异,在flex中仅能针对多行元素起作用,但在grid中没有这个问题,可以用作对子元素做垂直居中

<h3>grid + align-content</h3><div class="box"><div class="content">grid + align-content 多行文本垂直居中<a>grid + align-content 多行文本垂直居中</a>grid + align-content 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: grid;justify-content: center;align-content: center;}.content {width: 400px;background: #ccc;}</style>

 

9、grid + align-self

    align-self是对grid Y轴的个别对齐方式,只要对单一子元素设置为align-self: center就能达到垂直居中

<h3>grid + align-self</h3><div class="box"><div class="content">grid + align-self 多行文本垂直居中<a>grid + align-self 多行文本垂直居中</a>grid + align-self 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: grid;justify-content: center;}.content {width: 400px;background: #ccc;align-self: center;}</style>

 

10、grid + place-items

    place-items是align-items与justify-items的缩写,简单说就是水平和居中的对齐方式

<h3>grid + place-items</h3><div class="box"><div class="content">grid + place-items 多行文本垂直居中<a>grid + place-items 多行文本垂直居中</a>grid + place-items 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: grid;place-items: center;}.content {width: 400px;background: #ccc;align-self: center;}</style>

 

11、grid + place-content

    place-content是align-content与juestify-content的缩写

<h3>grid + place-content</h3><div class="box"><div class="content">grid + place-content 多行文本垂直居中<a>grid + place-content 多行文本垂直居中</a>grid + place-content 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: grid;place-content: center;}.content {width: 400px;background: #ccc;align-self: center;}</style>

 

12、grid + margin

    由于grid元素对空间解读的特殊性,只要在父层元素设定display: grid,在需要垂直居中的元素上设置margin: auto即可自动居中,这点与flex+margin类似

<h3>grid + margin</h3><div class="box"><div class="content">grid + margin 多行文本垂直居中<a>grid + margin 多行文本垂直居中</a>grid + margin 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: grid;}.content {width: 400px;background: #ccc;margin: auto;}</style>

13、display: table-cell

    原理在于使用css的display属性将div设置成表格的单元格,这样就能利用支持存储单元格对齐的vertical-align属性来实现垂直居中。(不建议使用,自认为table是个不好控制的东东,看效果图就知道这种方式并不适合多行文本,emmm)

<h3>display: table-cell</h3><div class="box"><div class="content">display: table-cell 多行文本垂直居中<a>display: table-cell 多行文本垂直居中</a>display: table-cell 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;display: table-cell;text-align: center;vertical-align: middle;}.content {width: 400px;background: #ccc;margin: auto;}</style>

 

14、calc

    calc是计算机英文单词calculator的缩写,利用calc()方法可以将百分比及时且动态的计算出实际需要什么高度,但是大量使用会影响网页性能

<h3>calc</h3><div class="box"><div class="content">calc 多行文本垂直居中<a>calc 多行文本垂直居中</a>calc 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;}.content {width: 400px;background: #ccc;position: relative;top: calc((100% - 70px) / 2);margin: auto;}</style>

 

15、relative + translateY

    这个方法是利用了top: 50%,让元素上放产生固定百分比的距离,接着让要居中的元素本身使用translateY的百分比来达成垂直居中的需求,犹豫translate的百分比单位是利用元素自身的尺寸作为100%,这样让我们要利用元素自身宽高做事变得很方便

<h3>relative + translateY</h3><div class="box"><div class="content">relative + translateY 多行文本垂直居中<a>relative + translateY 多行文本垂直居中</a>relative + translateY 多行文本垂直居中</div></div><style>.box {width: 500px;height: 200px;border: 1px #000 solid;}.content {width: 400px;background: #ccc;position: relative;top: 50%;transform: translateY(-50%);margin: auto;}</style>

 

情景三:多对象的垂直居中

 

1、line-height + inline-block

    将多个元素或多行元素当成一个来看待,所以要讲这些数据多包一层,并将其设定为inline-block,并在该inline-block对象的外层对象使用line-height来代替height的设置,

<h3>line-height + inline-block</h3><div class="box"><div class="content"><div>这是第一个元素</div><p>这是第二个元素</p><a>这是第三个元素</a></div></div><style>.box {width: 500px;border: 1px #000 solid;line-height: 200px;text-align: center;}.content {width: 400px;background: #ccc;display: inline-block;height: auto;line-height: 1;}</style>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/29b76cl8.shtml

相关文章

CSS垂直居中的10种实现姿势

前言 前端开发中元素居中是最常见和最经常使用到的css技巧&#xff0c;不仅开发中经常会用到&#xff0c;面试官出题考核基础时有时候也会问道这类问题。本文主要介绍10种垂直居中的方法。希望对你我都有帮组。 1、line-heightheight实现 如果子元素是行内文本元素的话&…

CSS 垂直居中的七种方法——史上最详细总结

博主目前在蚂蚁集团-体验技术部&#xff0c;AntV/S2 是博主所在团队的开源项目——多维交叉分析表格&#xff0c;欢迎使用&#xff0c;感谢到 S2 github 仓库点赞 star&#xff0c;有任何关于前端面试、就业、技术问题都可给在文章后留言。 我们在写页面时&#xff0c;通常会用…

严题集6.65//Leetcode105 已知二叉树前序序列和中序序列分别存放在两个一位数组中,建立该二叉树的二叉链表

一、问题描述 注意可以假设数组中没有重复元素&#xff0c;这位我们判断子树是否为空时提供了便利。 二、DVC版本 先是在DVEC上编译的&#xff0c;供读者参考。 后面有LeetCode版的。 BiTree Resume_BiTree(TElemType *pre,TElemType *mid,int prelen,int midlen) //6-65 前…

二叉树的前序序列、中序序列、后序序列、层次序列

前序序列根 左子树 右子树&#xff0c;中序序列左子树 根 右子树&#xff0c;后序序列左子树 右子树 根&#xff0c;层次序列根 第二层从左到右 第三层从左到右 以此类推。中序序列又称为对称序列。 前序序列第一个节点为根节点&#xff0c;后序序列最后一个节点为根节点&…

331.验证二叉树的前序序列化

如果只给一个前序遍历&#xff0c;是不能构造出二叉树的&#xff0c;但是把空节点也加上&#xff0c;就可以唯一构造一个二叉树&#xff0c;按要求模拟一遍&#xff1a; 代码的执行过程被唯一限制住&#xff0c;还有一类是最优化问题&#xff0c;用算法解决该类问题。 class …

【数据结构】二叉树的链式存储结构(通过前序序列和中序序列构造二叉树

说明&#xff1a;需要分别输入要二叉树的前序序列和中序序列才能构建二叉树。如果构建失败&#xff0c;程序会报错。 比如我们给定一个二叉树&#xff0c;容易知道 前序序列为&#xff1a;GDAFEMHZ 中序序列为&#xff1a;ADEFGHMZ 程序运行结果&#xff1a; 源代码 #include&…

二叉树:已知前序序列与后序序列建树

二叉树&#xff1a;已知前序与后序建树 已知前序与中序、后序与中序建树是常遇到的算法问题。若已知前序序列与后序序列&#xff0c;要求输出满足条件的树的个数或者输出所有可能的树的中序序列&#xff0c;该怎么解决&#xff1f;下面我们一步步讨论这个问题。 首先&#xf…

LeetCode 每日一题331. 验证二叉树的前序序列化

331. 验证二叉树的前序序列化 序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&#xff0c;我们可以使用一个标记值记录&#xff0c;例如 #。 _9_/ \3 2/ \ / \4 1 # 6 / \ / \ / …

试证明:已知二叉树的前序序列和中序序列,可以唯一确定该二叉树

假设二叉树BT的总的结点个数为n&#xff0c;前序序列pre为&#xff0c;中序序列pin为&#xff0c;现用数学归纳法证明pre和pin可以唯一确定这棵二叉树&#xff1a; 1. n 1时&#xff0c;前序和中序序列都各只有一个元素&#xff0c;&#xff0c;此时等于&#xff0c;为BT的根…

验证二叉树的前序序列化[抽象前序遍历]

抽象前序遍历 前言一、验证二叉树的前序序列化二、抽象前序遍历总结参考文献 前言 难题要么复杂&#xff0c;要么未知&#xff0c;要么就是抽象考察&#xff0c;这三种类型都比较锻炼分析问题的能力。 一、验证二叉树的前序序列化 二、抽象前序遍历 package everyday.tree;p…

通过前序序列和中序序列或中序序列和后序序列还原二叉树(Java)

首先看一下这个二叉树的结构&#xff0c;回忆一下前序序列的输出方式&#xff08;中前后&#xff09;&#xff0c;中序序列的输出方式&#xff08;前中后&#xff09;&#xff0c;后序序列的输出方式&#xff08;前后中&#xff09;。 前中序列还原二叉树 此二叉树的前中序列…

已知前序序列和中序序列重建二叉树

一.解决方法&#xff1a; 在相关的书籍中描述了一个递归的解决方法&#xff0c;其算法思想如下&#xff1a; 1.从前序序列中第一个元素开始&#xff0c;取出一个元素&#xff0c;索引后移一位&#xff08;preIndex1&#xff09; 2.根据选择到的数值创建一个树节点newNode 3.然…

7-3 前序序列创建二叉树 (25 分) PTA

编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以二叉链表存储&#xff09;。 例如如下的先序遍历字符串&#xff1a; ABC##DE#G##F### 其中“#”表示的是空格&#xff0c;代表一棵空树。然后再对二叉树进行中序遍…

C++实现 利用前序序列和中序序列构建二叉树

前言&#xff1a;已知一个二叉树的中序序列和前序序列&#xff0c;或者中序序列和后序序列就可以唯一确定一个二叉树&#xff08;必须知道中序序列&#xff09;&#xff0c;只知道前序和后序不能创建唯一的二叉树。 1.引例 已知下列某二叉树(8个结点)的两个序列&#xff0c;如…

7-2 前序序列创建二叉树

7-2 前序序列创建二叉树 (25 分) 编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以二叉链表存储&#xff09;。 例如如下的先序遍历字符串&#xff1a; ABC##DE#G##F### 其中“#”表示的是空格&#xff0c;代表一…

由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

下面三种序列可以唯一的构造唯一的一棵二叉树&#xff1a; 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #…

python实现根据前序序列和中序序列求二叉树的后序序列

根据前序序列求根结点&#xff0c;根据中序序列求左右子树。 如上图&#xff1a;根据前序序列&#xff0c;谁在前面谁就是根结点&#xff1b;根据根结点&#xff0c;确定左右子树。 class BiTreeNode:def __init__(self, data):self.data dataself.lchild Noneself.rchild …

已知二叉树的前序序列跟中序序列求后序序列(C语言)

原理是&#xff0c;比如 先序序列决定二叉树的根结点&#xff08;比如上图的“1”&#xff09;&#xff0c;后序序列决定二叉树的左右子结点&#xff08;比如上图的“4”&#xff0c;“7”&#xff0c;“2”为左子树的那部分&#xff0c;而“8”&#xff0c;“5”&#xff0c;“…

验证二叉树的前序序列化

缩点法验证二叉树的前序序列化 题目解决思路代码说明 题目 &#xff08;1&#xff09;序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&#xff0c;我们可以使用一个标记值记录&#xff0c;例如 …

验证二叉树的前序序列化Python解法

序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&#xff0c;我们可以使用一个标记值记录&#xff0c;例如 #。 例如&#xff0c;上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,…