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>