(譯)我學(xué)到的關(guān)于CSS 網(wǎng)格布局的一些事情

以下是Oliver Williams的客座帖子。 Oliver一直在使用CSS網(wǎng)格布局闻坚,并收獲良多。 在這篇文章中兢孝,他將討論他在這段旅程中領(lǐng)悟到的不同的概念窿凤。 我喜歡這樣的想法,通過短小的例子盡可能地學(xué)習(xí)關(guān)于網(wǎng)格布局中的形形色色的西潘。 這使得學(xué)習(xí)整個(gè)過程不會那么嚇人卷玉。
CSS網(wǎng)格大約到2017年早期會被設(shè)置在瀏覽器中。在那之前喷市,如果你想使用相种,你需要啟用網(wǎng)格工作(除了在Firefox Nightly默認(rèn)情況下啟用)。 Chrome Canary目前具有最佳表現(xiàn)品姓。 同時(shí)寝并,F(xiàn)irefox有一個(gè)非常寶貴的附加組件叫CSS網(wǎng)格檢查器,它可以顯示網(wǎng)格的線腹备。 它是目前唯一有這樣一個(gè)工具的瀏覽器衬潦。
在Chrome中,在地址欄中輸入“chrome://flags”植酥,找到“啟用實(shí)驗(yàn)性網(wǎng)絡(luò)平臺功能(#enable-experimental-web-platform-features)”镀岛,然后點(diǎn)擊啟用。 IE和Edge具有與當(dāng)前規(guī)范不同的舊的實(shí)現(xiàn)方法友驮,因此不推薦在此時(shí)間點(diǎn)對網(wǎng)格進(jìn)行實(shí)驗(yàn)漂羊。

你不能有俄羅斯方塊形的網(wǎng)格區(qū)域

你會很快地做自己工作。



您的網(wǎng)格區(qū)域只能是矩形(如左)卸留,而不是任意多邊形(如右邊)走越。

網(wǎng)格設(shè)計(jì)被用于flexbox,而不是去替代flexbox

網(wǎng)格布局 grid和彈性布局 flexbox都可以以類似的方式去實(shí)現(xiàn)功能耻瑟。 你可能已經(jīng)看到人們使用flexbox來構(gòu)建網(wǎng)格系統(tǒng)旨指,但這不是flexbox的設(shè)計(jì)目的赏酥。 這是值得閱讀Jake Archibald的博客文章Don't use flexbox for overall page layout
一個(gè)快速的想法是:
Flexbox用于一維布局(行或列)谆构。
Grid是二維布局裸扶。
或者如Rachel Andrews 所說
Flexbox本質(zhì)上是用于在單維度中布局項(xiàng)目 ( in a row OR a column)。 網(wǎng)格用于二維中的項(xiàng)目布局 (rows AND columns)低淡。
它們也可以組合姓言。 您可以將網(wǎng)格項(xiàng)轉(zhuǎn)換為flex容器。 您可以將flex項(xiàng)目轉(zhuǎn)換為網(wǎng)格蔗蹋。
讓我們舉一個(gè)有用的例子。 我們想要在一個(gè)網(wǎng)格項(xiàng)內(nèi)垂直居中文本囱淋,但我們想要背景(無論是顏色猪杭,漸變還是圖像)覆蓋項(xiàng)目的整個(gè)網(wǎng)格區(qū)域。 我們可以使用一個(gè)值為 centeralign-items屬性妥衣,但此時(shí)背景是不會填充整個(gè)項(xiàng)目區(qū)域的皂吮。 align-items的默認(rèn)值是stretch , 只要將它設(shè)置為任何其他值税手,它就不再填充該空間蜂筹。 讓我們將它設(shè)置為stretch并將我們的網(wǎng)格項(xiàng)轉(zhuǎn)換為flex容器。

.grid {
  align-items: stretch;
}
.griditem {
  display: flex;
  align-items: center;
}

使用負(fù)行號非常有用

設(shè)想一個(gè)具有12列網(wǎng)格的現(xiàn)代CSS柵格框架芦倒。 在小屏幕上艺挪,而不是減少列數(shù),內(nèi)容顯示的寬度為十二列總和兵扬,給人一個(gè)全寬列的印象麻裳。
你可以用網(wǎng)格做同樣的事情:

/* For small screens */
.span4, .span6, .spanAll {
  grid-column-end: span 12;
}

/* For large screens */
@media (min-width: 650px) {
  .span4 {
    grid-column-end: span 4;
  }
  .span6 {
    grid-column-end: span 6;
  }
}

上面這種方法沒有問題。 然而使用CSS網(wǎng)格器钟,重新定義列數(shù)也是很容易的津坑。 通過使用-1,可以確保你的內(nèi)容始終可以實(shí)現(xiàn)想要的結(jié)果傲霸。

/* For small screens */
.span4, .span6, .spanAll {
  grid-column-end: -1;
}

對于大屏幕疆瑰,您可能需要多達(dá)12列。 對于移動設(shè)備昙啄,任何地方之間都可以是1到4列穆役。 我們可以很容易地通過媒體查詢來更改grid-template-columns的值。

.grid {
  grid-template-columns: 1fr 1fr;
}

@media (min-width: 700px) {
  .grid {
    grid-template-columns: repeat(12, 1fr);
  }
}

有可能一些元素跟衅,我們想跨越整個(gè)視口的所有屏幕大小孵睬,如可能的頁眉header,頁腳footer或一些主圖伶跷。
對于小屏幕掰读,我們可以寫:

.wide {
  grid-column: 1 / 3; /* start at 1, end at 3 */
}

但是秘狞,一旦我們進(jìn)行了媒體查詢,這些元素將只覆蓋十二列的前兩列蹈集。 我們可以在同一個(gè)媒體查詢中包括新的期望:grid-column-end:13烁试,但是有一個(gè)更容易的方法。 只要將結(jié)束值設(shè)置為 -1拢肆,它將涵蓋所有列减响,很多時(shí)候已經(jīng)這么做了。 例如:

.wide, .hero, .header, .footer {
  grid-column: 1 / -1;
}

完整演示:
HTML:

<div class="gridcontainer">
  <div class="griditem1">spans all columns</div>
</div>

CSS:

.gridcontainer {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: auto;
}
.griditem1 {
  grid-column-start: 1;
  grid-column-end: -1; 
/* will always span to the last line; no matter how many columns there are!*/
/* grid-column-end: 5; would work below 600px to make my div span all columns but not once I have added a column with a media query. I could adjust grid-column-end to 6 within the media query but it is far easier to use -1 */ 
  background-color: green;
  height: 200px;
  justify-contents: center;  
  font-family: helvetica, arial;
  text-align: center;
}
@media (min-width: 600px) {
  .gridcontainer {
  grid-template-columns: repeat(12, 1fr); /* I have added extra columns at larger screen sizes!! */
  }
}

未完待續(xù)郭怪。支示。。

https://css-tricks.com/things-ive-learned-css-grid-layout/
https://css-tricks.com/snippets/css/complete-guide-grid/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鄙才,一起剝皮案震驚了整個(gè)濱河市颂鸿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攒庵,老刑警劉巖嘴纺,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浓冒,居然都是意外死亡栽渴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門稳懒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闲擦,“玉大人,你說我怎么就攤上這事僚祷》鹬拢” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵辙谜,是天一觀的道長俺榆。 經(jīng)常有香客問我,道長装哆,這世上最難降的妖魔是什么罐脊? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蜕琴,結(jié)果婚禮上萍桌,老公的妹妹穿的比我還像新娘。我一直安慰自己凌简,他們只是感情好上炎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般藕施。 火紅的嫁衣襯著肌膚如雪寇损。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天裳食,我揣著相機(jī)與錄音矛市,去河邊找鬼。 笑死诲祸,一個(gè)胖子當(dāng)著我的面吹牛浊吏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播救氯,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼找田,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了着憨?” 一聲冷哼從身側(cè)響起午阵,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎享扔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體植袍,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惧眠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了于个。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氛魁。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厅篓,靈堂內(nèi)的尸體忽然破棺而出秀存,到底是詐尸還是另有隱情,我是刑警寧澤羽氮,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布或链,位于F島的核電站,受9級特大地震影響档押,放射性物質(zhì)發(fā)生泄漏澳盐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一令宿、第九天 我趴在偏房一處隱蔽的房頂上張望叼耙。 院中可真熱鬧,春花似錦粒没、人聲如沸筛婉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爽撒。三九已至入蛆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匆浙,已是汗流浹背安寺。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留首尼,地道東北人挑庶。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像软能,于是被迫代替她去往敵國和親迎捺。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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