代码很容易理解:先把这个元素的左上角放在视口(或最近的、具有定位属性的祖先元素)的正中心,然后再利用负外边距把它向左、向上移动(移动距离相当于它自身宽高的一半)。借助强大的 calc() 函数,这段代码还可以省略两行声明。
这个方法最大的局限在于它 要求元素的宽高是固定的。
通常情况下,对那些需要居中的元素来说,其尺寸往往是由其内容来决定的。如果能找到一个属性的百分比值以元素自身的宽高作为解析基准,那我们的难题就迎刃而解了!在这个例子中,答案来自 CSS 变形属性。当我们在 translate() 变形函数中使用百分比值时,是以这个元素自身的宽度和高度为基准进行换算和移动的,这样我们就可以彻底解除对固定尺寸的依赖,该方案适用于固定尺寸以及不固定尺寸。
固定宽高:
不固定尺寸:
如果你只想把元素 相对于视口进行居中,可以试试此方案。
可以利用 margin 同时完成水平和垂直的居中,但是要时刻记住它的局限性(仅 相对于视口进行居中)
利用 flexbox,我们只需要写两行声明:先给这个待居中元素的父元素设置 display: flex
,再给这个元素自身设置 margin: auto
。请注意,当我们使用 flexbox 时,margin: auto
不仅在水平方向上将元素居中,垂直方向上也是如此。
flexbox 另一个好处在于,它还可以将匿名元素(即没有被标签包裹的文本节点)垂直居中。