网站首页 > 技术文章 正文
在现代 CSS 中,垂直居中的实现方式已经变得非常简洁直观,以下是几种推荐的 "新选择",它们兼容性好(支持现代浏览器)且代码简洁:
1. Flexbox 布局(最常用)
Flexbox 是处理一维布局的理想选择,垂直居中只需设置父容器的align-items属性。
/* 父容器 */
.parent {
display: flex;
align-items: center; /* 垂直居中 */
/* 可选:配合 justify-content 实现水平居中 */
justify-content: center;
height: 300px; /* 需要明确高度才能垂直居中 */
}
/* 子元素 */
.child {
/* 无需额外设置,自动垂直居中 */
}
原理:align-items: center会使子元素在交叉轴(垂直方向,当 flex-direction 为 row 时)上居中对齐。
2. Grid 布局(更强大的二维布局)
Grid 适合处理二维布局,垂直居中可以通过父容器设置align-items,或子元素设置margin: auto。
方法 A:父容器控制
.parent {
display: grid;
align-items: center; /* 垂直居中 */
justify-items: center; /* 可选:水平居中 */
height: 300px;
}
.child {
/* 无需额外设置 */
}
方法 B:子元素自动居中
.parent {
display: grid;
height: 300px;
}
.child {
margin: auto; /* 同时实现水平和垂直居中 */
}
原理:Grid 布局中,margin: auto会使元素在可用空间中自动居中。
3. 绝对定位 +inset+margin: auto
无需计算偏移量,适合需要脱离文档流的场景。
.parent {
position: relative;
height: 300px;
}
.child {
position: absolute;
inset: 0; /* 等同于 top: 0; right: 0; bottom: 0; left: 0; */
margin: auto; /* 自动分配剩余空间,实现居中 */
/* 注意:子元素需要有明确的宽高(可选,根据内容自适应) */
width: 200px;
height: 100px;
}
原理:inset: 0使子元素填满父容器,margin: auto在剩余空间中居中。
绝对定位 + Transform
.parent {
position: relative;
height: 300px;
}
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%)
width: 200px;
height: 100px;
}
4.place-items简写(Grid/Flex 通用)
CSS 新增的place-items属性是align-items和justify-items的简写,可同时设置垂直和水平居中。
/* Grid 中使用 */
.parent {
display: grid;
place-items: center; /* 等同于 align-items: center; justify-items: center; */
height: 300px;
}
/* Flex 中使用(仅影响 align-items,justify-content 需单独设置) */
.parent {
display: flex;
place-items: center; /* 仅等同于 align-items: center; */
justify-content: center; /* 补充水平居中 */
height: 300px;
}
总结推荐
- 简单场景(一维布局):优先用 Flexbox(代码少,直观)。
- 复杂布局(二维布局):用 Grid(功能更强,支持更复杂的对齐)。
- 需要脱离文档流:用 绝对定位 + inset + margin: auto。
这些方法均支持现代浏览器(Chrome、Firefox、Safari 10+、Edge),无需兼容旧浏览器(如 IE)时,完全可以替代传统的line-height或transform偏移等方法。
- 上一篇: 火狐Firefox 143浏览器稳定版发布
- 下一篇: B端PRD的逻辑性:这6个案例你怎么看?
猜你喜欢
- 2025-09-24 不用Flexbox, 一行代码搞定CSS居中难题
- 2025-09-24 B端PRD的逻辑性:这6个案例你怎么看?
- 2025-09-24 火狐Firefox 143浏览器稳定版发布
- 2025-09-24 新一代CSS选择器:12个技巧让代码量减少70%
- 2024-08-06 提升代码质量:如何遵循 CSS 优先级和最佳实践
- 2024-08-06 使用 CSS 选择器和属性为网页设置主题样式
- 2024-08-06 CSS中before 和after的用法(css before content)
- 2024-08-06 前端入门——css伪类和伪元素(css伪类hover)
- 2024-08-06 CSS3新增选择器——伪元素选择器(html伪选择器)
- 2024-08-06 JavaFX CSS 选择器(java类选择器)
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)