2018.05.29css
居中一个元素?你会想到啥?这里面的知识还真很多。包括水平居中,垂直居中,还有水平垂直居中。
若是要再要细分,还要分浮动元素、绝对定位的居中。为了代码简介,没有加背景和其余样式,须要看效果的,能够加上背景。flex
第一部分:水平居中spa
一、常规元素的水平居中ssr
二、浮动元素的水平居中code
三、绝对定位元素的水平居中orm
第二部分:垂直居中图片
一、常规元素的垂直居中get
二、浮动元素的垂直居中it
三、绝对定位元素的垂直居中io
第三部分:水平垂直居中
一、常规元素的水平垂直居中
二、浮动元素的水平垂直居中
三、绝对定位元素的水平垂直居中
注意:将div#inner 换成 span#inner 效果同样。
样式: #outer {text-align:center} <div id='outer'> <div id='inner'>水平居中的元素</div> </div>
图片的居中,比较特殊。
img { // 设置这三个属性,就能够居中 clear: both; display: block; margin:auto; } <div id='outer'> <img src="on1.png" >水平居中的元素</div> </div>
注意:样式是在inner元素中添加
样式: #inner {width:200px;margin:0 auto;} <div id='outer'> <div id='inner'>水平居中的元素</div> </div>
#outer { display:flex; justify-content:center; } <div id='outer'> <div id='inner'>水平居中的元素</div> </div>
因为元素浮动以后,其自己就至关于设置了display:inline-block;也就是能够设置宽和高了。
因此浮动元素,没有行级和块之分,都是块级或inline-block的元素;只有定宽和不定宽之分
参考:浮动与宽高
注意:样式设置在浮动元素自己
样式: #inner-float { position:relative; left:50%; margin-left:-100px; } <div id="outer"> <span id="inner-float" style="float: left;width: 200px;">我是要居中的浮动元素</span> </div>
注意:要清除浮动,给外部元素加上float。这里的父元素就是外部元素
#outer { float:left; position:relative; left:50%; } #inner-float { position:relative; left:-50%; 或 right:50% } <div id="outer"> <span id="inner-float" style="float: left;">我是要居中的浮动元素</span> </div>
#outer { display:flex; justify-content:center; } <div id="outer"> <span id="inner-float" style="float: left;width: 200px;">我是要居中的浮动元素</span> </div>
因为元素绝对定位以后,其自己就至关于设置了display:inline-block;也就是能够设置宽和高了。
因此绝对定位元素,没有行级和块之分,都是块级或inline-block的元素;只有定宽和不定宽之分
参考连接:绝对定位与宽度
// 写法一: #outer { position: relative; } #inner-absolute { left:50%; margin-left:-100px; } // 写法二: #outer { position: relative; } #inner-absolute { left:0; right:0; margin:0 auto; } <div id="outer"> <span id="inner-absolute" style="position: absolute;width: 200px;">我是要居中的浮动元素</span> </div>
#outer { position: relative; } #inner-absolute { left:50%; transform:translateX(-50%); // translateX是相对自身来计算的。 } <div id="outer"> <span id="inner-absolute" style="position: absolute;">我是要居中的浮动元素</span> </div>
#outer { display:flex; justify-content:center; } <div id="outer"> <span id="inner-absolute" style="position: absolute;">我是要居中的浮动元素</span> </div>
#outer { display:flex; justify-content:center; } <div id="outer"> <span id="inner-absolute">我是要居中的常规、浮动、绝对定位元素,此办法都适用</span> </div>
垂直居中,默认外部元素(这里称为父元素)是有高度的
#inner { line-height:40px; } <div id="outer" style="height:40px;"> <span id="inner">我是要居中的浮动元素</span> </div>
方式一:diaplay:tabel-cell; vertical-align #outer { display: table-cell; vertical-align: middle; } 方式二:flex + align-item #outer { display:flex; align-items:center; } <div id="outer" style="height:200px;"> <span id="inner">我是垂直居中的元素</span> </div>
注意:#outer{height:100px;display:table} #inner{display:table-cell;vertical-align: middle;} 也能够达到垂直居中,可是不通用。
方式一:relative + absolute + line-height + top/bottom #outer { position: relative; } #inner { line-height:100px; position: absolute; top: 0; bottom: 0; margin: auto; } 方式二:relative + absolute + line-height + margin-top #outer { position: relative; } #inner { line-height:100px; position: absolute; top: 50%; margin-top:-50px } <div id="outer" style="height:200px;"> <div id="inner" style="float: left;height: 100px;">我是垂直居中的元素</div> </div>
#outer { display:flex; align-items:center; } <div id="outer" style="height:200px;"> <div id="inner">我是垂直居中的元素</div> </div>
绝对定位元素至关于inline-block:没有行和块之分,只有定高和不定高之分。
#outer { position: relative; } #inner { top:50%; transform: translateY(-50%); // 相对自身向上移动 } <div id="outer" style="height:200px;"> <div id="inner" style="position: absolute;">我是垂直居中的元素</div> </div>
#outer { display: flex; align-items: center; } #inner { line-height:100px; } <div id="outer" style="height:200px;"> <div id="inner" style="position: absolute;">我是垂直居中的元素</div> </div>
#outer { display: flex; align-items: center; } #inner { line-height:100px; } <div id="outer" style="height:200px;"> <div id="inner" style="position: absolute;">我是垂直居中的常规、浮动、绝对定位元素</div> </div>
方式1一:table-cell + vertical-align + text-align #outer { width:400px; // 方便看效果 height:500px; // 方便看效果 display:table-cell; vertical-align:middle; text-align:center; } #inner { display:inline-block; // 适合多列 }
子元素能够设置 mairgin 以及word-wrap:break-word; 方便效果
#outer { width:400px; // 方便看效果 height:500px; // 方便看效果 position: relative; } #inner { top:50%; left:50%; transform: translate(-50%, -50%); } <div id="outer" > <div id="inner" style="position: absolute;">我是水平垂直居中的元素</div> </div>
#outer{ width:400px; // 方便看效果 height:500px; // 方便看效果 display:flex; justify-content:center; aligns-item:center; } #inner { display:inline-block; // 适合多列 } <div id="outer" > <div id="inner" >我是水平垂直居中的常规、浮动、绝对定位元素</div> </div>