願只有乙個Grid Layout

2021-09-11 09:56:27 字數 2434 閱讀 6795

css3新增布局三劍客之grid layout

相比較multi-columns layout 和flexible box layout,grid layuot更像是兩者的結合,當然這裡並不是說grid layout可以取代二者。

另外grid layout與當前非常火熱的flexible box layout有乙個本質上的區別就是維度不一樣。在使用flexible box layout時,我們只能通過flex-direction定義主軸沿著某一方向,而在grid layout中截然不同。

下面一步步去了解grid layout的核心用法:

1、巨集觀角度

巨集觀上可以將grid layout看成由行和列組成,這一點可以模擬html中的table標籤,接下來用grid語法宣告乙個3行3列的結構。

.grid 

.grid > div

:nth-child(odd)

.grid > div

:nth-child(even)

複製**

通過設定display屬性為grid或者inline-grid,可以使得該元素變成grid布局容器,這基本是新增布局宣告的乙個通用套路。

上述grid屬性是乙個復合屬性,等價下面的**。

.grid 

複製**

fr是grid layout中新增的單位,可以模擬flexible box layout中的flex-grow屬性。

上述九宮格中的每乙個小格仔在grid中有乙個專門的術語 -- grid cell。

2、微觀角度

從微觀的角度去看grid layout,首先你需要了解另乙個術語 -- grid line。

不知道讀者們有沒有看過製作豆腐的過程,其中有乙個步驟是用線將整塊的豆腐割開,那條線和上述的grid line是一樣一樣的。

那麼我們前面所說的行與列就需要用乙個更專業的術語來描述 -- grid track。

grid track實際上就是相鄰的兩條grid line所形成的區域。

在grid layout中是看不見grid line的,但是可以使用它,它預設是數字編號的形式,還記得上面的九宮格布局嗎?通過設定display和grid屬性,只是將容器劃分了結構,但是並沒有設定子元素的放置方式,幸好grid layout會為每乙個子元素設定乙個預設位置,例如第一行第一列的元素會這樣設定。

/* grid-area: grid-row-start / grid-column-start / grid-row-end / grid-column-end */

grid-area: 1 / 1 / 2 / 2;

複製**

上述的數字就是grid line的編號,並且它還支援自定義命名。

.grid 

.grid > div

:nth-child(1)

複製**

3、grid area

grid area也是乙個比較重要的術語, 它主要由乙個或者多個grid cell組成。前面的例子中,我們已經看到可以通過grid line為grid area分配空間,並且它還有另一種使用的方式。

.grid 

.grid > div

:nth-child(1)

.grid > div

:nth-child(2)

.grid > div

:nth-child(3)

.grid > div

:nth-child(4)

複製**

同樣是上述的例子,我們可以這樣放置子元素,是不是特別的友好。

4、絕對定位在grid layout中的表現

絕對定位大家應該很熟悉,其位置主要由包含塊或者初始化包含塊決定,通常我們都是通過設定父級元素的position屬性來確定包含塊,但是在grid layout中可以通過grid-area屬性達到同樣的效果。

.grid 

.demo1

複製**

5、其它

理解上面介紹的幾個術語和用法之後,基本上grid layout也沒有那麼神秘了。另外,例如grid item之間的間隙以及它們的排列方式,基本上和flexible box layout大同小異。

不過grid layout中還有很多好玩的知識點,例如margin凹陷的特性在grid layout中並不會發生。這些就留給讀者自己去探索吧。

為什麼會起這個標題呢?主要是因為現在大部分的ui元件庫基本上都提供grid元件,就拿比較流行的bootstrap元件庫來說,grid元件的實現:

而css3新增的這個grid layout相比較這些實現方式,可以說是非常優秀了。相信不久我們可以告別grid-framework,只有乙個css3的grid layout。

願只有乙個Grid Layout

css3新增布局三劍客之grid layout 相比較multi columns layout 和flexible box layout,grid layuot更像是兩者的結合,當然這裡並不是說grid layout可以取代二者。另外grid layout與當前非常火熱的flexible box l...

借我,許乙個願

情人節快樂,快樂或不快樂,他們說都是自己的感覺。我怎麼沒這種覺悟?回家的路上有個朋友陪我聊了一路,我說,我們是同一類人,呵呵。有一類人,彼此認識,卻怎麼也不熟悉,不能說太多,不能看太多,也不能了解太多。所以,最後我們只能做朋友,做再也簡單不過的朋友。有一類人,彼此熟悉,不用說太多,不用看太多,也不用...

借我,許乙個願

情人節快樂,快樂或不快樂,他們說都是自己的感覺。我怎麼沒這種覺悟?回家的路上有個朋友陪我聊了一路,我說,我們是同一類人,呵呵。有一類人,彼此認識,卻怎麼也不熟悉,不能說太多,不能看太多,也不能了解太多。所以,最後我們只能做朋友,做再也簡單不過的朋友。有一類人,彼此熟悉,不用說太多,不用看太多,也不用...