web前端之CSS中的一些重要概念

今天將學(xué)習(xí)整理一些CSS中的重要概念,對這些重要概念的掌握竖般,將對CSS的認(rèn)識十分重要。

了解這些概念對深入理解CSS的本質(zhì)十分重要:

(1)包含塊containing block?

(2)BFC和IFC?

(3)層疊上下文

如果要真正地掌握CSS茶鹃,一定要對此認(rèn)真研讀涣雕、一定認(rèn)真研讀艰亮、一點認(rèn)真研讀(重要的事情說三遍)。

1:包含塊

? ? ? ?我們都知道挣郭,如果有兩個div迄埃,一個是父元素,另外一個是子元素兑障,父元素會決定子元素的大小和定位侄非。包含塊是什么呢?簡單來說流译,就是可以決定一個元素大小和定位的元素逞怨。包含塊是視覺格式化模型中的一個重要概念,它與CSS盒子模型類似福澡。包含塊也可以理解為一個矩形盒子叠赦、這個矩形的作用是為這個矩形內(nèi)部的后代元素(子元素、孫元素等)提供一個參考革砸。一個元素的大小和定位往往是由該元素所在的包含塊決定的除秀。

? ? ? ?通常情況下,一個元素的包含塊由離它最近的“塊級祖先元素”的“內(nèi)容邊界”決定的算利。但當(dāng)元素被設(shè)置為絕對定位時册踩,此時該元素的包含塊是由離它最近的“position:relative”或"position:absolute"的祖先元素決定。一個元素生成的盒子會扮演該元素的內(nèi)部元素包含塊的角色效拭。也就是說暂吉,一個元素的CSS盒子為它的內(nèi)部元素建造了包含塊。

? ? ? ****包含塊的判定以及包含塊的范圍

? ? ? ? ?一個元素會為它的內(nèi)部元素創(chuàng)建包含塊允耿,內(nèi)部元素的大小以及定位都跟它的包含塊有關(guān)借笙。那么是不是說一個元素的包含塊就是它的父元素呢?答案是否定的较锡。

? ? ? ? (1)根元素

? ? ? ? ? ? ? ? ?根元素(HTML)元素业稼,是一個頁面中最頂端的元素,它沒有父元素蚂蕴。根元素存在的包含塊低散,被稱為“初始包含塊”。

? ? ? ? (2)固定定位元素

? ? ? ? ? ? ? ? ?如果元素的position屬性為fixed骡楼,那么它的包含塊是當(dāng)前可視窗口熔号,也就是當(dāng)前瀏覽器窗口。

? ? ? ? (3)靜態(tài)定位元素和相對定位元素

? ? ? ? ? ? ? ? ?如果元素的position屬性為static或relative鸟整,那么它的包含塊是它最近的塊級祖先元素創(chuàng)建的引镊。祖先元素必須是block、inline_block或者table-cell類型。


? ? ? ? ?(4)絕對定位元素

? ? ? ? ? ? ? ? ?如果元素的position屬性為absolute弟头,那么它的包含塊是由最近的position屬性不為static的祖先元素吩抓。這里的祖先元素可以是塊元素,也可以是行內(nèi)元素赴恨。因此疹娶,我們可知,絕對定位元素是根據(jù)其包含塊來定位的伦连,這個包含塊是離它最近的position屬性不為static的祖先元素雨饺。如果絕對定位元素找不到position屬性不為static的祖先元素,則它的包含塊是根元素(html元素)惑淳。

? ? ? ? ? ? ? ? 對于包含塊的范圍额港,也分為兩種情況考慮。

? ? ? ? ? ? ? ? (1)如果祖先元素是塊元素汛聚,則包含塊的范圍為祖先元素的padding edge形成锹安。

? ? ? ? ? ? ? ? (2)如果祖先是行內(nèi)元素,則包含塊取決于祖先元素的direction屬性倚舀。


2:層疊上下文

? ? ? ? ?理解層疊上下文叹哭,不僅可以幫助我們深入理解z-index對元素堆疊順序的控制,而且對于我們深入理解浮動和定位也是非常重要的痕貌。

? ? ? ? ?(1)層疊上下文 ?

? ? ? ? ? ? ? ? ? 層疊上下文风罩,是HTMl中的一個三維的概念,我們知道舵稠,網(wǎng)頁是三維結(jié)構(gòu)的超升,它有X,Y,Z軸,Z軸往往都用來設(shè)定層的先后順序的。層疊上下文跟塊級格式上下文(BFC)相似,是可以創(chuàng)建出來的褥傍,也就是說润樱,你可以在CSS中添加一定的屬性來將某個元素創(chuàng)建一個層疊上下文出來赋除。

? ? ? ? ? ? ? ? ?如果一個元素具備以下任何一個條件,則該元素會創(chuàng)建一個新的層疊上下文。

? ? ? ? ? ? ? ? ? ? ? ?(1)根元素 ?(2)z-index不為auto的定位元素

? ? ? ? ?(2)層疊級別

? ? ? ? ? ? ? ?層疊級別是針對同一個層疊上下文而言的。層疊級別與層疊上下文巢钓,是兩個不同的概念。

? ? ? ? ? ? ? ?在同一個層疊上下文中疗垛,層疊級別從低到高排列症汹。

? ? ? ? ? ? ? ?層疊級別由低到高:(1)背景和邊框(父級),也就是當(dāng)前層疊上下文的背景和邊框贷腕。 (2)負(fù)z-index:z-index為負(fù)值的“內(nèi)部元素”背镇。 (3)塊盒子:普通文檔流下的塊盒子(block-level box)咬展。 (4)浮動盒子:非定位的浮動元素(也就是排除了position:relative的浮動盒子)。 (5)行內(nèi)盒子:普通文檔流下的行內(nèi)盒子(inline-level box)瞒斩。 (6)z-index:0:z-index為0的“內(nèi)部元素”挚赊。(7)正z-index:z-index為正值的“內(nèi)部元素”。

? ? ? ? ? ? ? 背景和邊框一般為裝飾屬性济瓢,所以層疊級別最低。浮動元素和塊元素一般用作布局妹卿,而行內(nèi)元素都是內(nèi)容旺矾,對于一個頁面來說,最重要的當(dāng)然是內(nèi)容夺克。因此箕宙,一定要讓內(nèi)容的層疊級別相當(dāng)高。

? ? ? ? (3)層疊上下文的特點

? ? ? ? ? ? ? ? ?一個元素在z軸方向上的堆疊順序铺纽,是由“層疊上下文”和“層疊級別“這兩個因素決定的:

? ? ? ? ? ? ? ? ?①同一個層疊上下文中柬帕,我們比較的是“內(nèi)部元素層疊級別”。層疊級別大的元素顯示在上狡门,層疊級別小的元素顯示在下陷寝。

? ? ? ? ? ? ? ? ?②同一個層疊上下文中,如果兩個元素的層疊級別相同(即z-index值相同)其馏,則后面的元素堆疊在前面元素的上面凤跑,遵循“后來者居上”原則。

? ? ? ? ? ? ? ? ?③不同的層疊上下文中叛复,我們比較的是“父級元素層疊級別”仔引。元素顯示順序以“父級層疊上下文”的層疊級別來決定顯示的先后順序,與自身的層疊級別無關(guān)褐奥。

3:BFC和IFC

? ? ? ? (1)基本概念

? ? ? ? ? ? ? ? ?在CSS中咖耘,頁面中任何一個元素都可以看成是一個盒子。在普通文檔流中撬码,盒子會參與一種格式上下文儿倒。這個盒子可能是塊盒子,也可能是行內(nèi)盒子耍群。一個盒子只能是塊盒子或者行內(nèi)盒子义桂,不能同時是塊盒子又是行內(nèi)盒子。其中塊盒子參與BFC(塊級格式上下文)蹈垢,行內(nèi)盒子參與IFC(行級格式上下文)慷吊。

? ? ? ? (2)格式上下文

? ? ? ? ? ? ? ? 它指的是頁面中的一塊渲染區(qū)域,并且這個格式上下文有一套自己的渲染規(guī)則曹抬。格式上下文決定了其他內(nèi)部元素將如何定位溉瓶,以及和其他元素之間的關(guān)系。

? ? ? ? ? ? ? ? 格式上下文有兩種:(1)塊級格式上下文(BFC) (2)行級格式上下文(IFC)

? ? ? ? (3)盒子

? ? ? ? ? ? ? ?盒子,又稱CSS盒子堰酿,是CSS布局的基本單位疾宏。元素的類型和display屬性決定了盒子的類型。不同類型的盒子触创,會參與不同的格式上下文坎藐。

? ? ? ? ? ? ? ?盒子的類型一般有“塊盒子”和“行內(nèi)盒子”這兩種:


?? ? ? ? ? ? ? ①塊盒子

? ? ? ? ? ? ? ? ? 塊盒子,即block-level box哼绑。元素類型(即display屬性)為block岩馍、table、list-item的元素抖韩,會生成塊盒子蛀恩。

? ? ? ? ? ? ? ? ? 塊盒子會參與塊級格式上下文。也就是說茂浮,元素類型為block双谆、table、list-item的元素都會參與塊級格式上下文(BFC)席揽。

? ? ? ? ? ? ? ②行內(nèi)盒子

? ? ? ? ? ? ? ? ? 行內(nèi)盒子顽馋,即inline-level box。元素類型(即display屬性)為inline幌羞、inline-block趣避、inline-table的元素,會生成行內(nèi)盒子新翎。

? ? ? ? ? ? ? ? ? 行內(nèi)盒子會參與行級格式上下文程帕。也就是說,元素類型為inline地啰、inline-block愁拭、inline-table的元素都會參與行級格式上下文(IFC)。

? ? ? ? ? (4)BFC

? ? ? ? ? ? ? ? ? BFC 全稱Block Formatting Context(塊級格式上下文)亏吝。它是一個獨立的渲染區(qū)域岭埠,只有塊盒子(block-level box)參與。塊級格式上下文規(guī)定了內(nèi)部的塊盒子是如何布局的蔚鸥,并且這個渲染區(qū)域與外部區(qū)域毫不相關(guān)惜论。

? ? ? ? ? ? ? ? ?①如何創(chuàng)建BFC

? ? ? ? ? ? ? ? ? ? ?W3C標(biāo)準(zhǔn)中對BFC的定義:浮動元素,絕對定位元素(position為absolute或fixed)止喷,元素類型(即display屬性)為inline-block馆类、table-caption、table-cell弹谁,以及overflow屬性不為visible的元素將會創(chuàng)建一個新的塊級格式上下文(BFC)乾巧。

? ? ? ? ? ? ? ? ? ? ?如果一個元素具備以下任何一個條件句喜,則該元素都會創(chuàng)建一個新的BFC。

? ? ? ? ? ? ? ? ? ? ? Ⅰ:根元素? ? ??

? ? ? ? ? ? ? ? ? ? ? Ⅱ:float屬性除了none以外的值沟于,也就是“float:left”和“float:right” ? ??

? ? ? ? ? ? ? ? ? ? ? Ⅲ:position屬性除了static和relative以外的值咳胃,也就是“position:absolute”和“position:fixed”。 ?

? ? ? ? ? ? ? ? ? ? ? Ⅳ:overflow屬性除了visible以外的值旷太,也就是“overflow-auto”“overflow:hidden”和“overflow:scroll”展懈。?

? ? ? ? ? ? ? ? ? ? ? Ⅴ:元素類型(即display屬性)為inline-block、table-caption供璧、table-cell标沪。

? ? ? ? ? ? ? ? ?②BFC的特點

? ? ? ? ? ? ? ? ? ? ?(1)在一個BFC中,盒子從頂端開始垂直一個接著一個地排列嗜傅,兩個相鄰盒子之間的垂直間距由magin屬性決定。在同一個BFC中檩赢,兩個相鄰盒子之間垂直方向上的外邊距會疊加吕嘀。

? ? ? ? ? ? ? ? ? ? ?(2)在一個BFC中,沒一個盒子的左外邊界(margin-left)會緊貼著容器的左邊(border-left)(對于從右到左的格式化贞瞒,則相反)偶房,即使存在浮動元素也是如此。

? ? ? ? ? ? ? ? ? ? ?因此军浆,得出的一下幾點重要結(jié)論十分重要棕洋。

? ? ? ? ? ? ? ? ? ? ? (1)在一個BFC內(nèi)部,盒子會在垂直方向上一個接著一個地排列乒融。

? ? ? ? ? ? ? ? ? ? ? (2)在一個BFC內(nèi)部掰盘,相鄰的margin-top和margin-bottom會疊加。

? ? ? ? ? ? ? ? ? ? ? (3)在一個BFC內(nèi)部赞季,每一個元素的左外邊界會緊貼著包含盒子的左邊愧捕,即使存在浮動元素也是如此。

? ? ? ? ? ? ? ? ? ? ? (4)在一個BFC內(nèi)部申钩,如果存在內(nèi)部元素是一個新的BFC次绘,并且存在內(nèi)部元素是浮動元素。則該BFC區(qū)域不會與float元素的區(qū)域重疊撒遣。

? ? ? ? ? ? ? ? ? ? ? (5)BFC就是頁面上的一個隔離的盒子邮偎,該盒子內(nèi)部的子元素不會影響到外面的元素。

? ? ? ? ? ? ? ? ? ? ? (6)計算一個BFC的高度時义黎,其內(nèi)部浮動元素的高度也會參與計算禾进。

? ? ? ? ? ? ? ? ?③BFC的用途

?

? ? ? ? ? ? ? ? ? ? ?(1)創(chuàng)建BFC來避免垂直外邊距疊加。

? ? ? ? ? ? ? ? ? ? ?(2)創(chuàng)建BFC 來清除浮動廉涕。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?①BFC包含浮動 ? ?②BFC避免文字環(huán)繞

? ? ? ? ? ? ? ? ? ? ?(3)創(chuàng)建BFC來實現(xiàn)自適應(yīng)布局命迈。

最后

“相信有很多想學(xué)前端的小伙伴贩绕,今年年初我花了一個月整理了一份最適合2018年學(xué)習(xí)的web前端干貨,從最基礎(chǔ)的HTML+CSS+JS到移動端HTML5到各種框架都有整理壶愤,送給每一位前端小伙伴淑倾,53763,

1707這里是小白聚集地征椒,歡迎初學(xué)和進階中的小伙伴娇哆。”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勃救,一起剝皮案震驚了整個濱河市碍讨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒙秒,老刑警劉巖勃黍,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晕讲,居然都是意外死亡覆获,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門瓢省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弄息,“玉大人,你說我怎么就攤上這事勤婚∧×浚” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵馒胆,是天一觀的道長缨称。 經(jīng)常有香客問我,道長祝迂,這世上最難降的妖魔是什么具钥? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮液兽,結(jié)果婚禮上骂删,老公的妹妹穿的比我還像新娘。我一直安慰自己四啰,他們只是感情好宁玫,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柑晒,像睡著了一般欧瘪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匙赞,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天佛掖,我揣著相機與錄音妖碉,去河邊找鬼。 笑死芥被,一個胖子當(dāng)著我的面吹牛欧宜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拴魄,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冗茸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匹中?” 一聲冷哼從身側(cè)響起夏漱,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顶捷,沒想到半個月后挂绰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡服赎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年葵蒂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片专肪。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖堪侯,靈堂內(nèi)的尸體忽然破棺而出嚎尤,到底是詐尸還是另有隱情,我是刑警寧澤伍宦,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布芽死,位于F島的核電站,受9級特大地震影響次洼,放射性物質(zhì)發(fā)生泄漏关贵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一卖毁、第九天 我趴在偏房一處隱蔽的房頂上張望揖曾。 院中可真熱鬧,春花似錦亥啦、人聲如沸炭剪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奴拦。三九已至,卻和暖如春届吁,著一層夾襖步出監(jiān)牢的瞬間错妖,已是汗流浹背绿鸣。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暂氯,地道東北人潮模。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像株旷,于是被迫代替她去往敵國和親再登。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容