是最多見的水平居中解決方案,但有其侷限性:塊級元素,已知寬度,父級元素有寬度html
在父級元素上設置text-align:center;將須要居中的元素設置爲inline-block(或inline)ide
對於須要居中的元素:佈局
position:absolute;(同時設置父級元素relative) left:50%;(包括了元素自己的寬度) transform:translateX(-50%);
侷限性:CSS3屬性兼容性很差flex
做用於父級元素code
#parent{ display:flex; justify-content:center;` }
對於一個須要居中的 行內(塊)元素 ,設置父元素的高度與行高相等,便可實現垂直居中orm
.parent{ display:table-cell; vertical-align:middle }
相似於水平居中htm
相似於水平居中blog
.parent{ display:flex; align-items:center; }
HTML <div class="left"></div> <div class="right"></div> CSS .left{ float:left; width: 200px; height:400px; background-color: blue; } .right{ height:400px; background-color: red; margin-left:210px; }
方法與 狀況三 相似,但有一點須要注意:不管是哪一種狀況,再html結構中,都要把浮動塊寫在前面,不然浮動塊會被擠到下一行。文檔
HTML <div class="right"></div> <div class="left"></div> CSS .left{ height:400px; background-color: red; margin-right:210px; } .right{ float:right; width: 200px; height:400px; background-color: blue; }
相似於兩欄佈局,一樣是浮動欄先渲染:it
HTML: <div class="left"></div> <div class="right"></div> <div class="middle"></div> CSS: .left{ float:left; width: 200px; height:400px; background-color: red; } .right{ float:right; width:200px; height:400px; background-color: blue; } .middle{ height: 400px; background-color: yellow; margin:0 210px 0 210px; }
但在實際狀況下,中間欄纔是主要內容,須要優先渲染,也就是說,DOM結構中,中間欄須要寫在最前面,可是上文中提到過,浮動塊必須寫在最前面;解決方案是:三欄全浮動。
有如下兩種經典的佈局方式,它們的共同點是:固比固佈局,中間欄放到文檔流前面,保證先行渲染。
實現方式是:三欄所有float:left浮動。
區別在於解決中間欄div的內容不被遮擋上:聖盃佈局是在父級添加左右padding,將三欄所有擠到中間,而後在兩側邊欄添加相對定位,配合left和right屬性,將它們挪向兩邊,爲中間內容騰出位置;而雙飛翼佈局是在中間欄的div中嵌套一個div,內容寫在嵌套的div裏,對嵌套的div設置margin-left和margin-right。
HTML: <div class="container"> <div class="middle"></div> <div class="left"></div> <div class="right"></div> </div> CSS: .container{ overflow:hidden; padding:0 200px; } .middle{ width:100%; height:400px; float:left; background-color: yellow; } .left{ width:200px; height:400px; float:left; background-color: blue; margin-left:-100%;(擠上去) position:relative; left:-200px; } .right{ width:200px; height:400px; float:left; background-color: darkseagreen; margin-left:-200px;(擠上去) position:relative; right:-200px; } /* 解決遮擋的代碼是: .container中 padding:0 200px; .left中 position:relative;left:-200px; .right中 position:relative;right:-200px; */
HTML: <div class="container"> <div class="middle"> <div id="inside">middle</div> </div> <div class="left"></div> <div class="right"></div> </div> CSS: .container{ overflow:hidden; } .middle{ width:100%; height:400px; float:left; background-color: yellow; } .left{ width:200px; height:400px; float:left; background-color: blue; margin-left:-100%;(擠上去) } .right{ width:200px; height:400px; float:left; background-color: darkseagreen; margin-left:-200px;(擠上去) } /*解決遮擋*/ #inside{ margin:0 210px; height:400px; background-color:red; }
如圖:
因爲上述佈局不少用到了浮動,爲了消除浮動元素對於其它元素佈局的影響,就必須清除浮動。
一、父級元素不能正常撐開
二、背景不能正常顯示
三、margin不能正確顯示
etc..
一、在浮動元素的同級,增長一個空元素,並給該空元素設置clear:both;
二、在父級元素上設置overflow:auto;zoom:1
三、在父級添加僞元素after:after{content:"";display:block;clear:both;}
上文中提到的兩欄佈局,都是優先加載了浮動欄,若要內容欄優先,能夠參考雙飛翼佈局和聖盃佈局,實現方式是同樣的。 或者換一種思路:以前咱們浮動的是固定欄,如今能夠浮動自適應欄,以左欄固定右欄自適應爲例:設置右欄100%,右浮動;而後再寫左邊欄。