CSS兩列布局的N種實現

2021-03-02 web前端開發
來源 | http://www.fly63.com/article/detial/9541一,什麼是兩列布局兩列布局分為兩個,一種是垂直定寬,右側自適應,另一種是兩列都自適應(即縱向寬度由子元素決定,右側補齊剩餘空間)。在css面試題裡面屬於常考題,也是一個前端開發工程師必須掌握的技能,下面將分別介紹實現方式。二,頂端定寬,右側自適應如何實現?1、雙列直插式原理:兩個元素都設置dislpay:inline-block,為了消除HTML空間的影響,父元素的字體大小需要設置為0,正確匹配元素的寬度使用計算函數計算。如果兩個元素的高度不一樣,可以給元素設置vertical-align:top調整。缺點:由於父元素設置了font-size為0,子元素內文字不會顯示。

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style>       *{         padding: 0;         margin: 0;       }      .box{        height: 600px;        width: 100%;        font-size:0;      }      .left{        display: inline-block;        width: 100px;        height: 200px;        background-color: red;        vertical-align: top;
} .right{ display: inline-block; width: calc(100% - 100px); height: 400px; background-color: blue; vertical-align: top; }</style> </head> <body> <div> <div> <span>1234</span> </div> <div> <span>1234</span> </div> </div> </body></html>

2、雙浮動原理:兩個元素設置浮動,右側自適應元素寬度使用calc函數計算

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style>      *{        padding: 0;        margin: 0;      }      .box{        height: 600px;        width: 100%;
} .left{ float: left; width: 100px; height: 200px; background-color: red; } .right{ float: left; width: calc(100% - 100px); height: 400px; background-color: blue; }</style> </head> <body> <div> <div> <span> 123adadadddddddddddddddddddddddddddddddddddddddd </span> </div> <div></div> </div> </body></html>

3、浮動+保證金原理:預設定寬元素浮動,右側自適應元素設置margin-left的值大於定寬元素的寬度即可

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style>      *{        padding: 0;        margin: 0;      }      .box{        height: 600px;        width: 100%;
} .left{ float: left; width: 100px; height: 200px; background-color: red; } .right{ margin-left: 100px; height: 400px; background-color: blue; }</style> </head> <body> <div> <div> <p>1234</p> </div> <div> <p>1234</p> </div> </div> </body></html>

4、浮動+ BFC原理:父元素設置溢出:隱藏,左側定寬元素浮動,右側自適應元素設置溢出:自動創建BFC缺點:前端元素的內容如果超過設定寬度會重疊到右側元素上。

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style>      *{        padding: 0;        margin: 0;      }      .box{        height: 600px;        width: 100%;        overflow: hidden;      }      .left{        float: left;        width: 100px;        height: 200px;        background-color: red;      }      .right{        overflow: auto;        height: 400px;        background-color: blue;      }</style>  </head>  <body>    <div>      <div>111111111111111111111111</div>      <div>111111111111111111111111111111111111111111111</div>    </div>    <div></div>  </body></html>

5、絕對+左邊距原理:父元素相對定位,垂直元素絕對定位,右側自適應元素設置margin-left的值大於定寬元素的寬度

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style>      *{        padding: 0;        margin: 0;      }      .box{        height: 600px;        width: 100%;        position: relative;      }      .left{        position: absolute;        width: 100px;        height: 200px;        background-color: red;      }      .right{        margin-left: 100px;        height: 400px;        background-color: blue;      }</style>  </head>  <body>    <div>      <div></div>      <div></div>    </div>  </body></html>

6、flex布局原理:父元素設置display:flex,自適應元素設置flex:1

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style>      *{        padding: 0;        margin: 0;      }      .box{        height: 600px;        width: 100%;        display: flex;      }      .left{        width: 100px;        height: 200px;        background-color: red;      }      .right{        flex: 1;        height: 400px;        background-color: blue;      }</style>  </head>  <body>    <div>      <div></div>      <div></div>    </div>  </body></html>

三,左右兩端元素都自適應嚴格來說,並不算兩個元素都是適應,只是將上面的定寬替換由子元素撐開而已1、浮動+ BFC原理和上面一樣,只是稍微元素的寬度沒有設置,由子元素撐開2、table布局原理:父元素顯示:表格,垂直元素外圍用一個div包裝,該div設置顯示:表格單元格,寬度:0.1%(保證最小寬度),右側元素內部設置margin-right,右側元素設置顯示:table-cell。缺點:IE7及以下不支持,當display:tabletime,padding失效,父元素的line-height屬性失效,當display:table-cell時,margin無效。

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style>      .parent{        display: table;        width: 100%;
} .box{ display: table-cell; width: 0.1%; } .left{ margin-right: 20px; background-color: red; height: 200px; } .right{ display: table-cell; background-color: blue; height: 300px; }</style> </head> <body> <div> <div> <div>126545453dddddddd453453453</div> </div> <div>12121</div> </div> </body></html>

3、flex布局4、網格布局原理:父元素設置顯示:grid,grid-template-columns:auto 1fr;(這個屬性定義列寬,auto關鍵字表示由瀏覽器自己決定長度。fr是一個相對尺寸單位,表示剩餘空間做等分) grid-gap:20px(行間距)缺點:兼容性太差,IE11都不支持,谷歌57以上才可以。

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style>      .parent{        display:grid;        grid-template-columns:auto 1fr;        grid-gap:20px      }        .left{        background-color: red;        height: 200px;      }      .right{        height:300px;        background-color: blue;      }</style>  </head>  <body>    <div>      <div>1111111111111111111111111</div>      <div></div>    </div>  </body></html>

相關焦點

  • DIV+CSS教程_DIV+CSS布局_DIV+CSS實例教程手冊
    風格5. css優先權6.Css盒模型組成第2天:列布局1,固定寬度2,一列固定寬度居中3,一列自適應寬度>4,一列自適應寬度居中5,兩對多的布局第3天:兩列和三列布局1,兩列自適應寬度2,兩列固定寬度
  • CSS實現自適應分隔線的N種方法
    具體實現如下html結構為<div class="title">我是分割線</div>css樣式為.title{ position: relative; text-align: center; overflow: hidden; font-size
  • css布局史 - grid一統天下
    而作為前端三劍客的css呢?似乎css3已經是很久很久的事情了,久到了我們不知道它是否還在更新,css是否還有新的技術產生。雖然各種scss,stylus,less預處理器提高了我們代碼的開發和維護,但是css依然缺少一個一擊致命,一劍封喉的技術。
  • 一行CSS 代碼搞定響應式布局
    最精彩的地方在於:所有的響應特性被添加到了一行 css 代碼中。這意味著我們不必將 HTML 與醜陋的類名(如col-sm-4, col-md-8)混雜在一起,也不必為每個屏幕創建媒體查詢。ok,讓我們發車吧。 設置 在本文中,我將繼續使用我在第一篇 CSS Grid 布局教程文章中的網格布局。然後,我們將在文章末尾添加圖片。
  • 【乾貨】Css精髓:這些布局你都學廢了嗎?
    2列布局2列布局的使用頻率也非常高,其實現效果主要就是將頁面分割成左右寬度不等的兩列。一般寬度較小的一列會設置為固定寬度,作為側邊欄之類的,而另一列則充滿剩餘寬度,作為內容區。在後臺管理系統及api文檔中使用較為廣泛。
  • css 垂直居中的幾種實現方式
    前言設計是帶有主觀色彩的,同樣網頁設計中的 css 一樣讓人摸不頭腦。網上列舉的實現方式一大把,或許在這裡你都看到過,但既然來到這裡我希望這篇能讓你看有所收穫,畢竟這也是前端面試的基礎。具體代碼如下:代碼舉例頁面效果3、table 方式通過設置父類元素的布局為 table,然後將子元素的布局設置為 table-cell 單元格方式,最後通過 vertical-align 使元素垂直居中。
  • css 水平居中的幾種實現方式
    前言設計是帶有主觀色彩的,同樣網頁設計中的 css 一樣讓人摸不頭腦。網上列舉的實現方式一大把,或許在這裡你都看到過,但既然來到這裡我希望這篇能讓你看有所收穫,畢竟這也是前端面試的基礎。實現方式1、text-align 方式text-align 是入門最常用的屬性,根據字面意思是文本對齊用的。
  • flex布局實現瀑布流專題及常見問題 - CSDN
    瀑布流的布局自我感覺還是很吸引人的,最近又看到實現瀑布流這個做法,在這裡記錄下,特別的,感覺flex布局實現瀑布流還是有點懵的樣子,不過現在就可以明白它的原理了1.multi-column多列布局實現瀑布流先簡單的講下multi-column相關的部分屬性column-count
  • 如何在CSS網格布局中的列中填充項目
    假設我們有n 個項目,並且我們必須在網格布局中將這些項目按列排序。列數是固定的,我們還必須確保網格布局中的行數最少,以便有效填充網格。在本文中,我把數字視為項目。並且根據我們的要求在網格布局中排列1-13之間的數字。列數固定為三。
  • CSS實現水平垂直居中的10種方式
    lineheightwriting-modetablecss-tableflexgridabsolute + 負margin為了實現上面的效果先來做些準備工作,假設HTML代碼如下,總共兩個元素,父元素和子元素<div>    <div>123123</div
  • 10個關於css高頻面試題
    "val"字符串的元素選擇器含義描述E:root匹配文檔的根元素,對於HTML文檔,就是HTML元素E:nth-child(n)匹配其父元素的第n個子元素,第一個編號為1E:nth-last-child(n)匹配其父元素的倒數第n個子元素,第一個編號為1E:nth-of-type(
  • CSS 布局經典問題初步整理
    這兩種方法實現的都是三欄布局,兩邊的盒子寬度固定,中間盒子自適應,它們實現的效果是一樣的,差別在於其實現的思想。簡單說起來就是雙飛翼布局比聖杯布局多創建了一個 div,但不用相對布局了,少設置幾個屬性。利用浮動實現我自己使用浮動也實現了三欄式布局:左邊盒子左浮動,右邊盒子右浮動,中間盒子利用 margin-left 和 margin-right 來為左右盒子留位置,同時父盒子設置 overflow: auto; 來避免子盒子溢出。
  • CSS技巧,像table一樣布局div
    許多網頁設計師都喜歡,將兩個或者多個容器等高的並排放置,並在裡面展示每個容器的內容,就象經典表格布局中的單元格控制幾個欄目的位置,也喜歡容器的內容居中或頂部對齊顯示。  但是你又不喜歡用table來實現他,那怎麼辦呢?
  • CSS技巧學習:像table一樣布局div
    首頁 > 教程 > 關鍵詞 > 最新資訊 > 正文 CSS技巧學習:像table一樣布局div
  • 10 個 CSS 高頻面試題,你都會嗎?
    "val"字符串的元素選擇器含義描述E:root匹配文檔的根元素,對於HTML文檔,就是HTML元素E:nth-child(n)匹配其父元素的第n個子元素,第一個編號為1E:nth-last-child(n)匹配其父元素的倒數第n個子元素,第一個編號為1E:nth-of-type(
  • 「CSS」css布局詳解
    布局(layout)即對事物的全面規劃和安排,頁面布局是對頁面的文字、圖像或表格進行格式化版式排列。網頁布局對改善網站的外觀非常重要,又稱版式布局。常見的布局結構分為:單列布局,兩列布局,三列布局和混合布局,其中使用最多的是混合布局,即按照網站的實際需求使用多列進行布局。
  • CSS實現水平垂直居中的1010種方式(史上最全)
    要實現上圖的效果看似很簡單,實則暗藏玄機,本文總結了一下CSS實現水平垂直居中的方式大概有下面這些,本文將逐一介紹一下,我將本文整理成了一個github倉庫,歡迎大家star。點擊查看完整DEMOtable曾經table被用來做頁面布局,現在沒人這麼做了,但table也能夠實現水平垂直居中,但是會增加很多冗餘代碼<table>
  • CSS布局奇技淫巧:各種居中
    居中是我們使用css來布局時常遇到的情況。使用css來進行居中時,有時一個屬性就能搞定,有時則需要一定的技巧才能兼容到所有瀏覽器,本文就居中的一些常用方法做個簡單的介紹。 先來說幾種簡單的、人畜無害的居中方法 1. 把margin設為auto 具體來說就是把要居中的元素的margin-left和margin-right都設為auto,此方法只能進行水平的居中,且對浮動元素或絕對定位元素無效。
  • 完美的DIV三行三列自適應高度布局
    我們一般討論的自適應高度的DIV布局,都是指有背景區分的,但在我們的實際應用中,很少有網站這麼用的,大多數都不是用背景區分的。但今天我們並 不是討論它的實用性如何,而只討論實現這種布局的一種較完美的解決方法。
  • 【面試題】CSS知識點整理(附答案)
    css實現寬高比[2]3.rem實現適配的原理:核心思想:百分比布局可實現響應式布局,而rem相當於百分比布局。實現原理:動態獲取當前視口寬度width,除以一個固定的數n,得到rem的值。表達式為rem = width / n。