display:grid; 布局

Grid的由來

CSS一直用來布局網(wǎng)頁,但一直都不完美狞洋。 一開始我們使用table 做布局弯淘,然后轉(zhuǎn)向浮動(dòng)、定位以及inline-block吉懊,但所有這些方法本質(zhì)上都是 Hack 的方式耳胎,并且遺漏了很多重要的功能(例如垂直居中)惯吕。 Flexbox的出現(xiàn)在一定程度上解決了這個(gè)問題,但是它的目的是為了更簡單的一維布局怕午,而不是復(fù)雜的二維布局(Flexbox和Grid實(shí)際上一起工作得很好)废登。 只要我們一直在制作網(wǎng)站,我們就一直在為解決布局問題不斷探索郁惜, 而Grid是第一個(gè)專門為解決布局問題而生的CSS模塊堡距。

Gird簡介和基本概念

  • grid布局又稱CSS網(wǎng)格布局,(又名“網(wǎng)格”)是一個(gè)二維的基于網(wǎng)格的布局系統(tǒng)兆蕉,其目的只在于完全改變我們?cè)O(shè)計(jì)基于網(wǎng)格的用戶界面的方式羽戒。
  • grid中的一些概念
    • 網(wǎng)格容器(Grid Container)元素應(yīng)用display:grid,它是其所有網(wǎng)格項(xiàng)的父元素虎韵。
    • 網(wǎng)格項(xiàng)(Grid Item)網(wǎng)格容器的直接子元素
    • 網(wǎng)格線(Grid Line)組成網(wǎng)格線的分界線易稠。它們可以是列網(wǎng)格線(column grid lines),也可以是行網(wǎng)格線(row grid lines)并居于行或列的任意一側(cè)
    • 網(wǎng)格軌道(Grid Track)兩個(gè)相鄰的網(wǎng)格線之間為網(wǎng)格軌道包蓝。
    • 網(wǎng)格單元(Grid Cell)兩個(gè)相鄰的列網(wǎng)格線和兩個(gè)相鄰的行網(wǎng)格線組成的是網(wǎng)格單元驶社,它是最小的網(wǎng)格單元。
    • 網(wǎng)格區(qū)(Grid Area)網(wǎng)格區(qū)是由任意數(shù)量網(wǎng)格單元組成
  • grid目前兼容性目前還可以测萎,主流瀏覽器對(duì)它的支持力度很大亡电,ie9,10宣布它未來不久會(huì)對(duì)它有很好的支持,目前則需要使用過時(shí)的語法硅瞧。我相信不久的將來grid將成為每一個(gè)前端工作人員必備的布局技能份乒。

屬性介紹

父元素上的屬性

屬性 說明
display 設(shè)置grid布局
grid-template-rows 設(shè)置網(wǎng)格的行數(shù)
grid-template-columns 設(shè)置網(wǎng)格的列數(shù)
grid-template-areas 根據(jù)子元素的網(wǎng)格名字來排列
grid-column-gap 用來指定豎網(wǎng)格軌道的大小
grid-row-gap 用來指定行網(wǎng)格軌道的大小
grid-gap grid-column-gap和grid-row-gap這兩個(gè)屬性的縮寫方式
justify-items 網(wǎng)格中所有單元格中的內(nèi)容在X軸的對(duì)齊方式
align-items 網(wǎng)格中所有單元格中的內(nèi)容在Y軸的對(duì)齊方式
justify-content 來設(shè)置整個(gè)網(wǎng)格在網(wǎng)格容器中的X軸的排列方式
align-content 來設(shè)置整個(gè)網(wǎng)格在網(wǎng)格容器中的Y軸的排列方式
grid-auto-columns 設(shè)定隱藏的網(wǎng)格的高
grid-auto-rows 設(shè)定隱藏的網(wǎng)格的寬
grid-auto-flow 在布局的時(shí)候,選擇網(wǎng)格填充的方法

設(shè)置grid布局

display:grid | inline-grid |  subgrid;
屬性值 說明
grid 設(shè)置塊級(jí)grid網(wǎng)格布局
inline-grid 設(shè)置一個(gè)內(nèi)聯(lián)級(jí)的網(wǎng)格
subgrid 如果這個(gè)網(wǎng)格本身就是父元素中的某一個(gè)單元網(wǎng)格腕唧,則這個(gè)值是用來表示繼承父元素,希望它的行/列的大小繼承自它的父級(jí)網(wǎng)格容器或辖,而不是自己指定的。

設(shè)置網(wǎng)格的列數(shù)與行數(shù)

  1. grid-template-columns 它表示的是設(shè)置列數(shù)
grid-template-columns:100px 10% 1fr 2fr; /*寫幾個(gè)值表示有幾列   值可以是px這種固定大小的枣接,也可以是百分比颂暇,也可以使用fr這種單位;fr表示總空間減去固定空間和百分比的大小月腋,然后再分配*/
grid-template-columns: [c1] 200px [c2] 200px [c3] 1fr [c4];/*這里的[]是在給網(wǎng)格線起名字蟀架,每個(gè)網(wǎng)格線可以有多個(gè)名字,用空格隔開就OK榆骚,在后面會(huì)說到網(wǎng)格線名字的作用*/
grid-template-columns:repeat(12 1fr);    /*這個(gè)repeat是重復(fù)的意思片拍,也就是我們創(chuàng)建了12個(gè)大小相等的列*/
grid-template-columns: repeat(auto-fit, 100px);    /*auto-fit 自適應(yīng)的意思,也就是說盡可能的每塊100px填滿網(wǎng)格容器*/
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));/*上面的這種repeat(auto-fit, 100px)在響應(yīng)式布局中可能因?yàn)椴坏?00像素然后產(chǎn)生留白妓肢,所以我們用minmax()來解決捌省,我們用minmax(100px, 1fr)來代替100px   minmax() 函數(shù)定義大于或等于 min 且小于或等于 max 的大小范圍*/
  1. grid-template-rows 與grid-template-columns的使用方法相同 設(shè)置網(wǎng)格項(xiàng)的行數(shù)
grid-template-rows:100px 10% 1fr 2fr; /*寫幾個(gè)值表示有幾行   值可以是px這種固定大小的,也可以是百分比碉钠,也可以使用fr這種單位纲缓;fr表示總空間減去固定空間和百分比的大小卷拘,然后再分配*/

通過網(wǎng)格單元的名字來布局 grid-template-areas

使用這個(gè)屬性的時(shí)候,需要先用子元素上的grid-area屬性給子元素起一個(gè)名字祝高,然后再配合這個(gè)屬性來時(shí)使用

.box{
            background-color: #999;
            display: grid;
            grid-template-columns: 100px 80% 1fr 1fr;
          grid-template-rows: 200px 300px 300px;
          grid-template-areas: "header header header ."
                               "main main . sidebar"
                               "footer footer footer footer"
            /*名字便是元素的名字栗弟,點(diǎn)(.)代表的意思是空一格,這個(gè)單元格中不放內(nèi)容*/
}
.a{
            grid-area:header;
            /*grid-area:;   是給子元素起一個(gè)名字*/
            background-color: red;
}
.b{
            grid-area:main;
            background: blue;
}
.c{
            grid-area:sidebar;
            background: pink;
}
.d{
       grid-area:footer;
       background: black;
}
<div class="box">
        <div class="a">
            頭部
        </div>
        <div class="b">
            主題
        </div>
        <div class="c">
            側(cè)邊欄
        </div>
        <div class="d">
            底部
        </div>
</div>

設(shè)置網(wǎng)格軌道的大小

  • grid-column-gap和grid-row-gap 用來指定橫豎網(wǎng)格軌道的大小 只在兩個(gè)單元格之間產(chǎn)生間距工闺,不再邊緣產(chǎn)生
  • grid-gap grid-column-gap和grid-row-gap這兩個(gè)屬性的縮寫方式
.box{
    grid-row-gap:10px;
    grid-column-gap:20px;
}
.box{
    grid-gap:10px 20px;
    /* grid-gap: grid-row-gap grid-column-gap; */
}

justify-items 網(wǎng)格中所有單元格中的內(nèi)容在網(wǎng)格項(xiàng)X軸的對(duì)齊方式 默認(rèn)是占滿寬度整個(gè)X軸

屬性值 說明
start 內(nèi)容在單元格的左端對(duì)齊
end 內(nèi)容在單元格的右端對(duì)齊
center 內(nèi)容在單元格X軸的中間位置
stretch 內(nèi)容寬度占據(jù)整個(gè)單元格的X軸 (默認(rèn)值)

align-items 網(wǎng)格中所有單元格中的內(nèi)容在網(wǎng)格項(xiàng)Y軸的對(duì)齊方式 默認(rèn)是占滿寬度整個(gè)Y軸 它的值與justify-items相同

屬性值 說明
start 內(nèi)容在單元格的頂端對(duì)齊
end 內(nèi)容在單元格的底部對(duì)齊
center 內(nèi)容在單元格Y軸的中間位置
stretch 內(nèi)容高度占據(jù)整個(gè)單元格的Y軸 (默認(rèn)值)

justify-content 如果我們使用PX這種固定大小的布局方式的時(shí)候乍赫,網(wǎng)格的大小可能小于網(wǎng)格容器的大小

這個(gè)值是用來設(shè)置整個(gè)網(wǎng)格在網(wǎng)格容器中的X軸的排列方式

屬性值 說明
start 網(wǎng)格與網(wǎng)格容器的左端對(duì)齊
end 網(wǎng)格與網(wǎng)格容器的右端對(duì)齊
center 網(wǎng)格處于網(wǎng)格容器的X軸的中間
stretch 調(diào)整網(wǎng)格項(xiàng)的大小,使其寬度填充整個(gè)網(wǎng)格容器
space-around 相當(dāng)于給每一列單元格添加相同的左右margin
space-between 在網(wǎng)格容器的X軸的兩段對(duì)齊
space-evenly 每一列之間的左右間距是相同的 與邊緣也有相同的距離

align-content 如果我們使用PX這種固定大小的布局方式的時(shí)候陆蟆,網(wǎng)格的大小可能小于網(wǎng)格容器的大小

這個(gè)值是用來設(shè)置整個(gè)網(wǎng)格在網(wǎng)格容器中的Y軸的排列方式

屬性值 說明
start 網(wǎng)格與網(wǎng)格容器的頂部對(duì)齊
end 網(wǎng)格與網(wǎng)格容器的底部對(duì)齊
center 網(wǎng)格處于網(wǎng)格容器的Y軸的中間
stretch 調(diào)整網(wǎng)格項(xiàng)的大小雷厂,使其高度填充整個(gè)網(wǎng)格容器
space-around 相當(dāng)于給每一行單元格添加相同的上下margin
space-between 在網(wǎng)格容器的Y軸的兩段對(duì)齊
space-evenly 每一行之間的上下間距是相同的 與邊緣也有相同的距離

grid-auto-columns和grid-auto-rows 設(shè)定隱藏的網(wǎng)格軌道的大小

自動(dòng)生成隱式網(wǎng)格軌道(列和行),當(dāng)你定位的網(wǎng)格項(xiàng)超出網(wǎng)格容器范圍時(shí)叠殷,將自動(dòng)創(chuàng)建隱式網(wǎng)格軌道改鲫。網(wǎng)格軌道大小,可以是固定值,百分比或者是分?jǐn)?shù)(fr單位)林束。

grid-auto-flow 在布局是時(shí)候像棘,選擇網(wǎng)格填充的方法

在沒有設(shè)置網(wǎng)格項(xiàng)的位置時(shí),這個(gè)屬性控制網(wǎng)格項(xiàng)怎樣排列诊县。

屬性值 說明
row 按照行依次從左到右排列
column 按照列依次從上倒下排列
dense 按先后順序排列

grid的簡寫方式和屬性的順序,設(shè)置網(wǎng)格容器所有屬性讲弄。

grid: none | grid-template-rows / grid-template-columns | grid-auto-flow [grid-auto-rows [ / grid-auto-columns] ];

設(shè)置子元素上的屬性

屬性 說明
grid-area 給單個(gè)子元素起名字
grid-column-start 元素的位置哪跟豎線開始
grid-column-end 哪跟豎線結(jié)束
grid-row-start 哪跟橫線開始
grid-row-end 哪跟橫線結(jié)束
grid-row grid-row-start和grid-row-end的縮寫
grid-column grid-column-start和grid-column-end這兩個(gè)屬性的縮寫方式
grid-area grid-row和grid-column的縮寫
justify-self 設(shè)置單個(gè)子元素在其所在的小網(wǎng)格中的X軸排列方式
align-self 設(shè)置單個(gè)子元素在其所在的小網(wǎng)格中的Y軸排列方式
align-content 來設(shè)置整個(gè)網(wǎng)格在網(wǎng)格容器中的Y軸的排列方式

grid-area 給單個(gè)子元素起名字

這個(gè)屬性就是配合父元素上的grid-template-areas屬性來使用措左,grid-area就是給單個(gè)網(wǎng)格項(xiàng)起個(gè)名字

設(shè)置網(wǎng)格項(xiàng)位置的三種寫法

  1. grid-column-start grid-column-end grid-row-start grid-row-end
從左到右的四個(gè)屬性的含義:  
            哪跟豎線開始
            哪跟豎線結(jié)束
            哪跟橫線開始
            哪跟橫線結(jié)束
值寫數(shù)字表示第幾跟網(wǎng)格線       也可以寫網(wǎng)格線的名字
  1. grid-column grid-row
grid-column: 1 / 2;
grid-row: 1 / 2;
  1. grid-area grid-column和grid-row的縮寫
grid-area: 1/1/2/2;
/*第三種寫法  行起始位置/列起始位置/行結(jié)束位置/列結(jié)束位置*/

設(shè)置單個(gè)子元素在其所在的網(wǎng)格項(xiàng)中的排列方式

  1. justify-self 用來設(shè)置單個(gè)元素在單個(gè)網(wǎng)格項(xiàng)中X軸的布局
屬性 說明
start 元素與網(wǎng)格的左端對(duì)齊
end 元素與網(wǎng)格的右端對(duì)齊
center 元素放置在網(wǎng)格X軸的中間
stretch 元素占滿整個(gè)網(wǎng)格空間(默認(rèn)值)
  1. align-self 與justify-self:;類似依痊,用來設(shè)置單個(gè)元素在單個(gè)網(wǎng)格中Y軸的布局方式,和justify-self有4個(gè)相同的值
屬性 說明
start 元素與網(wǎng)格的頂部對(duì)齊
end 元素與網(wǎng)格的底部對(duì)齊
center 元素放置在網(wǎng)格Y軸的中間
stretch 元素占滿整個(gè)網(wǎng)格空間(默認(rèn)值)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怎披,一起剝皮案震驚了整個(gè)濱河市胸嘁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凉逛,老刑警劉巖性宏,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異状飞,居然都是意外死亡毫胜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門诬辈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酵使,“玉大人,你說我怎么就攤上這事焙糟】谟妫” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵穿撮,是天一觀的道長缺脉。 經(jīng)常有香客問我痪欲,道長,這世上最難降的妖魔是什么攻礼? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任业踢,我火速辦了婚禮,結(jié)果婚禮上礁扮,老公的妹妹穿的比我還像新娘陨亡。我一直安慰自己,他們只是感情好深员,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布负蠕。 她就那樣靜靜地躺著,像睡著了一般倦畅。 火紅的嫁衣襯著肌膚如雪遮糖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天叠赐,我揣著相機(jī)與錄音欲账,去河邊找鬼。 笑死芭概,一個(gè)胖子當(dāng)著我的面吹牛赛不,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罢洲,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼踢故,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了惹苗?” 一聲冷哼從身側(cè)響起殿较,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桩蓉,沒想到半個(gè)月后淋纲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡院究,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年洽瞬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片业汰。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伙窃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔬胯,到底是詐尸還是另有隱情对供,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站产场,受9級(jí)特大地震影響鹅髓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜京景,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一窿冯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧确徙,春花似錦醒串、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伴逸,卻和暖如春缠沈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背错蝴。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工洲愤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顷锰。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓柬赐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親官紫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肛宋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)格線(Grid Line) 構(gòu)成網(wǎng)格結(jié)構(gòu)的分界線。它們既可以是垂直的(“列網(wǎng)格線(column grid lin...
    晚溪呀閱讀 1,176評(píng)論 0 0
  • 轉(zhuǎn)載地址:https://www.cnblogs.com/xiaohuochai/p/7083153.html 前...
    One_Hund閱讀 1,317評(píng)論 0 1
  • 簡介CSS網(wǎng)格布局(又稱“網(wǎng)格”)万矾,是一種二維網(wǎng)格布局系統(tǒng)悼吱。CSS在處理網(wǎng)頁布局方面一直做的不是很好慎框。一開始我們用...
    _leonlee閱讀 65,015評(píng)論 25 173
  • 上一篇良狈,介紹了grid的瀏覽器兼容和重要的幾個(gè)概念,接下來繼續(xù)介紹grid的容器屬性绰筛。 Grid(網(wǎng)格) 屬性目錄...
    codeTao閱讀 2,060評(píng)論 0 1
  • 這周一直學(xué)習(xí)佛法颇蜡,聽了很多經(jīng)为牍,看了師父的答疑很受益,適合解決生活中遇到的問題严嗜,現(xiàn)分享給大家。 一弟...
    優(yōu)一lily閱讀 702評(píng)論 0 1