搜尋
首頁web前端css教學淺談CSS3 Grid網格佈局(display: grid)的用法

淺談CSS3 Grid網格佈局(display: grid)的用法

【推薦教學:CSS影片教學 】

我們一起來學習CSS 的Grid版面是如何使用的

透過這篇文章以後等我們自己做UI函式庫的時候就會多了一種做法。

我們來使用CSS Grid來建立一個超酷的圖像網格圖,它可以根據螢幕的寬度來改變列的數量。最精彩的地方在於:所有的回應特性都被加入到了一行css程式碼中。這意味著我們不必將HTML與醜陋的類別名稱(如col-sm-2, col-md-4)混雜在一起,也不必為每個螢幕建立媒體查詢。

淺談CSS3 Grid網格佈局(display: grid)的用法

我們先根據這個最基本的樣式來分析grid,然後再進行拓展。接下來我將程式碼分享給大家:

html程式碼:

<div>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
</div>

css程式碼##

* {
   	margin: 0;
    padding: 0;
}
// grid布局的关键代码!!!
// grid布局的关键代码!!!
// grid布局的关键代码!!!
.container {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-template-rows: 50px 50px;
}
.container div {
    text-align: center;
    line-height: 50px;
    border: 2px solid;
    margin: 2px;
}
.container div:nth-child(1) {background: yellow;}
.container div:nth-child(2) {background: orange;}
.container div:nth-child(3) {background: red;}
.container div:nth-child(4) {background: yellowgreen;}
.container div:nth-child(5) {background: paleturquoise;}
.container div:nth-child(6) {background: greenyellow;}

這時我們打開控制台來分析它:


淺談CSS3 Grid網格佈局(display: grid)的用法 發現每個子元素的寬高都變成了96px * 46px。可是我們並沒有給子元素設定寬高,那麼這是哪裡來的呢?我們在回頭看父元素的樣式:

.container {
    display: grid;
    /* 下面句的意思就是这个容器里面的子元素分成三列,每列都是100px宽 */
    grid-template-columns: 100px 100px 100px;	
    /* 下面这句的意思就是这个容器里面的子元素分成俩行,每行都是50px的高 */
    grid-template-rows: 50px 50px;
}

由於我們給子元素加了2px的邊框,最後展現的96 * 64也就清楚了,grid佈局還將容器下的所有子元素變成了box-sizing: border-box;怪異盒子模型。如果您對於怪異盒模型不是很了解請自行百度,如果想了解更多的CSS,HTML知識請觀看:https://blog.csdn.net/weixin_43606158/article/details/89811189

讓我們來論證一下我們剛剛所猜測的。
我們現在將容器的css樣式改為這樣:

.container {
  	display: grid;
    grid-template-columns: 100px 100px 200px 100px;
    grid-template-rows: 80px 50px 20px;
}

效果圖:


淺談CSS3 Grid網格佈局(display: grid)的用法

如我們猜測的一樣,現在變成了四列,每列的第三個變成了200px寬度,

但是行並沒有變成三行,因為優先排列列,如果排完沒有多餘的就不會在排列更多的行了。其他各種複雜的情況朋友請自行測試,筆者在這裡不再多廢話了,因為要開始grid佈局牛逼的地方了。

現在上面的這種方法只是給子元素寫固定的寬度高度,這並不是我們想要的,它並不會隨著瀏覽器寬度高度的變化而進行變化,我們想要的是能夠自適應的。

讓我們讓列開始具有自適應特性。

CSS 柵格佈局帶來了一個全新的值:fraction單位,fraction單位通常簡寫為fr,它允許你根據需要將容器拆分為多個區塊。

讓我們將每一列更改為一個fraction 單位寬:

容器的CSS樣式更改為:

.container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 50px 50px;
}

結果是柵格佈局將會把整個寬度分成三個fraction,每列佔據一個fraction 單位。

如果我們將grid-template-columns的值改為1fr 2fr 1fr,第二列的寬度將會是其它兩列的兩倍。總寬現在是四個 fraction 單位,第二列佔據兩個 fraction 單位,其它列各佔一個 fraction。

朋友們請自行觀看效果,此時你的這些子元素都會隨著你的螢幕寬度的變化而跟著變化了。

總的來說,fraction 單位值將使你可以很容易的更改列的寬度。

高階回應:

然而,上面列子並沒有給出我們想要的反應性,因為網格總是三列寬。我們希望網格能根據容器的寬度改變列的數量。要做到這一點,你必須學習如下三個概念:

repeat()

首先我們學習repeat()函數。這是一個強大的指定列和行的方法。讓我們使用repeat()函數來更改網格:

容器CSS更改為:

.container {
    display: grid;
    grid-template-columns: repeat(3, 100px);
    grid-template-rows: repeat(2, 50px);
}

在上面程式碼中,repeat(3, 100px)等於100px 100px 100px。第一個參數指定行與列的數量,第二個參數指定它們的寬度,因此它將為我們提供與開始時完全相同的佈局。

auto-fit

然後是auto-fit。讓我們跳過固定數量的列,將3替換為自適應數量:

.container {
    display: grid;
    grid-gap: 5px;
    grid-template-columns: repeat(auto-fit, 100px);
    grid-template-rows: repeat(2, 100px);
}

現在,柵格將會根據容器的寬度調整其數量。它會嘗試在容器中容納盡可能多的 100px 寬的列。但如果我們將所有列硬寫成 100px,我們將永遠無法獲得所需的彈性,因為它們很難填滿整個寬度。

minmax()

為了解決上述問題,我們需要minmax()。我們將 100px 替換為 minmax(100px, 1fr),程式碼如下:

.container {
    display: grid;
    grid-gap: 5px;
    grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
    grid-template-rows: repeat(2, 100px);
}

請注意,所有回應都發生在一行 css 程式碼中 現在的效果堪稱完美。 minmax()函數定義的範圍大於或等於 min, 小於或等於 max。

因此,现在每列将至少为 100px。但如果有更多的可用空间,栅格布局将简单地将其均分给每列,因为这些列变成了 fraction 单位,而不是 100px。


如果朋友们要在子元素里面添加图片的话请继续向下看,CSS属性的object-fit: cover;

我们现在可以将你所有子元素当中的数字改成图片了,比如:

<div><img  src="/static/imghwm/default1.png"  data-src="你的图片路径"  class="lazy"  / alt="淺談CSS3 Grid網格佈局(display: grid)的用法" ></div>

为了使图片适应于每个条目,我们将其宽、高设置为与条目本身一样,我们使用object-fit:cover。这将使图片覆盖它的整个容器,根据需要,浏览器将会对其进行裁剪。
增加CSS样式

.container > div > img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

ok!现在你已经了解了 CSS Grid 布局中最复杂的概念之一了,请给自己一个赞吧。

浏览器兼容性:

如果您不知道怎么查看浏览器的兼容性,笔者给您推荐:查看前端代码在各浏览器的支持情况的方法
淺談CSS3 Grid網格佈局(display: grid)的用法

更多编程相关知识,请访问:编程教学!!

以上是淺談CSS3 Grid網格佈局(display: grid)的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除
@rules具有多少特異性,例如@keyframes和@media?@rules具有多少特異性,例如@keyframes和@media?Apr 18, 2025 am 11:34 AM

前幾天我得到了這個問題。我的第一個想法是:奇怪的問題!特異性是關於選擇者的,而在符號不是選擇器,那麼...無關緊要?

您可以嵌套@Media和@support查詢嗎?您可以嵌套@Media和@support查詢嗎?Apr 18, 2025 am 11:32 AM

是的,您可以,而且它並不重要。不需要CSS預處理器。它在常規CSS中起作用。

快速吞噬緩存破壞快速吞噬緩存破壞Apr 18, 2025 am 11:23 AM

您應該肯定會在CSS和JavaScript(以及圖像和字體以及其他內容)等資產上設置遙遠的高速緩存標頭。告訴瀏覽器

尋找可以監視CSS質量和復雜性的堆棧尋找可以監視CSS質量和復雜性的堆棧Apr 18, 2025 am 11:22 AM

許多開發人員寫瞭如何維護CSS代碼庫的文章,但並沒有很多關於如何測量該代碼庫質量的文章。當然,我們有

數據學家用於建議不執行值的值數據學家用於建議不執行值的值Apr 18, 2025 am 11:08 AM

您是否曾經有一種需要接受簡短而任意的文本的表格?喜歡名字或其他。那完全是用的。有很多

蘇黎世的最初會議蘇黎世的最初會議Apr 18, 2025 am 11:03 AM

我很高興能前往瑞士蘇黎世參加前界(Love the Name and URL!)。我以前從未去過瑞士,所以我很興奮

使用CloudFlare工人建立全棧無服務器應用程序使用CloudFlare工人建立全棧無服務器應用程序Apr 18, 2025 am 10:58 AM

我在軟件開發方面最喜歡的發展之一是無服務器的出現。作為一個傾向於陷入細節的開發人員

在NUXT應用程序中創建動態路由在NUXT應用程序中創建動態路由Apr 18, 2025 am 10:53 AM

在這篇文章中,我們將使用我構建和部署的電子商務商店演示來進行Netlify,以展示如何為傳入數據製作動態路線。這是一個公平的

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境