跳到主要内容位置

10 种方法使用 CSS 水平居中一个元素

张旭乾
软件工程师 / B站UP主

我们在前端开发中,经常会有居中某个元素的需求。因为 CSS 对于居中的方式有多种多样,在不同场景下有不同的效果,需要特别记住它们的应用场景才能够正常的居中元素。那么这篇文章,我们就看一下在 CSS 中,水平居中一个元素的不同方法和技巧,帮助你在前端开发中更加游刃有余。

使用 text-align 居中行内元素

text-align 不仅可以居中文本,还可以居中行内元素(如文本或图片)。把父元素的 'text-align' 设置为 center,然后把子元素的 display 属性设置为 inline 就可以了。

.parent-element {
text-align: center;
}

使用 display: inline-block 居中

这个和第一种方式类似,因为 inline-block 属于行内的块级元素,它也会受 text-align 的影响,从而进行水平居中。在父元素上设置 text-align: center,然后把要居中的元素的 display 属性设置为 inline-block 就可以了。

.parent-element {
text-align: center;
}

.centered-element {
display: inline-block;
}

使用已知宽度的块级元素居中

对于具有指定宽度的块级元素,可以利用 margin 属性来居中它本身,只需要把左右边距都设置为 auto 就可以了,它会让元素在容器内自动居中。

.block-element {
width: 50%;
margin-left: auto;
margin-right: auto;
}

或者:

.block-element {
width: 50%;
margin: 0 auto;
}

使用 Flexbox 居中元素

Flexbox 是现代的、功能强大、并且兼容性良好的 CSS 布局方式,可以很简单的就实现块级元素的居中。只需要把 display: flexjustify-content: center 设置给要居中的元素的父元素就可以了。

.parent-container {
display: flex;
justify-content: center;
}

使用 CSS Grid 居中元素

CSS Grid 是比 flex 更强大的布局系统,是一种比较新的布局方式,兼容性可能不及 flex 布局,但是它能帮你实现复杂的响应式网页设计。要在 Grid 布局里水平居中元素,可以在父元素上设置 display: gridjustify-items: center 属性。

.grid-container {
display: grid;
justify-items: center;
}

使用 display: grid 和 place-items: center 居中

这种方法利用了 CSS Grid 布局的简化设置属性,在父元素上设置 display: grid,然后使用 place-items: center 同时进行水平和垂直居中。如果只需要水平居中,可以使用 place-items: center start

.grid-container {
display: grid;
place-items: center;
}

居中 absolute 绝对定位元素

对于绝对定位元素,即 position 设置为 absolute 的元素,可以把 left 属性值设置为 50%,然后再利用 transform 属性,通过 translateX() 函数,把元素水平偏移 -50%, 也就是向左偏移,来实现居中。

.absolute-element {
position: absolute;
left: 50%;
transform: translateX(-50%);
}

使用 calc() 函数居中

对于绝对定位元素,还可以使用 calc() 函数来进行水平居中。将 left 属性设置为 calc(50% - 元素宽度的一半)

.absolute-element {
position: absolute;
width: 200px;
left: calc(50% - 100px);
}

使用 position: sticky 居中

position: sticky 可用于实现相对于视口(viewport) 或包含块(containing block) 的居中。将元素的 position 属性设置为 sticky,然后使用 leftcalc() 函数来设置元素的水平位置。

.sticky-element {
position: sticky;
left: calc(50% - 元素宽度的一半);
}

使用 display: table 和 display: table-cell 居中

这种方法借鉴了 HTML 传统的表格布局的思路,通过将父元素设置为 display: table,子元素设置为 display: table-cell,然后在子元素中应用 text-align: center 实现居中。

.parent-element {
display: table;
width: 100%;
}

.child-element {
display: table-cell;
text-align: center;
}

结论

以上是一些常见的水平居中方法,了解这些方法之后,你就可以在不同场景下实现元素的水平居中。结合实际需求选择合适的方法,让你开发中减少错误,提高效率,省下的时间可以学习新技术或者摸鱼~

提示

一系列的课程让你成为高级前端工程师。课程覆盖工作中所有常用的知识点和背后的使用逻辑,示例全部都为工作项目简化而来,学完即可直接上手开发!

即使你已经是高级前端工程师,在课程里也可能会发现新的知识点和技巧,让你的工作更加轻松!

《React 完全指南》课程,包含 React、React Router 和 Redux 详细介绍,所有示例改编自真实工作代码。点击查看详情。

《Vue 3.x 全家桶完全指南与实战》课程,包括 Vue 3.x、TypeScript、Vue Router 4.x、Vuex 4.x 所有初级到高级的语法特性详解,让你完全胜任 Vue 前端开发的工作。点击查看详情。

《React即时通信UI实战》课程,利用 Storybook、Styled-components、React-Spring 打造属于自己的组件库。

《JavaScript 基础语法详解》本人所著图书,包含 JavaScript 全面的语法知识和新特性, 可在京东、当当、淘宝等各大电商购买