欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

CSS實(shí)現(xiàn)三欄布局的四種方法

  發(fā)布時(shí)間:2024-03-11 14:11:04   作者:ZoeLandia   我要評(píng)論
三欄布局是常見的一種頁(yè)面布局方式,將頁(yè)面分為左欄、中欄和右欄,這篇文中主要為大家詳細(xì)介紹了CSS實(shí)現(xiàn)三欄布局的四種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1. 什么是三欄布局

常見的一種頁(yè)面布局方式,將頁(yè)面分為左欄、中欄和右欄

左右兩側(cè)的盒子寬度固定,中間的盒子會(huì)隨屏幕自適應(yīng)

一般中間放主體內(nèi)容,左右兩邊放輔助內(nèi)容

2. 如何實(shí)現(xiàn)三欄布局

2.1 彈性布局

最外層盒子設(shè)為彈性布局,左右兩邊的盒子固定寬度200px

將中間的盒子flex設(shè)為1

這樣中間盒子的寬度就能一直得到全部寬度減去左右盒子的寬度,這個(gè)寬度會(huì)隨著窗口的大小而變化

<style>
    *{
        margin: 0;
        padding: 0;
    }
    div{
        height: 200px;
    }
    .container{
        display: flex;
    }
    .left,.right{
        width: 200px;
        background: #66a4bd;
    }
    .middle{
        flex: 1;
        background: gray;
    }
</style>
<div class="container">
    <div class="left">left</div>
    <div class="middle">middle</div>
    <div class="right">right</div>
</div>

缺點(diǎn):先加載左邊容器的,左右兩邊往往是輔助內(nèi)容,這樣用戶體驗(yàn)不好

為了優(yōu)化這個(gè)問題,就出現(xiàn)了經(jīng)典的 圣杯雙飛翼 布局,它們的目的就是為了在HTML結(jié)構(gòu)上,中間欄在最前面保證了最先渲染中間提升性能

2.2 grid布局

左右兩邊的寬度固定,將剩余的空間給中間的主體部分

要用到grid-template-columns:定義網(wǎng)格的列大小和數(shù)量

<style>
    .wrap {
        height: 200px;
        display: grid;
        grid-template-columns: 200px  1fr 200px;
    }
    .left {
        width: 200px;
        height: 100%;
        background-color: aqua;
    }
    .content {
        width: 100%;
        height: 100%;
        background-color: cadetblue;
        flex: 1;
    }
    .right {
        width: 200px;
        height: 100%;
        background-color: bisque;
    }
</style>
<div class="wrap">
    <div class="left">left</div>
    <div class="content">content</div>
    <div class="right">right</div>
</div>

2.3 圣杯布局

先加載主體內(nèi)容,增加用戶體驗(yàn)

實(shí)現(xiàn)原理: float + margin負(fù)值 + position: relative

要保證中間欄最先加載,那就要把middle容器寫在前面

<body>
  <div class="container">
    <div class="middle">middle</div>
    <div class="left">left</div>
    <div class="right">right</div>
  </div>
</body>

給父容器添加`padding:0 200px,騰開位置

middle中間容器設(shè)置width:100%,此時(shí)的寬度繼承了父容器的100%

并給三個(gè)子容器都設(shè)置float: left,都向左浮動(dòng),去到同一行

頁(yè)面效果:第一行位置放不下,左右兩個(gè)容器被擠到了第二行,按道理來(lái)說(shuō)它們應(yīng)該是在第一行兩塊紅色區(qū)域位置的

給左右容器相對(duì)定位,讓它們相對(duì)自己原本文檔流的位置進(jìn)行定位

.left{
      width: 200px;
      background: #76d1ea;
      position: relative;
      margin-left: -100%; //向左挪動(dòng)父容器寬度的100%
      left: -200px;  //再向左挪動(dòng)自身的200寬度
    }

此時(shí)right接替了left原本的位置,同理,這時(shí)候只需要給right設(shè)置:margin-right: -200px; ,就可以實(shí)現(xiàn)三欄布局了

有一個(gè)問題就是:

  • 有一個(gè)最小寬度,當(dāng)頁(yè)面小于最小寬度時(shí)布局就會(huì)亂掉
  • 由于設(shè)置了相對(duì)定位,所以當(dāng)left原來(lái)的位置和right的位置產(chǎn)生重疊時(shí),由于浮動(dòng)的原因一行放不下就會(huì)換行
  • 所以布局就被打亂了,使用雙飛翼布局就可以避免這個(gè)問題
<style>
    *{
    	margin: 0;
        padding: 0;
    }
    .container{
        height: 100px;
        padding: 0 200px;
    }
    .middle, .left, .right{
        height: 100%;
        float: left;
    }
    .middle{
        width: 100%;
        background: gray;
    }
    .left{
        width: 200px;
        background: #76d1ea;
        position: relative;
        margin-left: -100%; 
        left: -200px; 
    }
    .right{
        width: 200px;
        background: #76d1ea;
        position: relative;
        margin-right: -200px; 
    }
</style>
<div class="container">
    <div class="middle">middle</div>
    <div class="left">left</div>
    <div class="right">right</div>
</div>

2.4 雙飛翼布局

先把HTML結(jié)構(gòu)稍微改造一下,在middle容器里面多用了個(gè)inner容器

<div class="container">
    <div class="middle">
    	<div class="inner">middle</div>
    </div>
    <div class="left">left</div>
    <div class="right">right</div>
</div>

已經(jīng)設(shè)置了middle的width:100%,這時(shí)候我們只需要設(shè)置inner容器為padding:0 200px,我們要的效果同樣是把左右兩個(gè)容器擺放到對(duì)應(yīng)的紅框位置

left、middle、right同樣使用浮動(dòng)

left設(shè)置margin-left:-100%(父容器的整個(gè)寬度)

right設(shè)置margin-left:-200px

這樣便實(shí)現(xiàn)了三欄布局的效果,連定位都不使用,且當(dāng)頁(yè)面過(guò)小時(shí),布局不會(huì)亂

<style>
    *{
        margin: 0;
        padding: 0;
    }
    .container{
    	height: 100px;
    }
    .middle, .left, .right{
    	float: left;
    	height: 100%;
    }
    .middle{
   		width: 100%;
    	background: gray;
    }
    .inner{
    	height: 100%;
   		padding: 0 200px;
    }
    .left{
        width: 200px;
        background: pink;
        margin-left: -100%;
    }
    .right{
        width: 200px;
        background: pink;
        margin-left: -200px;
    }
</style>
<div class="container">
  <div class="middle">
  	<div class="inner">middle</div>
  </div>
  <div class="left">left</div>
  <div class="right">right</div>
</div>

兩個(gè)布局結(jié)構(gòu)上不同:

相同:讓三列浮動(dòng),通過(guò)負(fù)外邊距形成三列布局

不同:在于如何處理中間主列的位置

圣杯布局:利用父容器的左、右內(nèi)邊距 + 兩個(gè)列的相對(duì)定位

雙飛翼布局:把主列嵌套在一個(gè)新的父級(jí)塊中,并利用主列的左、右外邊距進(jìn)行布局調(diào)整

以上就是CSS實(shí)現(xiàn)三欄布局的四種方法的詳細(xì)內(nèi)容,更多關(guān)于CSS三欄布局的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • CSS實(shí)現(xiàn)三欄布局中間一欄自適應(yīng)且隨文字大小變化寬度的示例代碼

    這篇文章主要介紹了CSS實(shí)現(xiàn)三欄布局中間一欄自適應(yīng)且隨文字大小變化寬度的示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需
    2020-06-02
  • CSS經(jīng)典三欄布局方案(6種方法)

    這篇文章主要介紹了CSS經(jīng)典三欄布局方案(6種方法)的相關(guān)資料,詳細(xì)的介紹了6種三欄布局的方法,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-12-01
  • 淺談CSS三欄布局的N種實(shí)現(xiàn)

    本篇文章主要介紹了淺談CSS三欄布局的N種實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-18
  • CSS實(shí)現(xiàn)三欄布局的四種方法示例

    可能有人不理解三欄布局是什么,其實(shí)三欄布局頁(yè)面分為左中右三部分,然后對(duì)中間一部分做自適應(yīng)的一種布局方式,下面這篇文章就給大家詳細(xì)介紹了CSS實(shí)現(xiàn)三欄布局的四種方法
    2017-01-24
  • css實(shí)現(xiàn)兩欄布局,左側(cè)固定寬,右側(cè)自適應(yīng)的多種方法

    今天通過(guò)7種方法給大家介紹css實(shí)現(xiàn)兩欄布局,左側(cè)固定寬,右側(cè)自適應(yīng)效果,每種方法通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-08-04
  • 淺談CSS 多欄布局(Multi-Columns Layout)

    這篇文章主要介紹了淺談CSS 多欄布局(Multi-Columns Layout)的相關(guān)資料,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-20
  • css頁(yè)面左中右分欄布局示例

    左中右分欄在頁(yè)面布局中非常實(shí)用也很常見,符合大眾的瀏覽習(xí)慣,那么如何輕松簡(jiǎn)單實(shí)現(xiàn)呢?下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下
    2013-10-28

最新評(píng)論