最近面试被问到这个问题,其实平时在开发的时候都会习惯性的用一种方法,能实现就行。 虽然问题很基础,但是在面试的时候遇到这种问题,估计就是在考你基础知识掌握的全面性了,因此做一个整理,把能实现的方法都列一遍,也是对自己的css知识做一个复习
水平居中相对是开发中最常用的,也是相对比较容易实现的一种布局方式了
对父元素添加如下样式,便可实现内部行内元素的水平居中
div{
text-align:center;
}
定宽的元素实现水平居中应该是最常遇到也是最简单的了
margin:0 auto;
div{
width:100px;
position:absoult;
left:50%;
margin-left:-50px;
}
html:
<div class="A">
<div class="B">
这里是测试文字<br>
这里是测试文字这里是测试文字这里是测试文字 这里是测试文字<br>
这里是测试文字这里是测试文字<br>
这里是测试文字<br>
这里是测试文字 这里是测试文字 这里是测试文字 这里是测试文字 这里是测试文字<br>
</div>
</div>
css:
.A{
width: 100%;
height: 800px;
background: green;
position: relative;
}
.B{
background: #e3e3e3;
position: absolute;
left: 50%;
transform: translateX(-50%);/*会向左位移自身宽度的一半*/
}
display:inline-block;
html:
<ul class="demo">
<li></li>
<li></li>
<li></li>
</ul>
css:
.demo{
background: blue;
text-align: center; /*父元素设置居中属性*/
font-size: 0;/* 解决inline-block多出的空白像素问题 */
}
.demo li{
width: 100px;
height: 100px;
margin: 0 10px;
background: #e3e3e3;
display: inline-block;
}
相当于水平居中来讲,垂直居中的实现就相对困难一些
p{
height:30px;
line-height:30px;
font-size:12px;
}
div{
width:100px;
height:100px;
position:absoult;
top:50%;
margin-top:-50px;
}
transform:translateY(-50%)
####基于视口单位的解决方案
在不使用绝对定位的属性时,同样结合transform:translateY(-50%)
,解决方法可以是用margin的百分比值,但由于margin的百分比值是以父元素的宽度作为解析基准的,所以想让元素相对视口居中,可以使用视口相关的长度单位
div{
width:100px;
margin:50vh auto 0;/*1vh表示视口高度的1%,1vw表示视口宽度的1%*/
transform:translateY(-50%);
}
使用Flexbox是实现元素居中的最佳方案,对于于定宽高以及不定宽高的元素均适用,只需两个声明:
display:flex;
margin:auto;
08 Aug 2017