CSS完成元素水平垂直居中

  • 2019 年 11 月 24 日
  • 筆記

要求:子元素和父元素宽高不确定,需要设置子元素水平垂直居中,效果如下图:

这里提供几种简单的实现方法:

1.使用margin:auto属性实现【兼容IE7以上大部分浏览器】

首先这个元素和它的父元素都要设置定位,其中这个要水平垂直居中的元素需设置绝对定位absolute, 然后再给它设置样式{left: 0;right: 0;top: 0;bottom: 0;margin:auto;}。这样便可以实现元素在父容器里垂直居中显示了。

<style type="text/css">  .parent{  	/*子元素和父元素宽高随意,都可以实现水平垂直居中,这里随便设置了一个宽高撑开盒子容器体积,方便查看效果*/  	width: 600px;  	height: 500px;  	background: #222222;  	position: relative;  }  .child{  	width: 150px;  	height: 200px;  	background: goldenrod;  	position: absolute;  	left: 0;  	right: 0;  	top: 0;  	bottom: 0;  	margin: auto;  }  </style>

2.使用transform属性实现【浏览器兼容性:Safari 3.1+、 Chrome 8+、Firefox 4+、Opera 10+、IE10+】

同上,设置好定位。然后添加样式{left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);}便好了。 其中的translateX(-50%)表示将此元素在X轴上向左移50%元素宽度的距离,同理translateY(-50%)将元素在Y轴上向上移50%元素高度的距离。

<style type="text/css">  .parent{  	/*子元素和父元素宽高随意,都可以实现水平垂直居中,这里随便设置了一个宽高撑开盒子容器体积,方便查看效果*/  	width: 600px;  	height: 500px;  	background: #222222;  	position: relative;  }  .child{  	width: 150px;  	height: 200px;  	background: goldenrod;  	position: absolute;  	left: 50%;  	top: 50%;  	transform: translateX(-50%) translateY(-50%);  }  </style>

3.使用flex布局实现【浏览器兼容性:Safari 9+、 Chrome 29+、Firefox 28+、Opera 17+、IE10+】

首先给父元素设置flex布局{display: flex;},然后父元素再设置align-items: center; 可以使其包裹的子元素在水平方向上水平居中排列, 再就是{justify-content: center;}属性规定了子元素在Y轴垂直方向上是居中排列。这样便实现了使用flex完成水平垂直居中的布局。

<style type="text/css">  .parent{  	/*子元素和父元素宽高随意,都可以实现水平垂直居中,这里随便设置了一个宽高撑开盒子容器体积,方便查看效果*/  	width: 600px;  	height: 500px;  	background: #222222;  	display: flex;  	align-items: center;  	justify-content: center;  }  .child{  	width: 150px;  	height: 200px;  	background: goldenrod;  }  </style>

END