摘要:二正文脫離文檔流脫離文檔流的元素都是塊級元素。參考資料什么是文檔流指語言文本從左到右,從上到下顯示,這是傳統文檔的文本布局。定位不脫離文檔流,設置沒有作用,對敏感。允許指定負的外邊距值。
一 前言
要想掌握CSS部分的內容其實并不容易,盡管你已經閱讀過相當多的關于CSS的書籍,但是還是免不了去網上搜索相關的知識擴大你對CSS內容的掌握。在網絡上查找最好的地方當然是CSS官網文檔,不過英文版的官方文檔將很大一部分人拒之門外,而中文版的博客上五花八門的只是零散又不權威,很容易將人帶入歧途,浪費時間。筆者寫這篇文章,摘錄博客上總結的CSS知識,同時參考CSS官方文檔,盡力保證其正確性。希望能節省開發者查閱的時間,提高效率。如有錯誤的地方,還請大家指出~一起學習,共同進步。
二 正文 1.DOM脫離文檔流脫離文檔流的元素都是塊級元素。
參考資料:
【1】https://www.cnblogs.com/chuaW...
(1)什么是文檔流
指語言文本從左到右,從上到下顯示,這是傳統HTML文檔的文本布局。
脫離文檔流即是元素打亂了這個排列,或是從排版中拿走。
(2)什么情況下會脫離文檔流
浮動(float)、絕對定位(absolute)、固定定位(fixed)三種方式定位會脫離文檔流。
(3)浮動
浮動元素會脫離文檔流并向左/向右浮動,直到碰到父元素或者另一個浮動元素。
float 屬性定義元素在哪個方向浮動。以往這個屬性總應用于圖像,使文本圍繞在圖像周圍,不過在 CSS 中,任何元素都可以浮動。浮動元素會生成一個塊級框,而不論它本身是何種元素。如果浮動非替換元素,則要指定一個明確的寬度;否則,它們會盡可能地窄。
浮動元素脫離文檔流:
1.沒有實際高度,浮動會導致父元素高度坍塌
2.位置屬性(left/top/right/bottom)是沒有用的
需要注意:
浮動有點像玩俄羅斯方塊。向左浮動,方塊從右往左滑過來,如果某一行空間不夠(基于父容器的寬度),那么這個塊會沿著最右邊的塊的下邊沿水平劃過來,最后看卡到哪里就停止。
left4在第一行left3后面寬度不夠,換行成第二行。在left2后面寬度不夠,只能在left1后面。right1自然是從第二行開始查找位置,很幸運第二行現在唯一的元素#left4右面空間足夠,放置即可。right2在第二行中沒有足夠的位置,換行成第三行,找到空余位置插入。
(4)定位
關于定位的詳細講解請看這里:https://segmentfault.com/a/11...
//css中給元素設置position屬性 el{ position: absolute | fixed | relative | static | inherit }
詳解:
position的值為absolute、fixed的元素脫離文檔流,static、relative沒有脫離文檔流。
1.static定位不脫離文檔流,設置left/top/right/bottom沒有作用,對margin/padding敏感。 2.對于外邊距margin:塊級元素的垂直相鄰外邊距會合并; 而行內元素實際上不占上下外邊距。行內元素的的左右外邊距不會合并; 3.浮動元素的外邊距也不會合并。允許指定負的外邊距值。(這里可以參考BFC部分)
對于浮動與定位的位置優先級:
(fixed == absolute) > float > relative > static。理解為同時設置了position:absolute和float:right。忽略float:right。
堆疊優先級:
定位元素z-index>=0時為(fixed == absolute == relative) > static,z-index < 0時(fixed == absolute == relative) < static。理解為兄弟元素一個設置了position:relative,另一個設置了position:static,當relative元素z-index為>=0時,無論static元素設置多少都在relative下面。如果relative設置z-index<0,則論static取什么值relative都會在static下面。 定位元素z-index>=0時(fixed == absolute == relative) > float,z-index < 0時(fixed == absolute == relative) < float。理解為兄弟元素一個設置了position:relative,另一個設置了float:left,當relative元素z-index為>=0時,無論float元素設置多少都在relative下面。如果relative設置z-index<0,則無論float的z-index設置多少relative都會在float下面。 float > static始終成立。因為z-index只有在定位元素上才起作用,定位元素包括fixed、absolute、relative。 fixed == absolute == relative,比較堆疊順序直接比較z-index大小即可。2.垂直邊距合并
參考資料:http://www.w3school.com.cn/cs...
當兩個垂直外邊距相遇時,它們將形成一個外邊距。合并后的外邊距的高度等于兩個發生合并的外邊距的高度中的較大者。
2.什么情況下會發垂直邊距合并?
1)只針對塊級元素
2)正常文檔流
注意:合并行為只適用于外邊距,如果元素有內邊距和邊框,它們絕對不會合并。
情況1:同一層級垂直方向上盒子的相遇
請注意,兩個 div 之間的外邊距是 20px,而不是 30px(20px + 10px)。
(注意:圖片中的“內容區域”應該是包括content和padding)
demo1
情況2:存在嵌套關系
父子節點都是沒有脫離文檔的兩種定位(static、relative)的外邊距(margin)會合并,顯示效果以最大的那個外邊距為準。
沒有給父元素設置內邊距或者有效的邊框的情況下:
注釋:請注意,如果不設置 div 的內邊距和邊框,那么內部 div 的上外邊距將與外部 div 的上外邊距合并(疊加)。
為父元素例子中的middle元素增加一個border-top或者padding-top即可
邊距合并實際例子:
containerbigmiddlenormal
normal和big都沒有脫離文檔流,發生嵌套時,最終確認上邊距為50px.
在包含塊上設置邊框或者內邊距,會使其子元素的外邊距包含在包含塊內。《CSS權威指南》(第三版)
解決這種情況下邊距合并:
containerbigmiddlenormal
注意:#big{ padding-top:5px;} 這里normal上邊框距離big上邊框的值應該是:margin-top(normal) + padding-top(big)
demo2
margin講解
父元素的第一個子元素的上邊距margin-top如果碰不到有效的border或者padding.就會不斷一層一層的找自己“領導”(父元素,祖先元素)的麻煩。只要給領導設置個有效的 border或者padding就可以有效的管制這個目無領導的margin防止它越級,假傳圣旨,把自己的margin當領導的margin執行。
對于垂直外邊距合并的解決方案上面已經解釋了,為父元素例子中的middle元素增加一個border-top或者padding-top即可解決這個問題。
情況3.外邊距與自身發生合并
假設有一個空元素,它有外邊距,但是沒有邊框或填充。在這種情況下,上外邊距與下外邊距就碰到了一起,它們會發生合并:
如果這個外邊距遇到另一個元素的外邊距,它還會發生合并:
這就是一系列的段落元素占用空間非常小的原因,因為它們的所有外邊距都合并到一起,形成了一個小的外邊距。
3.absolute定位結果
分兩種情況來考慮:
第一種,元素的某條邊沒有設置定位屬性(left/top/right/bottom)的時候,這一邊就會將absolute塊(包括外邊距)按流式布局(正常布局)來排列,當然這個流式布局就會受到內邊距padding的影響了。
containerbigmiddlenormal
第二種,元素的某條邊設置了定位屬性(left/top/right/bottom)的時候,這一邊就會被作為脫離文檔流的邊來處理,會相對于 static 定位以外的第一個父元素(的邊框)進行定位,如果這時候設置了外邊距,那么這一邊相對于基準元素的偏移=定位值(left/top/right/bottom)+ 外邊距。
containerbigmiddlenormal
注意:middle設置了left:0
同時,作為脫離文檔流來處理的邊是基于那個基準元素的邊框來定位的,當然不受那個元素內邊距padding的影響。
2.文檔流與文本流是怎么回事?
相關問答:https://www.zhihu.com/questio...
BFC(Block Formatting Contexts)直譯為”塊級格式化上下文”。Block Formatting Contexts就是頁面上的一個隔離的渲染區域,容器里面的子元素不會在布局上影響到外面的元素,反之也是如此。
BFC形成
float 的值不為 none
position 的值不為 static 或 relative
display屬性為inline-boxs、table-cells、table-captions的不是塊盒的塊容器(除非這個值已經被傳播到視口),
overflow不為visible的塊盒才會為它的內容創建新的BFC。
body元素
BFC渲染規則(6條)
內部的Box會在垂直方向,一個接一個地放置。
Box垂直方向的距離由margin決定。屬于同一個BFC的兩個相鄰Box的margin會發生重疊
每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對于從左往右的格式化,否則相反)。即使存在浮動也是如此。
BFC的區域不會與float box重疊,常用來清除浮動和布局。
BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素。反之也如此。
計算BFC的高度時,浮動元素也參與計算
IFC(Inline Formatting Contexts)直譯為”內聯格式化上下文”,IFC的line box(線框)高度由其包含行內元素中最高的實際高度計算而來(不受到豎直方向的padding/margin影響)
IFC渲染規則
框會從包含塊的頂部開始,一個接一個地水平擺放。
擺放這些框的時候,它們在水平方向上的外邊距、邊框、內邊距所占用的空間都會被考慮在內。在垂直方向上,這些框可能會以不同形式來對齊:它們可能會把底部或頂部對齊,也可能把其內部的文本基線對齊。能把在一行上的框都完全包含進去的一個矩形區域,被稱為該行的行框。水平的margin、padding、border有效,垂直無效。不能指定寬高。
行框的寬度是由包含塊和存在的浮動來決定。
IFC ‘line-height’ 與 ‘vertical-align’ 屬性
計算行框里的各行內級框的高度。對于置換元素、行內塊元素、行內表格元素來說,這是邊界框的高度,對于行內框來說,這是其 ‘line-height’。
行內級元素根據其 ‘vertical-align’ 屬性垂直對齊。在這些框使用 ‘top’ 或 ‘bottom’ 對齊的情況下,user-agent必須以最小化行框的高為目標對齊這些框。若這些框夠高,則存在多個解而 CSS 2.1 不定義行框基線的位置。
行框的高是最頂端框的頂邊到最底端框的底邊的距離。
參考:
(1) w3School
(2)《CSS權威指南》(第三版)
5-1 浮動
5-2 清除浮動的最佳實踐方案:
.clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; }6.margin:auto與width的計算
主要講了margin與width結合處理大小為auto的問題,并詳細介紹width的計算原則。
將這個問題之前先放一張盒模型示意圖:
現在有一個寬度為400px的包含塊,針對如圖所示:
情況一:margin-left margin-right width的值都是auto
表 現:width盡可能的大,width的值為100%;margin-left margin-right均為0
情況二:margin-left margin-right width的值都是100
表 現:margin-right 被強制設置成200
情況三:margin-left margin-right 的值是auto;width已知為200px
表 現:居中顯示
情況四:margin-left:-100, margin-right:100 width的值是auto
表 現:width被計算為400px
情況五:margin-left:100,width:100,margin-right的值都是auto
表 現:margin-right被計算為200px
參考資料:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/113049.html
摘要:進階的知識的話就是響應式這一塊了,一套代碼能適配手機是初級前端工程師的進階,在北京工資一般在左右。進階的知識應該是這一塊了,當然并不難,了解怎么與后臺交互是學習的關鍵點,在北京的工資一般在左右。 web前端?如果你是一名web前端工程師,那么你將感到幸運,從之前的默默無聞,到后來的給后臺工程師打下手,再到巔峰一時。web前端可謂是當下最火的職位之一。 showImg(https://s...
摘要:進階的知識的話就是響應式這一塊了,一套代碼能適配手機是初級前端工程師的進階,在北京工資一般在左右。進階的知識應該是這一塊了,當然并不難,了解怎么與后臺交互是學習的關鍵點,在北京的工資一般在左右。 web前端?如果你是一名web前端工程師,那么你將感到幸運,從之前的默默無聞,到后來的給后臺工程師打下手,再到巔峰一時。web前端可謂是當下最火的職位之一。 showImg(https://s...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學習即將閱讀的一些優秀經典前端后端書籍。當然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學習、即將閱讀)的一些優秀經典前端/Java后端書籍。全文為純原創,且將持續更新,未經許可,不得進行轉載。當然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 基礎 基礎書籍 進階 進階階段,深入學習的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學習即將閱讀的一些優秀經典前端后端書籍。當然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學習、即將閱讀)的一些優秀經典前端/Java后端書籍。全文為純原創,且將持續更新,未經許可,不得進行轉載。當然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 基礎 基礎書籍 進階 進階階段,深入學習的書...
閱讀 1039·2021-11-18 13:23
閱讀 746·2021-11-08 13:16
閱讀 855·2021-10-11 10:58
閱讀 3510·2021-09-22 15:26
閱讀 1732·2021-09-08 10:42
閱讀 1807·2021-09-04 16:45
閱讀 1733·2019-08-30 15:54
閱讀 2564·2019-08-30 13:45