看完不會算我輸!ლ(′◉❥◉`ლ)css
大概看一下就好,下面咱們會從頭講起。 bash
其中內容部分的高度也能夠不用
calc()
計算出的結果來表示而是使用auto
,只不過這樣的話咱們須要將.container
容器的height設置爲100%。佈局
當給一個容器(咱們稱這樣的容器爲grid-container
)設置爲display:gird
時其內部的直接子元素都會 轉換爲grid-item
。spa
grid-item相似於將一個元素block化,參考最初的那個栗子中的span元素。若是一個元素已是block元素而且它自身帶有margin等樣式,那麼這些樣式會被保留。3d
So以上就是一個3x3的網格,它的每一個格子都是邊長爲100px的正方形,嗯,對照右邊的代碼你應該能夠意會到怎麼回事。template template template模擬三遍關鍵字,嗯。。名字真怪code
值得一說的是這個3x3的網格是由4條列網格線和4條行網格線造成的。而且咱們能爲每條網格線取一個名字cdn
grid-template-columns:[c1] 100px [c2] 100px [c3] 100px [c4];
grid-template-rows:[r1] 100px [r2] 100px [r3] 100px [r4];
複製代碼
嗯,取名字有什麼用呢?莫方!咱們立刻講到。blog
[warning] 有些姓馬的同窗看到這一節標題確定納悶,哎呀哎呀,這API長得不是和上面那一節的API同樣嗎?同樣個鬼咧,這個一對沒有template字樣,而且column/row都不帶sit
咱們都知道一個矩形由4條邊組成,嗯,記得咱們上一節中給每一條網格線取了個名字嗎?嘿,是否是忽然明白了什麼。 io
注意,grid-column:c1/c3
中的/
並非除號,而是表示到/To的意思,它表示你在這張網格里放了一個元素,這個元素的寬度是c1列網格線到c3列網格線之間的距離。
除了上面這種表示一個元素寬高的方式,咱們還能直接使用數字
grid-column: 1/3; //第一條網格線到第三條網格線的距離
grid-row:2/3;
複製代碼
又或則咱們能夠把一個元素(grid-item)實際的樣式大小交給它的父容器(grid-container)來決定。
不過咱們須要先給這個grid-item取個名字
.item1{
grid-area:item1;
}
複製代碼
接着
注: 一個
.
表明一個空的網格單元,另外grid-tempalte-areas的值只在最後一行有;
嗯,若是這一節的栗子看懂了(怎麼能,怎麼能!看不懂!),那麼最開始的佈局的例子想必小夥伴如今也能看懂啦~
至此你已經掌握住了Grid中最重要的部分,其他都是細節都是細節啦(嗯,只說了兩遍),是否是很簡單~(づ ̄ 3 ̄)づ
要聲明的一點是,grid-gap
的值就像padding
什麼的同樣是一個複合值(padding-left/top
),只設置一個是表示橫縱向gap值相等。
Grid相較於Flex最大的一點不一樣之處就在於Grid是一個二維佈局系統(Flex是一維的),什麼是二維?什麼是一維呢?
和Flex同樣分爲父容器的富餘空間的管理和子item的富餘空間的管理。
gird-container富餘空間管理API
gird-item富餘空間管理API
一樣的justify
是負責行向富餘空間的管理,align
是負責縱向的富餘空間的管理。
而且不管是justify
仍是align
屬性,不管是父容器(grid-container
)仍是grid-item
,它們各自的justify和align屬性的值都存在start/end/center/stretch
四個選項。
grid-container和grid-item之間惟一須要注意的是,grid-container的justify和align屬性還存在3個grid-item元素所不具備的屬性值:space-around/space-between/space-evenly
[danger] 注意: justify-content/align-content/justify-items/align-items 都是grid-container下的css屬性,雖然justify-items/align-items是針對grid-item的富餘空間管理,但請注意,
-items
是有一個s
的,這意味着這個css屬性是對全部grid-item生效的,若是你要單獨對某個grid-item進行設置,請使用grid-self
另外咱們若只在grid-template-columns中設置grid-line,也能達到網格項自適應網格容器的效果(相似於justify-content:stretch
,或則使用1fr等分單位)
若是你「畫」的元素的長寬超過了你「畫」的網格的網格線行數或列數,Grid系統會自動爲你補充上。但網格軌道的寬度是否知足你的需求須要你本身去留意。
當你既不在一個grid-container中用grid-template-areas
給一個grid-item設置長寬又不在grid-item內部用grid-column/row
本身去設置(而且不設置本身的名字),那麼,這個grid-item會被當作一個網格單元格來繪製,並按照橫向或縱向的方式依次放置進閒置的網格空間。
當採用grid-template-areas
的渲染方式時,多餘的item會被截取掉
當採用grid-auto-flow
自動放置的時候
注意: 此時請不要給item取名,由於這樣會產生不可控的佈局現象
display:grid
時,它會獨佔一行
grid-container雖然會block化,但僅此而已
margin-box
,比border-box
還牛逼!
=== End ===