理解css布局三兄弟

前端的CSS布局是一個(gè)基本的技術(shù)之一,前端基本布局可以分為普通流和非普通流。普通流就是默認(rèn)定位方式,在普通流中元素框的位置由元素在html中的位置決定,顯示出來(lái)就是從左往右,從上到下。非普通流就是需要依靠css布局的三兄弟——position、display、float。它們?nèi)叩年P(guān)系是相互獨(dú)立又在暗中影響。

相信玩過(guò)《我的世界》游戲的朋友都知道,在《我的世界》之中一切都是有方塊組成,無(wú)窮的方塊組成無(wú)窮的世界。而在前端的世界之中也可以認(rèn)為所有一切都是由方塊的盒子組成的。這就是盒子模型,其有content、padding、border、margin組成,而一個(gè)個(gè)盒子的擺放位置就構(gòu)成了CSS布局。

首先來(lái)看看display,它有四個(gè)常用的屬性:none、block、inline、inline-block。

它們分別表示:

none:元素不會(huì)顯示,也不占據(jù)文檔空間,如同不存在。

block:元素顯示為塊級(jí)元素,此元素默認(rèn)寬度100%,獨(dú)占一行。

inline:元素顯示為內(nèi)聯(lián)元素,左右margin、padding可設(shè)置,上下則不可。

line-block:元素顯示為行內(nèi)塊元素,表現(xiàn)和inline元素一樣,不過(guò)可以設(shè)置其上下margin、padding。

position 常用屬性:

inhert:為此值時(shí),從父元素繼承 position屬性

static:默認(rèn)值。元素出現(xiàn)在正常流中,忽略top、left、right、bottom和 z-index 聲明。

relative:生成相對(duì)定位的元素,相對(duì)于元素本身正常位置定位,元素占據(jù)的位置還是原來(lái)正常狀態(tài)的位置

absolute:生成絕對(duì)定位的元素,相對(duì)于static 定位以外的第一個(gè)祖先元素進(jìn)行定位,元素不占據(jù)文檔位置

fixed:生成絕對(duì)定位的元素,相對(duì)于瀏覽器窗口進(jìn)行定位,同樣不占據(jù)文章位置

而float這個(gè)屬性就更有意思了,浮動(dòng)的元素根據(jù)其值左右移動(dòng),直到它的外邊緣碰到包含框或者另一個(gè)浮動(dòng)元素的框的邊緣。浮動(dòng)元素不在普通文檔流之中,文檔中的普通流元素表現(xiàn)的就像浮動(dòng)元素不存在一樣。

當(dāng)了解了三者各自的特性以后,我們就可以在文檔布局之中使用,但是有個(gè)問(wèn)題,這是寒冬大神提出的一個(gè)題目:

當(dāng)position、display、float的特性相互疊加后會(huì)發(fā)生什么?

在jackyWHJ前輩文章中找到一個(gè)圖片,其直觀說(shuō)明它們?nèi)叩年P(guān)系:

三者流程圖

總體來(lái)說(shuō)

對(duì)于元素首先判斷其存在不,也就是“display: none”是不是存在,如果存在則直接結(jié)束,元素的position和float都不起作用。

當(dāng)元素確實(shí)存在時(shí),“position: absolute”和“position: fixed”的優(yōu)先級(jí)最高,元素有這兩個(gè)值時(shí),float屬性不起作用,大部分元素的display也會(huì)轉(zhuǎn)換為塊級(jí)元素。

當(dāng)元素?fù)碛衒loat且不為none時(shí),元素會(huì)浮動(dòng)并且轉(zhuǎn)換為塊級(jí)元素。

當(dāng)元素是根元素時(shí),元素也會(huì)轉(zhuǎn)換為塊級(jí)元素。

如果排一個(gè)優(yōu)先級(jí):

display: none > position: absolute\fixed > float > root

因此,網(wǎng)頁(yè)的布局實(shí)際就是這三兄弟作用或相互影響作用的結(jié)果。

同樣,布局中應(yīng)用得多的還有負(fù)margin,并且對(duì)布局有影響的還有一個(gè)重要的特性 margin collapse,這個(gè)在下一篇文章中總結(jié)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,131評(píng)論 1 92
  • 深入理解傅里葉變換Mar 12, 2017 這原本是我在知乎上對(duì)傅立葉變換、拉普拉斯變換、Z變換的聯(lián)系?為什么要進(jìn)...
    價(jià)值趨勢(shì)技術(shù)派閱讀 5,937評(píng)論 2 2
  • CSS布局模型 布局:將元素以正確的大小擺放在正確的位置上 CSS包含3種基本的布局模型流動(dòng)模型(Flow)浮動(dòng)模...
    _空空閱讀 1,175評(píng)論 0 4
  • 一 外部式css樣式 (也可稱(chēng)為外聯(lián)式)就是把css代碼寫(xiě)一個(gè)單獨(dú)的外部文件中,這個(gè)css樣式文件以“.css...
    KunMitnic閱讀 1,120評(píng)論 0 1
  • 最近又有很多事情的發(fā)生 不為別的 就為了某些人的想法 有時(shí)候在想 那真的是兩個(gè)家庭的事情 自己不夠優(yōu)秀 這就是你的...
    肥耳朵豬閱讀 232評(píng)論 0 0

友情鏈接更多精彩內(nèi)容