CSS布局 三欄布局

2022-02-19 17:53:46 字數 2761 閱讀 5073

css布局技術可謂是前端技術中最基礎的技術,就是因為基礎,所以我認為要更加熟練,深入的去掌握,去梳理。

採用浮動實現的三欄布局有以下特點及注意事項:

· 注意dom結構的排列順序。

因為左右兩側的dom都是浮動布局,而中間的dom則是普通的文件流,所以為了規避瀏覽器正常的頁面渲染,即先解析左側dom(浮動),再解析中間的dom(普通文件流,寬度100%)而導致解析最後的右側dom(浮動)時因為寬度的問題,而掉到下一行的情況。

· 因為dom結構順序實際內容反而最後渲染出來。

· 左右兩欄高度無法做到100%,除非設定body, html高度為100%。

具體**:

this is left

this is right

this is main

通過定位實現的三欄布局,其實現方式與浮動相類似,與浮動相比,它具有以下特點:

· 無需手動更改dom結構的順序

· 左右兩欄可以實現100%高度,無需手動定高,但只支援ie7+

定位方式也有它的缺點,比如當給中間dom定義了最小寬度時,左右兩欄會蓋在中間的dom上。

具體**:

this is left

this is main

this is right

聖杯布局【holy grail of layouts】是kevin cornell在2023年提出的一種布局模型概念,在國內最早是由**ued的工程師傳播開來。

聖杯布局的特點是:

1、三列布局,中間寬度自適應,兩邊定寬;

2、中間欄要在瀏覽器中優先展示渲染;

3、允許任意列的高度最高;

4、要求只用乙個額外的div標籤;

5、要求用最簡單的css、最少的hack語句;

實現聖杯布局的核心技術就是浮動與定位相結合使用。

從最簡單的聖杯布局開始著手:

3.1 兩欄-左側定寬

仔細看**,我可以得出乙個結論,聖杯布局的html結構就是乙個包裹層(.wrap),然後裡面是我們所要放的結構:左側欄(.left) 和 主欄(.main) 。為了能讓主欄優先解析渲染,所以將其html結構放在最前面。

在css上,結構相關的html標記都要進行浮動,使他們進行一行併排開來,但由於主欄的寬度已經是最外包裹層最大的寬度(去除padding),所以左側欄會掉到第二行,因此需要為其設定:

margin-left:-100% 

position:relative;

left:-150px;

通過margin負值瀏覽器會將側欄從第二行拉向第一行,而這裡的-100%,指的就是側欄所在父容器的寬度,所以最終側欄會被拉向父容器第一行的最左側。接著再進行相對定位(不會脫離文件流),最後通過左側偏移值(left)將其拉回到瀏覽器的最左邊。

3.2 兩欄-右側定寬

左側定寬與右側定寬最大的不同就是右側欄可以有浮動,然後設定margin-right:-150px便可以實現。

為什麼可以這麼做呢?其實很簡單因為我們的包裹成(.wrap)設定了右間距,而當我們的右側欄向右偏移了150px時,便已經脫離了.wrap包裹層。相當於脫離了bfc的環境,此時右側欄由於浮動便會自動上浮。

3.3 聖杯布局 - 側邊欄都在左邊

3.4 聖杯布局-側邊欄都在右邊

3.5 聖杯布局-兩側定寬

由以上的基礎認識後,我們就可以很容易的寫出兩欄定寬,共計3欄的「聖杯布局」。

雙飛翼布局實際上是對聖杯布局的改進版,相比於聖杯布局,它減少了相對定位,控制偏移值等css控制,而相應的雙飛翼布局也則增加了html結構。

雙飛翼的核心思路就是為主欄增加乙個包裹成,然後讓這個包裹成與左右兩個側欄同時進行浮動,最後通過設定與聖杯布局相似的負邊距值(margin),便可以實現三欄布局,從而實現不需要定位進行輔助。

詳細**:

flex 布局是css3推出的一種可塑布局方案,其功能強大且靈活。

flex盒子預設情況下會將其內部的子元素按照html結構的順序併排一行來排列展示。如果所有子元素的寬度之和大於當前的flex盒子的寬度時,flex盒子會自動調整每個子盒子的寬度。

也是利用這個特性,我們可以很方便的實現通過flex進行的三列布局。

ps:flex 再pc端上只有ie10+ chrome21+ firefox 22+ 才被支援,但是在手機端上目前基本已經可以被全部支援

說明:order 是css3的乙個新屬性,其值為整數值,用於設定flex子元素的排列順序,值越小的子元素越排在前面。

CSS布局 三欄布局

題外話 抓狂系列片之叄個我。三欄布局要求說明 兩邊固定寬度,中間自適應,頂部對齊 html文件結構有三種 內層div順序不同 左右中 左中右。實現效果 方法如下 1.左右中 對左右子元素使用了浮動屬性 float 從而脫離了文件流,如果按照正常左中右的順序,會導致右子元素出現在中間子元素的右下方。所...

div 布局 CSS布局 三欄布局

所謂三欄布局,通常是指左右兩欄定寬,中間一欄自適應頁面寬度填滿剩餘空間的布局。這裡有一點細節 主要內容部分,即中間欄dom放在了左右兩欄dom之前,在dom樹渲染的時候會被優先渲染。div聖杯布局的原理是 container設定了padding之後浮動子元素的寬度計算100 是相對於containe...

CSS 三列布局(三欄布局)

傳統三列布局 左右定寬,中間自適應 1.絕對定位 外邊距實現 左右盒子絕對定位,固定於頁面左右兩側 中間盒子的 margin left,margin right 分別等於左右兩個盒子的寬度。css left middle right 2.浮動 外邊距實現 左右盒子浮動到頁面兩側,中間盒子的 marg...