前端開發入門到實戰:CSS三欄佈局的5種方法詳解
題目:假設高度已知,請寫出三欄佈局,其中左欄、右欄寬度各為300px,中間自適應.
三欄佈局的5種方案
這是一道經典的面試題,下面記錄了css佈局的5種方法。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>三欄佈局</title> <style> * { margin: 0; padding: 0; } </style> </head> <body> <!--5種解決方案--> </body>
1. 浮動解決方案
<!-- 1\. 浮動解決方案 --> <scetion class="layout float"> <!-- 樣式 --> <style media="screen"> .layout.float article div { min-height: 80px; } .layout.float .left { width: 300px; background-color: red; float: left; } .layout.float .center { background-color: yellow; } .layout.float .right { width: 300px; background-color: blue; float: right; } </style> <!-- 結構 --> <!-- 注意:結構中 右浮動的div一定要寫在 center 的前面,否則無效. --> <h2>三欄佈局</h2> <article> <div></div> <div></div> <div> <h2>浮動解決方案</h2> 1.這是三欄佈局的浮動解決方案; 2.這是三欄佈局的浮動解決方案; 3.這是三欄佈局的浮動解決方案; 4.這是三欄佈局的浮動解決方案; 5.這是三欄佈局的浮動解決方案; 6.這是三欄佈局的浮動解決方案; </div> </article> </scetion>
2. 絕對定位解決方案
<!-- 2\. 絕對定位解決方案 --> <section class="layout absolute"> <!-- 樣式 --> <style> .layout.absolute article div { min-height: 80px; position: absolute; } .layout.absolute .left { width: 300px; background-color: red; left: 0; } .layout.absolute .center { background-color: yellow; left: 300px; right: 300px; } .layout.absolute .right { width: 300px; background-color: blue; right: 0; } </style> <!-- 結構 --> <h1>三欄佈局</h1> <article> <div></div> <div> <h2>絕對定位解決方案</h2> 1.這是三欄佈局的絕對定位解決方案; 2.這是三欄佈局的絕對定位解決方案; 3.這是三欄佈局的絕對定位解決方案; 4.這是三欄佈局的絕對定位解決方案; 5.這是三欄佈局的絕對定位解決方案; 6.這是三欄佈局的絕對定位解決方案; </div> <div></div> </article> </section>
3. flexbox 解決方案
<!-- 3\. flexbox解決方案 --> <section class="layout flexbox"> <!-- 樣式 --> <style> /* flexbox解決方案在瀏覽器中顯示時被上面的絕對定位解決方案擋住了,設定一個margin-top */ .layout.flexbox { margin-top: 110px; } /* 設定最低高度 */ .layout.flexbox article div { min-height: 80px; } .layout.flexbox article { display: flex; } .layout.flexbox .left { width: 300px; background-color: red; } .layout.flexbox .center { /*center部分增長 使整行填充*/ flex: 1; background-color: yellow; } .layout.flexbox .right { width: 300px; background-color: blue; } </style> <!-- 結構 --> <h1>三欄佈局</h1> <article> <div></div> <div> <h2>flexbox解決方案</h2> 1.這是三欄佈局的flexbox解決方案; 2.這是三欄佈局的flexbox解決方案; 3.這是三欄佈局的flexbox解決方案; 4.這是三欄佈局的flexbox解決方案; 5.這是三欄佈局的flexbox解決方案; 6.這是三欄佈局的flexbox解決方案; </div> <div></div> </article> </section>
4. 表格佈局解決方案
<!-- 4\. 表格佈局解決方案 --> <section class="layout table"> <!-- 樣式 --> <style> .layout.table .left-center-right { width: 100%; min-height: 80px; display: table; } .layout.table .left-center-right>div { display: table-cell; } .layout.table .left { width: 300px; background-color: red; } .layout.table .center { background-color: yellow; } .layout.table .right { width: 300px; background-color: blue; } </style> <!-- 結構 --> <h1>三欄佈局</h1> <article> <div></div> <div> <h2>表格佈局解決方案</h2> 1.這是三欄佈局的表格佈局解決方案; 2.這是三欄佈局的表格佈局解決方案; 3.這是三欄佈局的表格佈局解決方案; 4.這是三欄佈局的表格佈局解決方案; 5.這是三欄佈局的表格佈局解決方案; 6.這是三欄佈局的表格佈局解決方案; </div> <div></div> </article> </section>
5. 網格佈局解決方案
<!-- 5\. 網格佈局解決方案 --> <section class="layout grid"> <!-- 樣式 --> <style> .layout.grid .left-center-right { width: 100%; display: grid; /* 網格行高 */ grid-template-rows: 100px; /* 網格列寬 */ grid-template-columns: 300px auto 300px; } .layout.grid .left { background-color: red; } .layout.grid .center { background-color: yellow; } .layout.grid .right { background-color: blue; } </style> <!-- 結構 --> <h1>三欄佈局</h1> <article> <div></div> <div> <h2>網格佈局解決方案</h2> 1.這是三欄佈局的網格佈局解決方案; 2.這是三欄佈局的網格佈局解決方案; 3.這是三欄佈局的網格佈局解決方案; 4.這是三欄佈局的網格佈局解決方案; 5.這是三欄佈局的網格佈局解決方案; 6.這是三欄佈局的網格佈局解決方案; </div> <div></div> </article> </section>
將瀏覽器視窗壓窄,可以看到變化。由於上面的程式碼中設定的高度是min-width,而不是設定的固定高度width,所以現在看到的也就是高度不固定的情況。
5種佈局方案在高度不固定的情況下呈現出不同的效果的分析
- 浮動解決方案中:center部分會被內容撐高並向兩邊擴充,兩邊盒子的大小不受影響。
- 絕對定位解決方案中:center部分會被內容撐高,不向兩邊擴充,兩邊盒子大小不受影響。
- flexbox解決方案中:center部分會被內容撐高,並且兩邊的盒子與center高度始終保持一致。
這是因為在flex佈局中,align-items屬性預設為stretch,如果設定為:align-items: center;或align-items: start;或align-items: end;或其他值,那麼就不會自動保持一樣高。
- 表格佈局解決方案中:center部分會被內容撐高,並且兩邊的盒子與center高度始終保持一致。
- 網格佈局解決方案中:盒子大小都不變化,文字直接超出center部分。
為了幫助大家讓學習變得輕鬆、高效,給大家免費分享一大批資料,幫助大家在成為前端工程師,乃至全棧工程師的路上披荊斬棘。在這裡給大家推薦一個前端全棧學習扣qun:784783012
當真正開始學習的時候難免不知道從哪入手,導致效率低下影響繼續學習的信心。
但最重要的是不知道哪些技術需要重點掌握,學習時頻繁踩坑,最終浪費大量時間,所以有效資源還是很有必要的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901074/viewspace-2646782/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CSS三欄佈局的5種方法詳解CSS
- 三種方法實現CSS三欄佈局CSS
- CSS三欄佈局的四種方法CSS
- 前端開發入門到實戰:六種組織CSS的方式前端CSS
- 前端開發入門到實戰:css實現div垂直水平居中的2種常用方法前端CSS
- 實現三欄佈局的幾種方法
- 前端開發入門到實戰:CSS自定義屬性+CSS Grid網格實現超級的佈局能力前端CSS
- css實現三欄佈局的幾種方法及優缺點CSS
- CSS三欄佈局的五種寫法CSS
- CSS 兩欄佈局和三欄佈局CSS
- CSS佈局之三欄佈局CSS
- 三欄佈局的n種實現
- Flutter完整開發實戰詳解(十六、詳解自定義佈局實戰)Flutter
- CSS佈局入門[css]CSS
- css佈局-實現左中右佈局的5種方式CSS
- css 佈局入門CSS
- CSS佈局入門CSS
- CSS:三欄佈局之雙飛翼佈局CSS
- 三欄式佈局的幾種實現方式
- CSS 5種佈局方案CSS
- 前端開發入門到實戰:HTML5進階FileReader的使用前端HTML
- Flutter完整開發實戰詳解(七、 深入佈局原理)Flutter
- 前端開發入門到實戰:html5語義化標籤前端HTML
- 面試之CSS篇 - 實現三欄佈局的延伸面試CSS
- CSS-常見兩欄、三欄佈局(雙飛翼佈局、聖盃佈局)CSS
- 前端開發入門到實戰:HTML5新增和廢棄的標籤前端HTML
- CSS 三欄佈局之聖盃佈局和雙飛翼佈局CSS
- 詳解CSS的Flex佈局CSSFlex
- 居中佈局、三欄佈局
- (基礎)多欄佈局的三種基本實現方案
- 前端開發入門到實戰:css單行截斷和多行截斷問題前端CSS
- 常用兩欄佈局和三欄佈局
- CSS:兩欄佈局CSS
- 前端開發入門到實戰:JavaScript字串轉換數字前端JavaScript字串
- web前端入門到實戰:css3 實現大轉盤Web前端CSSS3
- 【CSS】三欄/兩欄寬高自適應佈局大全CSS
- CSS+DIV佈局三種定位方式CSS
- css-前端實現左中右三欄佈局的常用方法:絕對定位,聖盃,雙飛翼,flex,table-cell,網格佈局等CSS前端Flex