CSS布局方式匯總

水平居中布局

首先我們來看看水平居中

1.margin + 定寬

Demo.child{width:100px;margin:0auto;? }

相必是個前端都見過,這定寬的水平居中,我們還可以用下面這種來實現(xiàn)不定寬的

2. table + margin

Demo.child{display: table;margin:0auto;? }

display: table在表現(xiàn)上類似block元素,但是寬度為內(nèi)容寬。

無需設置父元素樣式 (支持 IE 8 及其以上版本)兼容 IE 8 一下版本需要調(diào)整為

3.inline-block + text-align

Demo.child{display: inline-block;? }.parent{text-align: center;? }

兼容性佳(甚至可以兼容 IE 6 和 IE 7)

4. absolute + margin-left

Demo.parent{position: relative;? }.child{position: absolute;left:50%;width:100px;margin-left: -50px;/* width/2 */}

寬度固定

相比于使用transform,有兼容性更好

5. absolute + transform

Demo.parent{position: relative;? }.child{position: absolute;left:50%;transform:translateX(-50%);? }

絕對定位脫離文檔流,不會對后續(xù)元素的布局造成影響。

transform為 CSS3 屬性,有兼容性問題

6. flex + justify-content

Demo.parent{display: flex;justify-content: center;? }

只需設置父節(jié)點屬性,無需設置子元素

flex有兼容性問題

垂直居中

1.table-cell + vertical-align

Demo.parent{display: table-cell;vertical-align: middle;? }

兼容性好(IE 8以下版本需要調(diào)整頁面結構至table)

2.absolute + transform

強大的absolute對于這種小問題當然也是很簡單的

Demo.parent{position: relative;? }.child{position: absolute;top:50%;transform:translateY(-50%);? }

絕對定位脫離文檔流,不會對后續(xù)元素的布局造成影響。但如果絕對定位元素是唯一的元素則父元素也會失去高度。

transform為 CSS3 屬性,有兼容性問題

同水平居中,這也可以用margin-top實現(xiàn),原理水平居中

3.flex + align-items

如果說absolute強大,那flex只是笑笑,因為,他才是最強的。。。但它有兼容問題

Demo.parent{display: flex;align-items: center;? }

水平垂直居中

1. absolute + transform

Demo.parent{position: relative;? }.child{position: absolute;left:50%;top:50%;transform:translate(-50%, -50%);? }

絕對定位脫離文檔流,不會對后續(xù)元素的布局造成影響。

transform為 CSS3 屬性,有兼容性問題

2. inline-block + text-align + table-cell + vertical-align

Demo.parent{text-align: center;display: table-cell;vertical-align: middle;? }.child{display: inline-block;? }

兼容性好

3. flex + justify-content + align-items

Demo.parent{display: flex;justify-content: center;/* 水平居中 */align-items: center;/*垂直居中*/}

只需設置父節(jié)點屬性,無需設置子元素

蛋疼的兼容性問題

##一列定寬,一列自適應

1.float + margin

left

right

right

.left{float: left;width:100px;? }.right{margin-left:100px/*間距可再加入 margin-left */}

IE 6 中會有3像素的 BUG,解決方法可以在.left加入margin-left:-3px當然也有解決這個小bug的方案如下:

left

right

right

.left{float: left;width:100px;? }.right-fix{float: right;width:100%;margin-left: -100px;? }.right{margin-left:100px/*間距可再加入 margin-left */}

此方法不會存在 IE 6 中3像素的 BUG,但.left不可選擇, 需要設置.left {position: relative}來提高層級。 注意此方法增加了不必要的 HTML 文本結構。

2.float + overflow

left

right

right

.left{float: left;width:100px;? }.right{overflow: hidden;? }

設置overflow: hidden會觸發(fā) BFC 模式(Block Formatting Context)塊級格式上下文。BFC是什么呢。用通俗的來講就是,隨便你在BFC 里面干啥,外面都不會受到影響 。此方法樣式簡單但不支持 IE 6

3 .table

left

right

right

.parent{display: table;width:100%;table-layout: fixed;? }.left{display: table-cell;width:100px;? }.right{display: table-cell;/*寬度為剩余寬度*/}

table的顯示特性為每列的單元格寬度和一定等與表格寬度。table-layout: fixed可加速渲染,也是設定布局優(yōu)先。table-cell中不可以設置margin但是可以通過padding來設置間距

4. flex

left

right

right

.parent{display: flex;? }.left{width:100px;margin-left:20px;? }.right{flex:1;? }

低版本瀏覽器兼容問題

性能問題,只適合小范圍布局

我們在學會一列定寬,一列自適應的布局后也可以方便的實現(xiàn)多列定寬,一列自適應多列不定寬加一列自適應這里我們不一一講解,大家自行嘗試,也可以鞏固前面學習的

等分布局

1. float

1

2

3

4

.parent{margin-left: -20px;? }.column{float: left;width:25%;padding-left:20px;box-sizing: border-box;? }

此方法可以完美兼容 IE8 以上版本

2. flex

1

2

3

4

.parent{display: flex;? }.column{flex:1;? }.column+.column{/* 相鄰兄弟選擇器 */margin-left:20px;? }

強大簡單,有兼容問題

3. table

1

2

3

4

.parent-fix{margin-left: -20px;? }.parent{display: table;width:100%;/*可以布局優(yōu)先,也可以單元格寬度平分在沒有設置的情況下*/table-layout: fixed;? }.column{display: table-cell;padding-left:20px;? }

等高布局

1.table

table的特性為每列等寬,每行等高可以用于解決此需求

left

right

right

.parent{display: table;width:100%;table-layout: fixed;? }.left{display: table-cell;width:100px;? }.right{display: table-cell/*寬度為剩余寬度*/}

2.flex

left

right

right

.parent{display: flex;? }.left{width:100px;margin-left:20px;? }.right{flex:1;? }

注意這里實際上使用了align-items: stretch,flex 默認的align-items的值為stretch

3. float

left

right

right

.parent{overflow: hidden;? }.left,.right{padding-bottom:9999px;margin-bottom: -9999px;? }.left{float: left;width:100px;margin-right:20px;? }.right{overflow: hidden;? }

此方法為偽等高(只有背景顯示高度相等),左右真實的高度其實不相等。兼容性較好。

到此,我們了解常見的布局解決方案,這些只是參考,一樣的布局實現(xiàn)方式多種多樣。主要就使用position、flex、table(從很久很久以前起,我們就拋棄了table布局頁面,但display: table;是異常強大)、float等屬性目前flex兼容性較差傲嬌的程序員應該放棄太低版本的瀏覽器

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

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,097評論 1 92
  • display:設置元素的顯示方式 display:block(塊級元素) 默認為父元素寬高,可設置寬高相對前序換...
    bluishwhiteC閱讀 722評論 0 0
  • 各種純css圖標 CSS3可以實現(xiàn)很多漂亮的圖形,我收集了32種圖形,在下面列出。直接用CSS3畫出這些圖形,要比...
    劍殘閱讀 9,977評論 0 8
  • 想試試ReactiveCocoa,結果要集成一下,好久不用,發(fā)現(xiàn)了新問題。 1.taobao的協(xié)議變了,http ...
    ichoice26閱讀 199評論 0 3
  • 贊美技術和功用是如此強大,但僅有贊美是遠遠不夠的,贊美是不能取代批評,沒有批評,就沒有前進,沒有批評就沒有...
    清雨_滋潤心田閱讀 389評論 0 0

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