国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

css float的深入研究

Tony / 1017人閱讀

摘要:去年就看到張鑫旭大神的這篇文章,看了好幾遍才看懂。而對于使用脫離文檔流的元素,其他盒子與其他盒子內的文本都會無視它。而這造成的顯示上的差異就是文檔流中的文字實體不會與浮動元素重疊,而會與絕對定位元素重疊。

去年就看到張鑫旭大神的這篇文章,看了好幾遍才看懂。后來再去想其中的一些原理,又忘了。于是打算把它記下來,一來做個備份,二來希望與君共勉。

這里我對文章以自己的理解做了一些精簡,完整版的可以去http://www.zhangxinxu.com/wor...這里看

浮動的本質是:包裹性和破壞性

包裹性:換種說法就是讓元素inline-block化,例如一個div標簽默認寬度是100%顯示的,但是一旦設置了float,則100%默認寬度就會變成自適應內部元素的寬度。
其實float就是一個帶有方向的display:inline-block屬性

破壞性:如果我們要理解浮動的破壞性,我們就要從浮動最原始的意義入手。浮動出現的意義其實只是用來讓文字環繞圖片而已,僅此而已。

浮動之所以會環繞含有float屬性的圖片是因為浮動破壞了正常的line boxes
我們先來了解一下line boxes模型。先看下面的一段普通的HTML代碼:

這是一行普通的文字,這里有個 em 標簽。

代碼中的4種boxes(順序從里到外):

inline boxes:

?

inline boxes不會讓內容成塊顯示,而是排成一行,如果外部含inline屬性的標簽(span,a,cite等),則屬于inline boxes,如果是個光禿禿的文字,則屬于匿名inline boxes

line boxes:

一個一個的inline boxes組成了line boxes.這是浮動影響布局的關鍵box類型

content area:

content area是一種圍繞文字看不見的box.content area的大小與font-size大小相關

containing box:

p標簽所在的containing box,此box包含了其他的boxes

為什么浮動能使文字環繞圖片?

默認情況下,圖片與文字混排應該是這個樣子:圖片與文字基線對齊,圖片與文字在同一行上,如下圖所示:

上圖中,圖片為一個inline boxes,兩邊文字也是inline boxes。由于line boxes的高度是由其內部最高的inline boxes的高度決定的,所以這里的line boxes的高度就是圖片的高度

此時圖片與文字是同一box類型的元素,是在同一行上的,所以,默認狀態下,一張圖片只能與一行文字對齊。而要想讓一張圖片要與多行文字對齊,您唯一能做的就是破壞正常的line boxes模型

含有浮動屬性的圖片與文字

先看一下圖片添加了float:left樣式后的表現,見下圖:

正常情況下,圖片自身就是個inline-boxes,與兩側的文字inline-boxes共同組成了line-boxes,但是一旦圖片加入了浮動,情況就完全變了。浮動徹底破壞了圖片的inline-boxes特性,至少有一點可以肯定,圖片的inline-boxes不存在了

一旦圖片失去了inline-boxes特性就無法與inline-boxes的文字排在一行了,就會從line-boxes上脫離出來,跟隨自身的方向屬性,靠邊排列

這個從line boxes上脫離的浮動元素其實就是一個軀體,一個空殼子,表象。因為其沒有inline boxes。有人可能會問,沒有inline boxes就沒有唄,有什么大不了的?非也非也!這個inline boxes很個很重要的概念

為什么inline-boxes很重要?

在目前的CSS的世界中,所有的高度都是有兩個CSS模型產生的,一個是盒子模型,對應CSS為”height+padding+margin”,另外一個是line box模型,對應樣式為”line-height”。前者的height屬性分為明顯的height值和隱藏的height值,所謂隱藏的height值是指圖片的高度,一旦載入一張圖片,其內在的height值就會起作用,即使您看不到”height”這個詞

而后者針對于文字等這類inline boxes的元素(圖片也屬于inline boxes,但其height比line-height作用更兇猛,故其inline boxes高度等于其自身高度,對line-height無反應),inline boxes的高度直接受line-height控制(改變line-height文字拉開或重疊就是這個原因),而真正的高度表現則是由每行眾多的inline boxes組成的line boxes(等于內部最高的inline box的高度),而這些line boxes的高度垂直堆疊形成了containing box的高度,也就是我們見到的div或是p標簽之類的高度了

所以,對于line box模型的元素而言,沒有inline boxes,就沒有高度了,而浮動卻恰恰做了這么齷齪的事情,其直接將元素的inline boxes也破壞了,于是這些元素也就沒有了高度

沿用上面圖片的例子。浮動破壞了圖片的inline box,產生了兩個結果:一是圖片無法與文字同行顯示,脫離了其原來所在的line box鏈;二是沒有了高度(無inline box -> 無line box -> 無高度)。而這些結果恰恰是文字環繞圖片顯示所必須的

文字環繞圖片顯示的原因

這里有個動畫,可以很好的幫助我們理解文字環繞圖片顯示的原因:http://image.zhangxinxu.com/f...

動畫所演示的關鍵點其實就是上面的一系列分析與講解,即“包裹與破壞”!包裹是讓標簽占據的空間水平收縮,破壞是破壞的inline box。正如上面講解的,inline boxes是高度形成的基礎,浮動破壞了inline boxes也就沒有高度可言了。正是由于浮動元素沒有了inline boxes,沒有了inline boxes高度,才能讓其他inline boxes元素重新整合,環繞浮動元素排列

我們現在假設浮動沒有破壞inline boxes,那么雖然圖片會靠左顯示,但是其會與文字形成新的高度包絡線(同類聚合),且只能與一行文字形成line box,無法實現文字環繞效果,所以浮動破壞inline boxes是必須的

浮動(float) vs 絕對定位(absolute)

了解了浮動之后,我們來對比一下絕對定位

與浮動元素一樣,絕對定位元素也具有"包裹性"和"破壞性",并適用于任何元素,那么他們之間有什么區別呢?

使用float脫離文檔流時,其他盒子會無視這個元素,但其他盒子內的文本依然會為這個元素讓出位置,環繞在周圍。

而對于使用absolute脫離文檔流的元素,其他盒子與其他盒子內的文本都會無視它。

而這造成的顯示上的差異就是:文檔流中的文字實體不會與浮動元素重疊,而會與絕對定位元素重疊。這就是文字環繞顯示的重要原因之一:雖然圖片實際占據的高度為0,但是由于其寬度實體存在(包裹性),同樣是content area實體的文字不會與之重疊(外部的容器盒子containing box(p,div,ul,li)會重疊),這就好比籃球場上站了個植物人,雖然其幾乎不可能得分,運球之類,但是他的實體在那里,它可以阻擋同一水平空間上的同一類型的個體(即人)直接穿過去,要通過,得繞道。但是其無法阻擋整個球隊的向前推進

觀后感

每次看這篇文章都有不同的感悟,張鑫旭大神對很多問題的理解非常深刻和獨到,很欣賞他的文章。這篇文章中還有好幾個知識點需要深入理解,比如css行高line-height的一些深入理解及應用,absolute的深入理解系列,我會找個時間整理一下,有興趣的伙伴也可以去看下

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/111885.html

相關文章

  • CSS 最核心幾個概念

    摘要:本文將講述中最核心的幾個概念,包括盒模型等。塊級元素的默認為,而內聯元素則是根據其自身的內容或子元素來決定其寬度。如果該元素的下一個兄弟元素中有內聯元素通常是文字,則會圍繞該元素顯示,形成類似文字圍繞圖片的效果。 本文將講述 CSS 中最核心的幾個概念,包括:盒模型、position、float等。這些是 CSS 的基礎,也是最常用的幾個屬性,它們之間看似獨立卻又相輔相成。為了掌握它們...

    SwordFly 評論0 收藏0
  • CSS魔法堂:說說Float那個被埋沒志向

    摘要:時其寬度始終保持占滿寬度的態度。清除浮動就是為浮動影響的范圍劃邊界。那么可歸結為的父容器包裹所有子元素。注意屬性值不能為空白,否則無法清除浮動。 前言 ?定位系統中第一難理解就是Normal flow,而第二就非Float莫屬了,而Float難理解的原因有倆,1. 一開頭我們就用錯了;2. 它跟Normal flow靠得太近了。本文嘗試理清Float的特性和行為特征,若有紕漏望各位指正...

    legendmohe 評論0 收藏0
  • 浮動(Floats)原理與清除浮動

    摘要:父元素的頂端會限制浮動元素防止一直浮動到頁面頂端。例子戳這里清除浮動清除浮動的目的是為了解決高度塌陷的問題撐開浮動父元素。原理會在元素的之上增加一個清除區域這個區域會在元素的上增加額外間隔并且不允許浮動元素進入這個區域。 浮動概念 浮動元素會脫離文檔的普通流,根據float的值向左或向右移動,直到它的外邊界碰到父元素的內邊界或另一個浮動元素的外邊界為止。由于浮動框不在文檔的普通流中,所...

    andong777 評論0 收藏0
  • CSS基礎知識之float

    摘要:前段時間寫過一篇基礎知識之,當時對的理解不太準確,被慕課網多名讀者指出原文已修正,如有誤導實在抱歉。浮動的基礎知識浮動有個屬性左浮動右浮動不浮動繼承。浮動元素脫離了標準文檔流,文字和行級元素會環繞該元素,塊級元素則不受影響。 前段時間寫過一篇CSS基礎知識之position,當時對float的理解不太準確,被慕課網多名讀者指出(原文已修正,如有誤導實在抱歉)。現對float進行更深入的...

    wuyangchun 評論0 收藏0
  • 理解CSS浮動與清理

    摘要:浮動為什么會有文本環繞效果產生這個疑問主要來自于以往的印象浮動的元素是脫離文檔流的。也就是說,浮動元素的確脫離了文檔流,因此文檔流中的塊框會無視浮動的元素,但是文本不會。 作為前端寫了很多頁面布局,但是浮動這塊一直是我似懂非懂的盲點,一方面用浮動能實現很多布局,另一方面浮動造成的影響又會破壞布局讓人頭疼,所以今天就特地寫篇博文解決這塊盲點。 本文主要討論以下幾個問題:1.浮動的原始用途...

    Tonny 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<