国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > CSS > 正文

css實現三欄布局的幾種方法及優缺點

2024-07-11 08:59:29
字體:
來源:轉載
供稿:網友

前言

三欄布局,顧名思義就是兩邊固定,中間自適應。三欄布局在實際的開發十分常見,比如淘寶網的首頁,就是個典型的三欄布局:即左邊商品導航和右邊導航固定寬度,中間的主要內容隨瀏覽器寬度自適應。

我們不妨假定這樣一個布局:高度已知,其中左欄、右欄寬度各為300px,中間自適應,可以通過幾種方法來實現?以及各自的優缺點是什么?

本文源代碼請猛戳三欄布局源碼,歡迎star和fork

一、浮動布局

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>Layout</title>    <style media="screen">        html * {            padding: 0;            margin: 0;        }        .layout article div {            min-height: 150px;        }    </style></head><body>    <!--浮動布局  -->    <section class="layout float">        <style media="screen">            .layout.float .left {                float: left;                width: 300px;                background: red;            }            .layout.float .center {                background: yellow;            }            .layout.float .right {                float: right;                width: 300px;                background: blue;            }        </style>        <h1>三欄布局</h1>        <article class="left-right-center">            <div class="left"></div>            <div class="right"></div> // 右欄部分要寫在中間內容之前            <div class="center">                <h2>浮動解決方案</h2>                1.這是三欄布局的浮動解決方案; 2.這是三欄布局的浮動解決方案; 3.這是三欄布局的浮動解決方案; 4.這是三欄布局的浮動解決方案; 5.這是三欄布局的浮動解決方案; 6.這是三欄布局的浮動解決方案;            </div>        </article>    </section></body></html>

這種布局方式,dom結構必須是先寫浮動部分,然后再中間塊,否則右浮動塊會掉到下一行。
浮動布局的優點就是比較簡單,兼容性也比較好。但浮動布局是有局限性的,浮動元素脫離文檔流,要做清除浮動,這個處理不好的話,會帶來很多問題,比如父容器高度塌陷等。

二、絕對布局

   <!--絕對布局  -->    <section class="layout absolute">        <style>            .layout.absolute .left-center-right>div{                position: absolute;//三塊都是絕對定位            }            .layout.absolute .left {                left:0;                width: 300px;                background: red;            }            .layout.absolute .center {                right: 300px;                left: 300px;//離左右各三百                background: yellow;            }            .layout.absolute .right {                right: 0;                width: 300px;                background: blue;            }        </style>        <h1>三欄布局</h1>        <article class="left-center-right">            <div class="left"></div>            <div class="center">                <h2>絕對定位解決方案</h2>                1.這是三欄布局的浮動解決方案; 2.這是三欄布局的浮動解決方案; 3.這是三欄布局的浮動解決方案; 4.這是三欄布局的浮動解決方案; 5.這是三欄布局的浮動解決方案; 6.這是三欄布局的浮動解決方案;            </div>            <div class="right"></div>        </article>    </section>

絕對定位布局優點就是快捷,設置很方便,而且也不容易出問題。缺點就是,容器脫離了文檔流,后代元素也脫離了文檔流,高度未知的時候,會有問題,這就導致了這種方法的有效性和可使用性是比較差的。

三、flexbox布局

    <!--flexbox布局-->    <section class="layout flexbox">        <style>            .layout.flexbox .left-center-right{                display: flex;            }            .layout.flexbox .left {                width: 300px;                background: red;            }            .layout.flexbox .center {                background: yellow;                flex: 1;            }            .layout.flexbox .right {                width: 300px;                background: blue;            }        </style>        <h1>三欄布局</h1>        <article class="left-center-right">            <div class="left"></div>            <div class="center">                <h2>flexbox解決方案</h2>                1.這是三欄布局的浮動解決方案; 2.這是三欄布局的浮動解決方案; 3.這是三欄布局的浮動解決方案; 4.這是三欄布局的浮動解決方案; 5.這是三欄布局的浮動解決方案; 6.這是三欄布局的浮動解決方案;            </div>            <div class="right"></div>        </article>    </section>

flexbox布局是css3里新出的一個,它就是為了解決上述兩種方式的不足出現的,是比較完美的一個。目前移動端的布局也都是用flexbox。 flexbox的缺點就是IE10開始支持,但是IE10的是-ms形式的。

四、表格布局

<!--表格布局-->    <section class="layout table">        <style>            .layout.table .left-center-right {                display: table;                height: 150px;                width: 100%;            }            .layout.table .left-center-right>div {                display: table-cell;            }            .layout.table .left {                width: 300px;                background: red;            }            .layout.table .center {                background: yellow;            }            .layout.table .right {                width: 300px;                background: blue;            }        </style>        <h1>三欄布局</h1>        <article class="left-center-right">            <div class="left"></div>            <div class="center">                <h2>表格布局解決方案</h2>                1.這是三欄布局的浮動解決方案; 2.這是三欄布局的浮動解決方案; 3.這是三欄布局的浮動解決方案; 4.這是三欄布局的浮動解決方案; 5.這是三欄布局的浮動解決方案; 6.這是三欄布局的浮動解決方案;            </div>            <div class="right"></div>        </article>    </section>

表格布局的兼容性很好(見下圖),在flex布局不兼容的時候,可以嘗試表格布局。當內容溢出時會自動撐開父元素。

表格布局也是有缺陷:①無法設置欄邊距;②對seo不友好;③當其中一個單元格高度超出的時候,兩側的單元格也是會跟著一起變高的,然而有時候這并不是我們想要的效果。


五、網格布局

    <!--網格布局-->    <section class="layout grid">        <style>            .layout.grid .left-center-right {                display: grid;                width: 100%;                grid-template-columns: 300px auto 300px;                grid-template-rows: 150px;//行高            }            .layout.grid .left {                background: red;            }            .layout.grid .center {                background: yellow;            }            .layout.grid .right {                background: blue;            }        </style>        <h1>三欄布局</h1>        <article class="left-center-right">            <div class="left"></div>            <div class="center">                <h2>網格布局解決方案</h2>                1.這是三欄布局的浮動解決方案; 2.這是三欄布局的浮動解決方案; 3.這是三欄布局的浮動解決方案; 4.這是三欄布局的浮動解決方案; 5.這是三欄布局的浮動解決方案; 6.這是三欄布局的浮動解決方案;            </div>            <div class="right"></div>        </article>    </section>

CSS Grid是創建網格布局最強大和最簡單的工具。就像表格一樣,網格布局可以讓Web設計師根據元素按列或行對齊排列,但他和表格不同,網格布局沒有內容結構,從而使各種布局不可能與表格一樣。例如,一個網格布局中的子元素都可以定位自己的位置,這樣他們可以重疊和類似元素定位。

但網格布局的兼容性不好。IE10+上支持,而且也僅支持部分屬性。

六、總結

通過上面詳細介紹五種布局的優缺點,在實際開發中最優選擇哪種布局?相信讀者心中會有自己的答案。
我覺得flex和grid布局就可以搞定實際開發中的布局,假設瀏覽器都支持這兩個模塊,你將選擇grid還是flexbox來給頁面布局?flexbox是一維布局,他只能在一條直線上放置你的內容區塊;而grid是一個二維布局。前面也簡單說到,你可以根據你的設計需求,將內容區塊放置到任何你想要放的地方。那么不用多說,你應該知道哪一種更適合你的布局。此外,如果要兼容低版本的IE(比如IE8+),可以考慮table布局。

最后問大家一個問題,如果中間部分被內容高度撐開,需要左右欄也撐開,這五種布局哪些布局還可以用?

答案:flex布局和table布局

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合水县| 全南县| 南宁市| 日土县| 深泽县| 郎溪县| 延吉市| 铜川市| 永清县| 奈曼旗| 葫芦岛市| 灵丘县| 莲花县| 克什克腾旗| 铁岭市| 屏边| 陕西省| 扎赉特旗| 阿荣旗| 石狮市| 河池市| 上栗县| 镇平县| 延安市| 黑山县| 高密市| 中宁县| 达日县| 西安市| 岳阳市| 邵阳市| 汝城县| 轮台县| 临桂县| 姚安县| 东阿县| 晋宁县| 龙陵县| 庆阳市| 乌兰县| 石首市|