前言
在CSS中,设置元素的水平和垂直居中是最常用的,但是由于需求的多样性,针对不同情况会有不同的处理方案,因此,总结了一下关于这类问题的解决方案
行内元素的水平居中
要实现行内元素(<span>、<a>)的水平居中,只需要将行内元素包裹在块级父元素(display:block)中并且在父级元素设置CSS:
#container{ text-align:center; }
这种方法适用于display属性为inline、inline-block、inline-table、inline-flex
块级元素的水平居中
要实现块级元素(display:block)的水平居中,只需要将其CSS属性设置为:
#center{ margin:0 auto; }
多个块级元素的水平居中
【1】传统方式:
设置水平排列的块级元素的display:inline-block,设置其父元素的text-align:center,达到与上面的额行内元素相同的效果
#container{ text-align:center; } .center{ display:inline-block; }
【2】使用flexbox实现
使用之前,首先简单介绍flexbox。
Flexbox布局是CSS3中一种新的布局方式,它能够提供一个更有效的方式制定、调整和分布一个容器内的项目布局,即使它们的大小是未知或动态的。
使用flex
#container{ display:flex; }
flex默认是一个块级元素,如果需要定义一个行内级元素,只需要display:inline-flex;
flexbox由伸缩容器和伸缩项目组成。通过设置元素的display属性为flex或inline-flex能得到一个伸缩容器,伸缩容器的内部元素会变成伸缩项目
回到正题,要利用flex实现多块级元素的水平居中,只需要将父级元素CSS设置为:
#container{ justify-content:center; display:flex; }
已知高度宽度元素的水平居中
【1】使用绝对定位和负边距实现
使用绝对定位,将元素的top、left设置为50%,再利用margin,将元素拉回本身宽高的一般,实现水平垂直居中
#container{ position:relative; } #center{ 100px; height:100px; position:absolute; top:50%; left:50%; margin:-50px 0 0 -50px; }
【2】绝对定位和margin
这种方法无需知道被垂直居中的元素的宽和高
#container{ position:relative; } #center{ position:absolute; margin:auto; top:0; left:0; right:0; bottom:0; }
未知高度和宽度的元素的水平垂直居中
【1】当要垂直居中的元素时inline或inline-block时,可以将其父元素设置为display:table-cell,配合text-align:center和vertical-align:middle就能实现水平垂直居中
#container{ display:table-cell; text-align:center; vertical-align:middle; }
【2】CSS3中的transform属性
#container{ position:relative; } #center{ position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); }
flex布局实现
#container{ display:flex; justify-content:center; align-item:center; }