首頁  >  文章  >  web前端  >  淺談CSS3 Grid網格佈局(display: grid)的用法

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

青灯夜游
青灯夜游轉載
2021-02-16 09:11:146208瀏覽

淺談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="你的图片路径"/ 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.net。如有侵權,請聯絡admin@php.cn刪除