×

CSS 布局 垂直居中

第八篇 - 探索CSS布局的奥秘 - 垂直居中布局

元智汇电子 元智汇电子 发表于2023-11-22 13:44:31 浏览494 评论0

抢沙发发表评论


一,导言

在前一篇中,我们详细讨论了五种水平居中效果的实现方案,涵盖了不同情况下的解决方法及其原理、优缺点:

  • 水平居中文本、行内元素、行内块级元素;

  • 单个块级元素的水平居中;

  • 多个块级元素整体水平居中;

  • 任意数量元素的水平居中;

  • 使用绝对定位+反向移动的水平居中。

在本篇中,我们将深入研究CSS布局的另一个关键主题——垂直居中布局。垂直居中布局同样是前端开发中经常遇到的问题,我们将介绍多种实现方法以满足不同的需求。


二,垂直居中布局探析

垂直居中布局是指当前元素在其父级容器中,垂直方向上实现居中显示的一种布局方式。

垂直居中效果主要涉及以下三种情况:

  • 单行文本、行内元素、行内块元素的垂直居中;

  • 图片的垂直居中;

  • 单个块级元素的垂直居中。

在接下来的内容中,我们将详细探讨这三种情况下的垂直居中布局实现方法,以满足不同场景的需求。



三,单行文本、行内元素、行内块元素的垂直居中

原理

通过利用line-height(行高)属性,为父元素设置相同的高度和行高,从而实现单行文本、行内元素、行内块元素的垂直居中效果。

示例

image.png

通过设置父元素的高度与行高相等,实现文字在容器内的垂直居中效果。

优点

  • 实现简单,兼容性好。

缺点

  • 需要明确父元素的高度;

  • 仅适用于控制单行文本的垂直居中。



四,图片的垂直居中实现

原理

利用vertical-align(垂直对齐)和line-height(行高)属性,通过设置父元素的高度、行高,并将字体大小设为0,实现图片在父容器中的垂直居中效果。

示例

image.png

实现图片在父容器中的垂直居中效果:

  • 为图片的父元素设置高度和行高,将图片控制在父容器的中间区域;

  • 通过vertical-align: middle;设置图片在垂直方向上居中对齐,实现图片在容器内的垂直居中效果。

优点

  • 实现简单,兼容性好。

缺点

  • 需要设置font-size: 0;。


五,单个块级元素的垂直居中实现方法

5.1 使用 table-cell 实现

原理

利用 Table 布局,将父元素设为display: table-cell;并设置vertical-align: middle;,从而实现垂直居中效果。

示例

image.png

将父元素转化为table-cell(相当于 table 中的 td);

通过设置vertical-align: middle;使 td 中的内容实现垂直居中效果。

优点

  • 实现简单,无需设定宽高;

  • 兼容性相对较好(需要IE 8+)。

缺点

  • 父元素被转化为table-cell引发的问题,如对百分比高度的处理等;

  • 对 margin 和 position 的感知不同;

  • 在某些情况下会影响默认布局,需要适当处理。


5.2 使用绝对定位实现

原理

与水平居中相同,使用绝对定位实现垂直居中的思路是:父元素设置相对定位,子元素设置绝对定位;设置子元素相对父元素尺寸的top、right、bottom、left值;再通过相对子元素自身尺寸的margin或transform,进行反向移动,完成垂直居中效果。

示例

image.png

为父元素设置相对定位,为子元素设置绝对定位;

设置top方位为50%(此时并非正中间),再进行反向移动,使其正好处于正中间位置,实现垂直居中的效果。

反向移动的两种方法:

设置margin-top负值实现反向移动;

使用 CSS3 变换属性transform进行垂直位移,移动距离为高度的一半。

优点

  • 实现简单,兼容性好;

  • 可适用于块级、行内元素。

缺点

  • 使用绝对定位,会导致脱离文档流;

  • 使用margin-top负值实现反向移动时,需要知道高度值;

  • 使用 CSS3 变换属性transform实现反向移动,存在兼容性要求(IE 9+)。


5.3 使用 flex 实现

原理

利用 flex 布局,通过设置align-items属性实现垂直居中效果。

示例

image.png

使用 flex 布局,并设置align-items: center;实现垂直居中效果。

优点

  • 实现快捷、简单;

  • 功能强大,可以控制容器内多个子元素的对齐。

缺点

  • 在 PC 端存在兼容性问题;

  • 对移动端友好,要求 android 4.0+。


六,总结

本篇详细介绍了五种垂直居中效果的实现方案,涵盖了文本、行内元素、行内块级元素的垂直居中,以及利用 table-cell、绝对定位+反向移动、flex 布局实现单个块级元素的垂直居中。

主要内容总结:

  1. 文本、行内元素、行内块级元素的垂直居中: 通过设置父元素的高度和行高相等,实现单行文本、行内元素、行内块元素的垂直居中效果。

  2. 图片的垂直居中: 利用 vertical-align 和 line-height 属性,通过为父元素设置高度和行高,将图片垂直居中。

  3. 利用 table-cell,实现单个块级元素的垂直居中: 使用 table 布局,将父元素设为 display: table-cell; 并设置 vertical-align: middle;,实现垂直居中效果。

  4. 使用绝对定位+反向移动,实现单个块级元素的垂直居中: 通过相对定位和绝对定位,设置 top: 50%; 和 transform: translateY(-50%);,实现垂直居中效果。

  5. 使用 flex 布局,实现单个块级元素的垂直居中: 利用 flex 布局,通过设置 align-items: center; 实现垂直居中效果。


下一篇预告: 将继续探讨 CSS 布局-居中布局-垂直居中布局,深入研究垂直居中的更多实现方式。

请期待下一篇的精彩内容!


群贤毕至

访客