css grid layout 初步認識

css grid layout 初步認識

近期在在回顧css的時候,重新學習了一下css的相關(guān)布局。
根據(jù)之前常用的布局包括

固定尺寸

布局可以從固定尺寸先了解,先構(gòu)思好頁面的主要結(jié)構(gòu),然后設定頁面的整體大小,在頁面的整體中劃分小的模塊進行尺寸的固定,直到整個頁面布局完成。

自適應尺寸

響應式的布局的結(jié)構(gòu)其實就是多個固定尺寸的組合,元素的寬度,字體的大小一般會以百分比的形式設置,通過媒體查詢進行不同分辨率下的布局,

彈性盒子flex布局

彈性盒子,用來為盒子模型提供最大的靈活性,任何一個容器都可以指定為flex布局。具體訪問
https://www.runoob.com/w3cnote/flex-grammar.html
https://blog.csdn.net/naruto_luoluo/article/details/51279761

雖然css grid layout 在之前自己只是聽說,然而自己沒有實際用過,因為之前瀏覽器的支持程度比較低,所以就沒有去學習了解,在最近重新回顧css的時候自己在https://caniuse.com/中發(fā)現(xiàn),css grid layout的支持程度已經(jīng)很高了,于是自己就重新認識了一下。

IMG20180829_103613.png

什么是網(wǎng)格布局?

在web內(nèi)容中,可以將內(nèi)容分隔成多個內(nèi)容塊,每個內(nèi)容塊占據(jù)自己的空間,因此形成了一個網(wǎng)狀的格局,類似我們在用table的時候,將其分為多個行列的單元格,形成了一個二維布局空間。

waht is css grid layout ?

css grid layout 是一個web內(nèi)容的二維布局系統(tǒng),它可以將你的內(nèi)容按行和列進行劃分,并且直接明確的指定了劃分的某個內(nèi)容塊所處的位置空間。它所包含的基礎屬性名稱有

grid(設定網(wǎng)格) , grid-template-columns(網(wǎng)格列) , grid-template-rows(網(wǎng)格行) ,grid-gap(網(wǎng)格間隙)

對css grid layout進行練習和認識

一,按網(wǎng)格線劃分布局

    <div class="wrapper">
      <div class="box a">A</div>
      <div class="box b">B</div>
      <div class="box c">C</div>
      <div class="box d">D</div>
      <div class="box e">E</div>
      <div class="box f">F</div>
    </div>
    <style>
        .wrapper {
          display: grid;
          grid-template-columns: 100px 10px 100px 10px 100px 10px 100px;
          grid-template-rows: auto 10px auto 10px auto;
        }
        .box {
          background-color: #444;
          color: #fff;
          font-size: 150%;
          padding: 20px;
          text-align: center;
        }
        .a{
          grid-column: 1 / 6; 
          grid-row: 1 / 2;
        }
        .b {
          grid-column: 7 / 8; 
          grid-row: 1 / 6; 
          background: orange;
        }
        .c { 
          grid-column: 1 / 2; 
          grid-row: 3 / 4;
        }
        .d { 
          grid-column: 2 / 6; 
          grid-row: 3 / 4;
          background:red;
        }
        .e { 
          grid-column: 5 / 6; 
          grid-row: 3 / 4;
        }
        .f { 
          grid-column: 1 / 4; 
          grid-row: 5 / 6;
        }
    </style>

在上面布局中,我們設定 .wrapper{grid-template-columns: 100px 10px 100px 10px 100px 10px 100px;} 這樣就將其分為7列,會有8條列網(wǎng)格線,設定 .wrapper{grid-template-rows: auto 10px auto 10px auto;}將其分為5行,因此形成6條行網(wǎng)格線。
然后設定.a{grid-column: 1 / 6; grid-row: 1 / 2;},讓A塊占據(jù)列網(wǎng)格線1-6,行網(wǎng)格線1-2之間的部分;同樣設定.b{grid-column: 7 / 8; grid-row: 1 / 6;}讓B塊占據(jù)列網(wǎng)格線7-8,行網(wǎng)格線1-6,其他模塊按同樣的方法。

注意也可以指定已被其他塊占據(jù)的網(wǎng)格線部分,例如效果圖D塊,.d{grid-column: 2 / 6; grid-row: 3 / 4;} ,這樣就會出現(xiàn)按順序覆蓋的現(xiàn)象因為E塊元素節(jié)點在D的后面,所以E塊遮擋了D塊列5-6網(wǎng)格線之間的部分,也可以根據(jù)自己的需求來設置z-index調(diào)整層級關(guān)系

效果圖
IMG20180829_113317.png

二,按fr進行劃分
下班是自己利用css grid和flex進行的一個列表布局,在這個部分中,表頭固定,列表部分如果超出設定高度進行滾動

<div class="frboxauto">
        <div class="frbox">
            <div class="tabtit">A</div>
            <div class="tabtit">B</div>
            <div class="tabtit">C</div>
        </div>
        <ul class="listbox">
            <li>
                <div class="frboxcon">1</div>
                <div class="frboxcon">2</div>
                <div class="frboxcon">3</div>
            </li>
            <li>
                <div class="frboxcon">1</div>
                <div class="frboxcon">2</div>
                <div class="frboxcon">3</div>
            </li>
            <li>
                <div class="frboxcon">1</div>
                <div class="frboxcon">2</div>
                <div class="frboxcon">3</div>
            </li>
        </ul>
    </div>
    <style>
        .frboxauto{
            width:400px;
            margin:20px;
            display: flex;
            flex-direction:column;
            height:100px;
        }
        .frbox{
            display:grid;
            grid-template-columns: 1fr 2fr 1fr;
            grid-template-rows: auto;
            grid-gap:10px;
        }
        .tabtit{
            background:#444;
            color:#fff;
            text-align: center;
        }
        .listbox{
            flex:1;
            list-style-type: none;
            padding:0;
            margin:0;
            overflow-y: auto;
        }
        li{
            width:100%;
            display:grid;
            grid-template-columns: 1fr 2fr 1fr;
            grid-template-rows: auto;
            grid-gap:10px;
            background-color: #999;
            height:35px;
            line-height: 35px;
        }
        .frboxcon{
            text-align: center;
        }
    </style>

如上設置.frbox{grid-template-columns: 1fr 2fr 1fr;},將其按列分為4欄,其中中間塊B占據(jù)2欄,
同樣設定 li{ grid-template-columns: 1fr 2fr 1fr;}按和表頭相同的欄數(shù)劃分,這樣便形成了一個簡單的列表布局。

效果圖
1234.gif

其中fr單位被用于在一系列長度值中分配剩余空間,如果多個已指定了多個部分,則剩下的空間根據(jù)各自的數(shù)字按比例分配。

有關(guān)fr資料可查找

http://www.css88.com/book/css/values/layout-specific/fr.htm

如上是自己個人對css grid layout的初步了解,希望以后再應用中有更多的認識。

相關(guān)參考資料

https://segmentfault.com/a/1190000002437544
https://segmentfault.com/a/1190000002448197
https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Grids

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

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

  • 北京防護紗窗@認真對待周圍的生命如果人們?yōu)榱四撤N需求養(yǎng)了狗,而又為了某種意圖扔掉了它,這種利己主義說到底是對生命的...
    2339c905828c閱讀 294評論 0 1
  • 中斷后遺癥太嚴重,一時半會調(diào)整不過來,停了一段時間,一點寫文靈感都沒有,于是,今天下了幾個APP做題,以活動活動這...
    簡繁君閱讀 312評論 0 2
  • 柳梢含艷玉樓歡,魚鬧碧波潭, 遠看菡萏三四朵,似醉羞紅面。 白鷺唱,媚風恬,雨幽憐。 夜來燈上,曲曼飄游,畫舫藏緣。
    寒菊閱讀 168評論 6 2
  • 看過宮崎駿所有的動畫,被他奇幻的想象營造出的魔幻美麗的世界深深吸引,他的動漫總是在傳達一些好看之外的東西,比如成長...
    金芽兒閱讀 2,691評論 10 28

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