CSS 终于在 2024 年增加了垂直居中功能

2024-08-29
11084 分钟
...

在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 align-content: center进行垂直居中。

<div style="align-content: center; height: 100px;">
  <code>align-content</code> 就是这么简单!
</div>

支持情况:

Chrome: 123Firefox: 125Safari: 17.4

CSS 对齐一般会使用 flexboxgrid 布局,因为 align-content 在默认的流式布局中不起作用。在 2024 年,浏览器实现了 align-content

  • 你不需要 flexbox 或 grid,只需要 1 个 CSS 属性就可以进行对齐。
  • 因此内容不需要包裹在 div 中。
<div style="display: grid; align-content: center;">
  内容。
</div>

<div style="display: grid; align-content: center;">
  包含 <em>多个</em> 节点的内容。
</div>

<div style="display: grid; align-content: center;">
  <div>  
    包含 <em>多个</em> 节点的内容。
  </div>
</div>

<div style="align-content: center;">
  包含 <em>多个</em> 节点的内容。
</div>

令人惊讶的是,经过几十年的发展,CSS 终于有了 一个属性 来控制垂直对齐!

垂直居中的历史

浏览器很有趣,像对齐这样的基本需求长期以来都没有简单的答案。以下是在浏览器中垂直居中的方法(水平居中是另一个话题):

方法 1: 表格单元格

星级:★★★☆☆

有 4 种主要布局:流(默认)、表格、flexbox、grid。如何对齐取决于容器的布局。Flexbox 和 grid 相对较晚添加,所以表格是第一种方式。

<div style="display: table;">
  <div style="display: table-cell; vertical-align: middle;">
    内容。
  </div>
</div>

方法 2: 绝对定位

星级:☆☆☆☆☆

通过绝对定位间接的方式来实现这个效果。

<div style="position: relative;">
  <div style="position: absolute; top: 50%; transform: translateY(-50%);">
    内容。
  </div>
</div>

这个方式通过绝对定位来绕过流式布局:

  • position: relative 标记参考容器。
  • position: absolute; top: 50% 将内容的边缘放置在中心。
  • transform: translateY(-50%) 将内容中心偏移到边缘。

方法 3: 内联内容

星级:☆☆☆☆☆

虽然流布局对内容对齐没有帮助。它允许在一行内进行垂直对齐。那么为什么不使一行和容器一样高呢?

<div class="container">
  ::before
  <div class="content">内容。</div>
</div>

.container::before {
  content: '';
  height: 100%;
  display: inline-block;
  vertical-align: middle;
}
.content {
  display: inline-block;
  vertical-align: middle;
}

这个方式有一个缺陷,需要额外创建一个伪元素。

方法 4: 单行 flexbox

星级:★★★☆☆

现在布局中的 Flexbox 变得广泛可用。它有两种模式:单行和多行。在单行模式(默认)中,行填充垂直空间,align-items 对齐行内的内容。

<div style="display: flex; align-items: center;">
  <div>内容。</div>
</div>

或者调整行为列,并用 justify-content 对齐内容。

<div style="display: flex; flex-flow: column; justify-content: center;">
  <div>内容。</div>
</div>

方法 5: 多行 flexbox

星级:★★★☆☆

在多行 flexbox 中,行不再填充垂直空间,所以行(只有一个项目)可以用 align-content 对齐。

<div style="display: flex; flex-flow: row wrap; align-content: center;">
  <div>内容。</div>
</div>

方法 6: grid

星级:★★★★☆

Grid 出来的更晚,对齐变得更简单。

<div style="display: grid; align-content: center;">
  <div>内容。</div>
</div>

方法 7: grid 单元格

星级:★★★★☆

注意与前一个方法的微妙区别:

  • align-content 将单元格居中到容器。
  • align-items 将内容居中到单元格,同时单元格拉伸以适应容器。
<div style="display: grid; align-items: center;">
  <div>内容。</div>
</div>

似乎有很多方法可以做同一件事。

方法 8: margin:auto

星级:★★★☆☆

在流布局中,margin:auto 可以水平居中,但不是垂直居中。使用 margin-block: auto 可以设置垂直居中。

<div style="display: grid;">
  <div style="margin-block: auto;">
    内容。
  </div>
</div>

方法 9: 这篇文章的开头

星级:★★★★★

为什么浏览器最初没有添加这个?

<div style="align-content: center;">
  <code>align-content</code> 就是这么简单!
</div>

总结

CSS 的新特性 align-content 提供了一个简单且直接的方式来实现垂直居中,无需使用额外的div包装或复杂的布局模式即可完成垂直居中。但注意这个属性还存在一定的浏览器兼容性,在线上使用需谨慎。


如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
css2025-03-04
CSS 实现文本省略显示【单行,2行,多行】
在 中,长文本内容可能会超出其容器的范围。为了保持良好的用户体验,我们通常会将超出的文本部分以省略号显示。本文将详细介绍如何在CSS中限制文本显示一行、两行或多行,超过部分显示省略号。 1\. 前言 限制文本显示长度并以省略号表示超出部分是常见的需求。通过CSS,可以简单地实现这一效果。我们将分别介绍单行文本、省略两行文本和多行文本的实现方法。 2\. 单行文本省略 要实现单行文本省略,主要使用以下CSS属性: : 禁止文本换行。 :...
学习面试
css2025-03-04
css中,有哪些方式可以隐藏页面元素?区别?
一、前言 在平常的样式排版中,我们经常遇到将某个模块隐藏的场景 通过 隐藏元素的方法有很多种,它们看起来实现的效果是一致的 但实际上每一种方法都有一丝轻微的不同,这些不同决定了在一些特定场合下使用哪一种方法 二、实现方式 通过 实现隐藏元素方法有如下: display:none visibility:hidden opacity:0 设置height、width模型属性为0 position:absolute clip path dis...
学习面试
css2025-03-04
css实现正方形的几种方案及优缺点
前言 在电商、个人博客等网站我们或多或少都可以看到css正方形的应用场景,自适应正方形布局是必须要掌握的;接下来采黎带大家揭开css自适应正方形神秘的面纱 正方形 这很简单,设置盒子宽高都为200px就可以了 自适应正方形 青铜 提起自适应,想必都会想到 rem 、 vw 等相对单位,我们分别用这些单位来实现一下。 rem 屏幕宽度大于1200px时,字体为16px,rem的盒子的大小为 160px \ 160px; 屏幕宽度小于120...
学习面试
css2025-03-04
Flexbox 弹性布局
一、是什么 简称 box,意为”弹性布局”,是一种一维的布局模型。一次只能处理一个维度上的元素布局,一行或者一列。 采用Flex布局的元素,称为 容器( ),简称”容器“;它的所有子元素自动成为容器成员,称为 项目( ),简称”项目“。 容器中默认存在两条轴, 主轴 和 交叉轴 。项目默认沿主轴排列,通过 来决定主轴的方向。 每根轴都有起始线和终止线,用来描述flexbox元素的方向。 任何一个容器都可以指定为 布局。设为 Flex 布...
学习面试
css2025-03-04
提升CSS渲染性能
1\. 提升CSS渲染性能: 2\. 合适使用css选择器: 3\. 提升css文件加载的性能: 4\. 精简css代码: 5\. 合理使用web fonts: 6\. css动画优化:
学习面试
css2024-08-29
伪类和伪元素是什么什么是伪类
什么是伪类 (pseudo classes)? 伪类可以让我们根据元素的状态变化使用 CSS。例如,当我们想要设置某元素在被指标指到时的样式,我们可以使用 伪类来改变样式。 介绍 4 个常见的伪类 (pseudo classes) 用法 当用户的鼠标或触控板等设备放在元素上时,我们可以使用 更改元素的样式。 、 这两个伪类都是用在含有 href 属性的 元素上。 可以调整使用者还未浏览过的链接样式,而 则可以改变使用者已浏览过的链接样式...
学习面试

评论

请登录后发表评论

去登录
加载评论中...

目录