摘要:基于網(wǎng)格線的占位區(qū)網(wǎng)格中的單元格是有網(wǎng)格線劃分出來的,那么在網(wǎng)格布局中,同樣可以使用網(wǎng)格線來給子元素設(shè)置占位區(qū)域。也就是說這四條網(wǎng)格線間的區(qū)域是一個單元格。
CSS Grid布局對于我等來說就是一個全新的布局,但國外很多同行朋友已對這種布局做了全面的探知。前面花了兩篇內(nèi)容(《CSS Grid布局:什么是網(wǎng)格布局》和《[CSS Grid布局:瀏覽器開啟CSS Grid Layout]http://segmentfault.com/blog/younglaker/1190000002443795)》)為這篇文章做足了鋪墊。或許你想知道的是如何使用?各位看官不用太急,接下來通過各種實例向大家闡述CSS Grid布局,讓我們一起領(lǐng)略其強大的魅力。
當然,接下來的示例不是我想出來的,這是我挖出來的,主要制作者是Rachel Andrew。在繼續(xù)往下閱讀之前,我們應(yīng)該一起感謝Rachel Andrew,感謝他給我們提供這么多有關(guān)于CSS Grid Layout的示例。同時如果你想在你的瀏覽器中能正常的演示接下的有關(guān)于CSS Grid Layout的示例,你得先保證你已閱讀了《CSS Grid布局:瀏覽器開啟CSS Grid Layout》一文,并且按照文章中的方法進行過設(shè)置。如果沒有話,或許你將看不到下面示例的效果。咱也不糾結(jié)了,開始實戰(zhàn)吧。
定義一個網(wǎng)格可以給父容器的display屬性設(shè)置為grid或者inline-grid來定義一個網(wǎng)格。這樣你就可以使用grid-template-columns和grid-template-rows屬性來創(chuàng)建一個網(wǎng)格。
在這個示例中,創(chuàng)建了一個三列網(wǎng)格,其中三個列的列寬是100px,并且指定列與列之間的間距為10px。同時網(wǎng)格具有三行,每行的高度是自動的,另外行與行之間的間距是10px。簡單點說就是一個三行三列的網(wǎng)格,并且列與列之間,行與行之間的間距都是10px。
此時瀏覽器將容器中的子元素自動填入到每個網(wǎng)格單元格中,當超過指定的列數(shù)時,網(wǎng)格會自動換行,如下圖所示:
看看代碼是怎么完成的:
ABCDEFGHIJ
body { padding: 50px; } .wrapper { display: grid; grid-template-columns: 100px 10px 100px 10px 100px; grid-template-rows: auto 10px auto; } .box { background-color: #444; color: #fff; font-size: 150%; padding: 20px; } .b,.d,.g,.i { background-color:red; } 定義網(wǎng)格的關(guān)鍵代碼: .wrapper { display: grid; grid-template-columns: 100px 10px 100px 10px 100px; grid-template-rows: auto 10px auto; }
在線案例
從示例效果中可以看出,.wrapper容器通過display:grid;定義成網(wǎng)格,并且使用grid-template-columns:100px 10px 100px 10px 100px;和grid-template-rows:auto 10px auto;指定了列寬、列間距,行高和行間距等。對應(yīng)的子元素.a、.c、.e、.f、.h和.j列寬度為100px(也就是黑色區(qū)域),而.b、.d、.g和.i是列與列的間距10px(也就是紅色區(qū)域)。而且當子元素在一行填不下時,就會自動換行,如.f~.j自動換到第二行顯示。
基于網(wǎng)格線的占位區(qū)網(wǎng)格中的單元格是有網(wǎng)格線劃分出來的,那么在網(wǎng)格布局中,同樣可以使用網(wǎng)格線來給子元素設(shè)置占位區(qū)域。基于上例,在容器.wrapper下面有十個子元素.a~.j,接下來看如何通過基于網(wǎng)格線來實現(xiàn)各種在網(wǎng)格布局中的區(qū)域。
對于網(wǎng)格線,在網(wǎng)格布局中有兩種,一種是列線,另一種是行線。對應(yīng)的個網(wǎng)格單元格都有列線起始線(grid-column-start)、列線終止線(grid-column-end)和行線起始線(grid-row-start)、行線終止線(grid-row-end)。
如上圖所示,紫色的是列網(wǎng)格線,而藍色的是行網(wǎng)格線,其中高亮大紅的那個單元格列起始線是line3,列終止線是line4,行起始線是line3,行終止線是line4。也就是說這四條網(wǎng)格線間的區(qū)域是一個單元格。
接下來,看一個示例,如何用網(wǎng)格線實現(xiàn)單元格占位區(qū)域:
ABCDEFGHIJ
body { padding: 50px; } .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-start: 1; grid-column-end: 2; grid-row-start: 1; grid-row-end: 2; } .b { grid-column-start: 3; grid-column-end: 4; grid-row-start: 1; grid-row-end: 2; } .c { grid-column-start: 5; grid-column-end: 6; grid-row-start: 1; grid-row-end: 2; } .d { grid-column-start: 7; grid-column-end: 8; grid-row-start: 1; grid-row-end: 2; } .e { grid-column-start: 1; grid-column-end: 2; grid-row-start: 3; grid-row-end: 4; } .f { grid-column-start: 3; grid-column-end: 4; grid-row-start: 3; grid-row-end: 4; } .g { grid-column-start: 5; grid-column-end: 6; grid-row-start: 3; grid-row-end: 4; } .h { grid-column-start: 7; grid-column-end: 8; grid-row-start: 3; grid-row-end: 4; } .i { grid-column-start: 1; grid-column-end: 2; grid-row-start: 5; grid-row-end: 6; } .j { grid-column-start: 3; grid-column-end: 4; grid-row-start: 5; grid-row-end: 6; }
在線案例
這種方式可以讓你的子元素.a~.b定位在任何位置,比如說,你現(xiàn)在想要.a和.f對換,那么很簡單就能實現(xiàn):
.a{ grid-column-start: 3; grid-column-end: 4; grid-row-start: 3; grid-row-end: 4; background:red; } .f { grid-column-start: 1; grid-column-end: 2; grid-row-start: 1; grid-row-end: 2; background:orange; }
運行的效果如下:
在線案例
網(wǎng)格線簡寫前面兩個示例向大家演示了如何用網(wǎng)格線實現(xiàn)布局,可以說是簡單方便,唯一就是寫代碼麻煩,要什么grid-column-start、grid-column-end等等。其實有一種簡寫方式,可以讓你不再痛苦。
網(wǎng)格線的簡寫方式,其實就是grid-column和grid-row的start與end值合并在一起,兩者之間用/來分隔。比如:
.a{ grid-column-start: 1; grid-column-end: 2; grid-row-start: 1; grid-row-end: 2; }
可以寫成:
.a{ grid-column: 1 / 2; grid-row: 1 / 2; }
這樣一來,上例的代碼,我們就可以換成簡寫方式:
.a{ grid-column: 1 / 2; grid-row: 1 / 2; } .b { grid-column: 3 / 4; grid-row: 1 / 2; } .c { grid-column: 5 / 6; grid-row: 1 / 2; } .d { grid-column: 7 / 8; grid-row: 1 / 2; } .e { grid-column: 1 / 2; grid-row: 3 / 4; } .f { grid-column: 3 / 4; grid-row: 3 / 4; } .g { grid-column: 5 / 6; grid-row: 3 / 4; } .h { grid-column: 7 / 8; grid-row: 3 / 4; } .i { grid-column: 1 / 2; grid-row: 5 / 6; } .j { grid-column: 3 / 4; grid-row: 5 / 6; }
效果依舊:
在線案例
網(wǎng)格區(qū)域?qū)崿F(xiàn)元素占位區(qū)在CSS Grid Layout中有一個關(guān)鍵東東,網(wǎng)格區(qū)域grid-area。網(wǎng)格區(qū)域他是由四條網(wǎng)格線組成的一個空間,簡單點說,一個網(wǎng)格單元格也是一個網(wǎng)格區(qū)域(因為他也是有四條網(wǎng)格線組成的一個空間),多個單元格合并在一起也是一個網(wǎng)格區(qū)域。這樣一來,要實現(xiàn)上例的效果,還可以使用網(wǎng)格區(qū)域grid-area來完成。
在具體做案例之前,先簡單的了解,網(wǎng)格區(qū)域是由哪幾條網(wǎng)格線組成。組成網(wǎng)格區(qū)域的網(wǎng)格線順序是row-start/column-start/row-end/column-end。每個網(wǎng)格線之間也是使用/來分隔。
接下來將上例使用網(wǎng)格區(qū)域改造一下,改造之后的樣式代碼如下:
.wrapper { display: grid; grid-template-columns: 100px 10px 100px 10px 100px 10px 100px; grid-template-rows: auto 10px auto 10px auto; } .a{ grid-area: 1 / 1 / 2 / 2; } .b { grid-area: 1 / 3 / 2 /4; } .c { grid-area: 1 / 5 / 2 / 6; } .d { grid-area: 1 / 7 / 2 / 8; } .e { grid-area: 3 / 1 / 4 / 2; } .f { grid-area: 3 / 3 / 4 / 4; } .g { grid-area: 3 / 5 / 4 / 6; } .h { grid-area: 3 / 7 / 4 / 8; } .i { grid-area: 5 / 1 / 6 / 2; } .j { grid-area: 5 / 3 / 6 / 4; }
效果如下:
在線案例
是不是讓你的世界變得更簡單了。
總結(jié)在這篇文章中主要通過幾個簡單的實例向大家演示了如何使用定義網(wǎng)格,又是如何使用網(wǎng)格線實現(xiàn)單元格布局,可以說這樣的布局弱爆了,和表格的單元格沒有什么不一樣嘛,但現(xiàn)實是殘酷的,我們的布局是星羅萬像,沒有這么簡單。不是說CSS Grid Layout很強大嘛,那又要如何實現(xiàn)一些復(fù)雜的布局呢?敬請觀注下章分解,向大家闡述如何實現(xiàn)單元格合并效果。
via w3cplus
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/110978.html
摘要:網(wǎng)格單元格網(wǎng)格單元格是指四條網(wǎng)格線之間的空間。所以它是最小的單位,就像表格中的單元格。圖中突出顯示的網(wǎng)格區(qū)域是行線和列線之間的區(qū)域,其主要包括了四個網(wǎng)格單元格。 CSS Grid現(xiàn)在已經(jīng)被W3C納入到CSS3的一個布局模塊當中,被稱為CSS Grid Layout Module。而我們較為熟悉的還是將其想像成網(wǎng)格或者柵格,也就是早期的960gs。不管是網(wǎng)格還是柵格或者現(xiàn)在的CSS Gr...
摘要:簡單點說,就是由單元格慢慢過渡到具有合并單元格的布局在腦海中想想曾經(jīng)愛過的。基于網(wǎng)格線使用關(guān)鍵詞實現(xiàn)單元格合并在布局中除了使用網(wǎng)格線合并單元格之外,還可以使用關(guān)鍵詞來實現(xiàn)單元格合并。 《CSS Grid布局:網(wǎng)格單元格布局》一文中通過一些簡單的實例介紹了如何給容器定義網(wǎng)格,并且怎么使用網(wǎng)格線或者網(wǎng)格區(qū)域來實現(xiàn)單元格這樣的簡單的布局。在文章結(jié)尾之處也提到過,這樣的單元格如同表格一樣,僅僅...
摘要:重復(fù)網(wǎng)格區(qū)域的名稱導(dǎo)致內(nèi)容跨越這些單元格。中間一排將由兩個區(qū)域,一個是空單元格,一個區(qū)域組成。你可以使用任意數(shù)量的相鄰的點來聲明單個空單元格。只要這些點之間沒有空隙隔開,他們就代表一個單獨的單元格。? CSS Grid 布局是 CSS 中最強大的布局系統(tǒng)。與 flexbox 的一維布局系統(tǒng)不同,CSS Grid 布局是一個二維布局系統(tǒng),也就意味著它可以同時處理列和行。通過將 CSS 規(guī)則應(yīng)用...
摘要:網(wǎng)格線網(wǎng)格線有橫線和縱線,縱橫交錯的線就將網(wǎng)格容器切割成了最小的單元單元格。單元格圖中綠色背景的塊就是單元格,網(wǎng)格布局的最小計量單位,該容器一共有個單元格。 下一篇 grid 布局入門 Grid,真的布局神器。Css在引入Flex布局和Grid布局兩個模塊后,才真正有了布局的概念。最初的table布局不知道是神馬鬼,再到 float 滿天飛,可能還要使用abosulte來實現(xiàn)頁面的布局...
摘要:瀏覽器已經(jīng)宣布將支持標準的語法,但暫未支持。重復(fù)網(wǎng)格區(qū)域的名稱導(dǎo)致內(nèi)容擴展到這些單元格。點號表示一個空單元格。中間一行將由兩個區(qū)域一個空單元格和一個區(qū)域組成。只要這些點號之間沒有空格,他們就代表了一個單一的單元格。 by Chris House 譯者:若愚老師想要更好的閱讀體驗可在饑人谷技術(shù)博客 查看原文 CSS 網(wǎng)格布局(Grid Layout) 是CSS中最強大的布局系統(tǒng)。 這是一...
閱讀 4031·2021-11-22 13:53
閱讀 1733·2021-09-23 11:52
閱讀 2449·2021-09-06 15:02
閱讀 965·2019-08-30 15:54
閱讀 913·2019-08-30 14:15
閱讀 2394·2019-08-29 18:39
閱讀 666·2019-08-29 16:07
閱讀 428·2019-08-29 13:13