理論知識
定位元素上篇文章講過,這里再相互比較。
| static | relative | absolute | fixed | | ------| ------ | ------ | ------ | | 普通流 | 普通流 | 脫離普通流 | 脫離普通流 | | 無法設(shè)置位移 | 可以設(shè)置位移 | 可以設(shè)置位移 | 可以設(shè)置位移 | | 正常位置 | 定位相對于初始位置 | 定位于非static的祖先元素 | 定位相對于瀏覽器窗口 |
居中
居中問題詳解 介紹的很清楚。塊級元素和行內(nèi)元素的居中方法有所不同。
水平居中
塊級元素能夠通過設(shè)置元素內(nèi)文本水平居中({ text-align: center; }),可以將元素內(nèi)部的行內(nèi)元素居中。而塊級元素自己則通過margin-left、margin-right設(shè)置為auto。這是有 原因(原文) 的,(在W3C模型中)在水平方向上,包含元素的父元素(元素包含塊)的寬度(width)由:margin-left、border-left、padding-left、width、padding-right、border-right、margin-right7個屬性確定。屬性值默認(rèn)為0,或者特定值。而width、margin-left、margin-right還可以設(shè)置為auto:
所以我們可以通過設(shè)置左右外邊距來水平居中block元素,{ margin: 0 auto; }。但是這個方法無法滿足多個block(inline-block)在一行中水平居中。但是我們可以使用flex布局來將多個block元素在一行中水平居中。使用樣式{ display: flex; justify-content: center; } 即可讓flex布局的元素水平居中。
垂直居中
行內(nèi)元素不能設(shè)置左右內(nèi)邊距、外邊距,但是可以設(shè)置padding-top、padding-bottom兩個屬性相等來垂直居中。當(dāng)多行元素在寬度較小的屏幕上重疊時,就需要設(shè)置line-height和white-space,{ line-height: 需要的高度; white-space: nowrap: } 來垂直居中。如果元素為table cell,使用vertical-align = middle。當(dāng)然也使用flex布局,在 flex容器上設(shè)置 flex-direction: column (注意容器需要設(shè)置固定高度),即可垂直布局。
塊級元素有分為是否確定高度。如果確定高度,則在relative父元素內(nèi)的absolute子元素中設(shè)置位移top為50%,margin-top則為高度的一半的負(fù)值。并且依據(jù)盒子模型,還有需要考慮padding和border的大小。而不確定高度的情況,就需要使用translateY來講元素居中,{ top: 50%; transform: translateY(-50%); }。最后flex布局也是要給萬金油方法,{ display: flex; flex-direction: column; justify-content: center; }。這個屬性的設(shè)置還可以保持水平居中。
水平垂直居中
結(jié)合上述兩個方面的方法,可以總結(jié)水平垂直居中的方法也有三種。
實踐
題目要求水平垂直方向都居中并且知道寬高,我就使用了第一種方法。而只有在absolute定位下才能使用百分比高度。
.content { position: absolute; background-color: #ccc; height: 200px; width: 400px; margin: -100px 0 0 -200px; top: 50%; left: 50%;}
其容器樣式元素結(jié)果如下圖。
而兩個四分之一圓需要使用圓角邊框border-radius設(shè)置,其設(shè)置單個半徑的 語法 為 border-radius: top-left top-right bottom-right bottom-left。左上角的圓半徑應(yīng)該設(shè)置在第三個值上,并且元素的位移應(yīng)該設(shè)置為top和left為零來貼合到容器邊框上。
.leftquarter { top: 0; left: 0; -moz-border-radius: 0 0 50px 0; /* 四分之一圓 */ -webkit-border-radius: 0 0 50px 0; border-radius: 0 0 50px 0;}
同理,右下角的圓半徑一個設(shè)置在第一個值上,并將其貼合在容器的右下角。
.rightquarter { right: -350px; bottom: -100px; -moz-border-radius: 50px 0 0 0; /* 四分之一圓 */ -webkit-border-radius: 50px 0 0 0; border-radius: 50px 0 0 0; }
當(dāng)然,他們繼承一個公共樣式position: relative,以設(shè)置元素的位移。
.element { position: relative; background-color: #fc0; height: 50px; width: 50px; }
結(jié)果如下圖,無論瀏覽器窗口怎么變化,元素始終居中。
demo 地址 。
參考:
居中方法詳解
CSS制作圖形速查表
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com