grid實(shí)現(xiàn)響應(yīng)式布局

一行 CSS 代碼實(shí)現(xiàn)響應(yīng)式布局 – 使用 Grid 實(shí)現(xiàn)的響應(yīng)式布局

在這篇文章中,我將教你如何使用 CSS Grid(網(wǎng)格) 布局來創(chuàng)建一個超酷的圖像網(wǎng)格,它會根據(jù)屏幕的寬度改變列的數(shù)量盔沫,以實(shí)現(xiàn)響應(yīng)式布局四康。

而這篇文章中最漂亮的部分是:添加一行 CSS 代碼即可實(shí)現(xiàn)響應(yīng)式布局。

這意味著我們不必通過丑陋的類名(即?col-sm-4洪碳,col-md-8)來混淆 HTML 递览,或者為每一個屏幕尺寸創(chuàng)建媒體查詢。

現(xiàn)在就讓讓我們開始吧瞳腌!

設(shè)置

對于本文绞铃,我們將繼續(xù)使用?5分鐘學(xué)會 CSS Grid 布局?文章中使用的網(wǎng)格。然后我們將在文章的最后添加圖片嫂侍。以下是我們的初始網(wǎng)格的外觀:

這是HTML:

HTML 代碼:

?<div class="container>

<div>1</div>

<div>2</div>

<div>3</div>

<div>4</div>

<div>5</div>

<div>6</div>

</div>


還有相應(yīng)的 CSS :

CSS 代碼:

.container {

? ? display: grid;

? ? grid-template-columns: 100px 100px 100px;

? ? grid-template-rows: 50px 50px;

}

注意:這個例子也有一些基本的樣式儿捧,比如容器寬度,網(wǎng)格間隔挑宠,背景顏色什么的菲盾,我不會在這里介紹,因為它與 CSS Grid 沒有任何關(guān)系各淀。

如果這段代碼讓你感到困惑懒鉴,我建議你閱讀?5分鐘學(xué)會 CSS Grid 布局?這篇文章,在那里我解釋了 Grid 布局模塊的基礎(chǔ)知識碎浇。

讓我們開始將 列 實(shí)現(xiàn)響應(yīng)式布局疗我。

使用等分(fr)單位實(shí)現(xiàn)基本的響應(yīng)式

CSS Grid 帶來了一個全新的值,稱為等分單位南捂,即?fr?吴裤。它允許你將容器可用空間分成你想要的多個等分空間。

讓我們將每個列更改為一個等分單位寬度溺健。

CSS 代碼:

.container {

? ? display: grid;

? ? grid-template-columns: 1fr 1fr 1fr;

? ? grid-template-rows: 50px 50px;

}

這里發(fā)生的事情是麦牺,將整個網(wǎng)格的寬度分成三等分钮蛛,每一列都占據(jù)一個?fr?單位。結(jié)果是:

如果我們將?grid-template-columns?的值更改為?1fr 2fr 1fr剖膳,那么第 2 列現(xiàn)在將是另外 2 列的 2 倍魏颓。總寬度現(xiàn)在是 4 等分吱晒,第 2 列占據(jù)了 2 等分甸饱,而其他 2 列則各占 1 等分÷乇簦看起來類似這樣:

換句話說叹话,等分單位值使你可以非常容易地改變列的寬度。

更加高級的響應(yīng)式

但是墩瞳,上面的例子并沒有給我們想要的響應(yīng)式驼壶,因為這個網(wǎng)格總是包含 3 列。我們希望我們的網(wǎng)格根據(jù)容器的寬度來改變列的數(shù)量喉酌。要做到這一點(diǎn)热凹,你必須學(xué)習(xí)三個新的概念。

repeat()

我們將從?repeat()?函數(shù)開始泪电。 這是指定列和行更強(qiáng)大的方法般妙。 讓我們把原來的網(wǎng)格改成使用?repeat()?:

CSS 代碼:

.container {

? ? display: grid;

? ? grid-template-columns: repeat(3, 100px);

? ? grid-template-rows: repeat(2, 50px);

}

換句話說,repeat(3, 100px)?與?100px 100px 100px?相同相速。 第一個參數(shù)指定了你想要的列數(shù)或行數(shù)碟渺,第二個參數(shù)指定了它們的寬度,所以上面的代碼將為我們創(chuàng)建和第一個一樣的布局和蚪。

auto-fit (自適應(yīng))

然后是自適應(yīng)止状。讓我們跳過固定數(shù)量的列,而是用?auto-fit?取代 3 攒霹。

CSS 代碼:

.container {

? ? display: grid;

? ? grid-gap: 5px;

? ? grid-template-columns: repeat(auto-fit, 100px);

? ? grid-template-rows: repeat(2, 100px);

}

這會達(dá)到以下效果:

你會看到怯疤,現(xiàn)在這個網(wǎng)格已經(jīng)可以通過容器的寬度來改變列的數(shù)量。

它只是試圖盡可能多地將?100px?寬的列排列在容器中催束。

但是集峦,如果我們將所有列硬編碼為?100px?,我們永遠(yuǎn)得不到我們想要的靈活性抠刺,因為它們很少會加起來正好等于容器的寬度塔淤。正如你在上面的 gif 圖中所看到的,網(wǎng)格通常會在右側(cè)留下空白區(qū)域速妖。

minmax()

為了解決這個問題高蜂,我們需要的最后一方法是?minmax()。我們只需用?minmax(100px, 1fr)?替換?100px?即可罕容。這是最終的CSS备恤。

CSS 代碼:

.container {

? ? display: grid;

? ? grid-gap: 5px;

? ? grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));

? ? grid-template-rows: repeat(2, 100px);

}

注意稿饰,所有的響應(yīng)都發(fā)生在一行 CSS 中。

這會達(dá)到以下效果:

正如你們所見露泊,這樣很完美喉镰。minmax()?函數(shù)定義大于或等于?min?且小于或等于?max?的大小范圍。

所以現(xiàn)在列的寬度至少?100px?惭笑。但是侣姆,如果有更多的可用空間,網(wǎng)格將簡單地分配給每個列沉噩,因為列的值變成了一個等分單位?1fr?捺宗,而不是?100px?。

添加圖片

現(xiàn)在最后一步是添加圖片屁擅。 這與 CSS Grid 沒有任何關(guān)系偿凭,但是我們還是要來看看代碼产弹。

我們將在每個網(wǎng)格項內(nèi)添加一個?img?標(biāo)簽派歌。

HTML 代碼:

<div><img src="img/foret.jpg"/></div>

為了使圖像適合該網(wǎng)格項,我們將它設(shè)置為與網(wǎng)格項一樣寬和高痰哨,然后使用?object-fit: cover;胶果。這將使圖片覆蓋整個容器,如果需要的話斤斧,瀏覽器會裁剪該圖片早抠。

CSS 代碼:

.container > div > img {

? ? width: 100%;

? ? height: 100%;

? ? object-fit: cover;

}

效果如下:


就是這么簡單!你已經(jīng)了解了 CSS Grid 中最復(fù)雜的概念之一撬讽,所以后面請自己動手吧蕊连。

瀏覽器支持

在我們結(jié)束之前,我還需要提及瀏覽器的支持游昼。在寫這篇文章的時候甘苍,占全球 77% 的網(wǎng)站流量的瀏覽器支持CSS Grid,而且正在攀升烘豌。

我相信 2018 年將是 CSS Grid 大量應(yīng)用的一年载庭。很快會得到突破,并將成為前端開發(fā)人員的必備技能廊佩。就像過去幾年在 CSS Flexbox 所發(fā)生的一樣囚聚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市标锄,隨后出現(xiàn)的幾起案子顽铸,更是在濱河造成了極大的恐慌,老刑警劉巖料皇,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谓松,死亡現(xiàn)場離奇詭異簸淀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)毒返,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門租幕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拧簸,你說我怎么就攤上這事劲绪。” “怎么了盆赤?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵贾富,是天一觀的道長。 經(jīng)常有香客問我牺六,道長颤枪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任淑际,我火速辦了婚禮畏纲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘春缕。我一直安慰自己盗胀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布锄贼。 她就那樣靜靜地躺著票灰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宅荤。 梳的紋絲不亂的頭發(fā)上屑迂,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音冯键,去河邊找鬼惹盼。 笑死,一個胖子當(dāng)著我的面吹牛琼了,可吹牛的內(nèi)容都是我干的逻锐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雕薪,長吁一口氣:“原來是場噩夢啊……” “哼昧诱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起所袁,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤盏档,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后燥爷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜈亩,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懦窘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稚配。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畅涂。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖道川,靈堂內(nèi)的尸體忽然破棺而出午衰,到底是詐尸還是另有隱情,我是刑警寧澤冒萄,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布臊岸,位于F島的核電站,受9級特大地震影響尊流,放射性物質(zhì)發(fā)生泄漏帅戒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一崖技、第九天 我趴在偏房一處隱蔽的房頂上張望逻住。 院中可真熱鬧,春花似錦响疚、人聲如沸鄙信。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至银受,卻和暖如春践盼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宾巍。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工咕幻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顶霞。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓肄程,卻偏偏與公主長得像,于是被迫代替她去往敵國和親选浑。 傳聞我的和親對象是個殘疾皇子蓝厌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

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

  • 前言 溫馨提示:本文較長,圖片較多古徒,本來是想寫一篇 CSS 布局方式的拓提,但是奈何 CSS 布局方式種類太多并且實(shí)現(xiàn)...
    sunshine小小倩閱讀 3,137評論 0 59
  • 簡介 CSS Grid布局 (又名"網(wǎng)格"),是一個基于二維網(wǎng)格布局的系統(tǒng)隧膘,旨在改變我們基于網(wǎng)格設(shè)計的用戶界面方式...
    咕咚咚bells閱讀 2,495評論 0 4
  • 零基礎(chǔ)如何自學(xué)Python 程序員在普通人眼里就像魔法師代态,一個腳本輕...
    java鍵盤閱讀 93評論 0 0
  • 提高代碼編寫效率寺惫,離不開快捷鍵的使用,Webstorm擁有豐富的代碼快速編輯功能蹦疑,你可以自由配置功能快捷鍵西雀。 快捷...
    泰格先森閱讀 290評論 0 1
  • 整圖畫風(fēng)簡單,有童趣味歉摧,意示畫者思想不太復(fù)雜蒋搜,與實(shí)際年齡偏小。 先畫房判莉,房大豆挽,意示注重家庭,有炊煙券盅,希望家庭溫暖帮哈。...
    1122_2934閱讀 328評論 1 0