亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

10分鐘理解CSS3 Grid布局

2024-07-11 08:59:44
字體:
來源:轉載
供稿:網友

基本介紹

上一篇文章我們介紹了css3 flexbox,今天我們再來說說css3的另外一個強大的功能:Grid。

Grid做前端的同學應該都很熟悉了,翻譯成中文為“柵格”,用過bootstrap、semantic ui、ant design的同學肯定都了解grid layout(刪格布局),以往css框架中的grid布局一般是通過float和百分比的寬度實現的,這種實現有幾種缺點:

  • html不夠簡潔;
  • 需要清除浮動以避免高度塌陷;
  • 列的個數是固定的,不能靈活定義。比如bootstrap是12列,semantic ui是16列,ant design 24列。

當然grid也可以用flex實現,但是并不會比用float簡單多少,而且flex擅長的是一維空間的布局,而對grid這種二維空間并不擅長?,F在css3從規范和標準層面實現了grid,編程體驗大大提升!

兼容性

用法

Grid作為一個二維的柵格系統,由若干列(column)和行(row)構成。

1. Column

(1) 設置column

CSS3中的Grid可以劃分為任意個數的列(column),而且每個column的寬度可以任意設置!我們先來看一個簡單的例子:

html:

<div id="content">    <div>1</div>    <div>2</div>    <div>3</div>    <div>4</div>    <div>5</div>    <div>6</div>    <div>7</div>    <div>8</div>    <div>9</div></div>

css:

body{    color: #fff;    text-align: center;}#content{    display: grid;    grid-template-columns: 33.3% 33.3% 33.3%;    max-width: 960px;    margin: 0 auto;}#content div{    background: lightgrey;    padding: 30px;}#content div:nth-child(even){    background: skyblue;}

效果:

當我們設置了display: gridgrid-template-columns: 33.3% 33.3% 33.3%#content就被劃分成了三行三列的grid,此時#content被稱為grid container,而#content的子元素稱為grid item。

我們也可以任意改變column的個數和寬度,比如:

#content{    grid-template-columns: 10% 20% 30% 40%;}

效果:

(2) fr(fraction)

css3中引入了一個新的單位fr(fraction),中文意思為“分數”,用于替代百分比,因為百分比(小數)存在除不盡的情況,用分數表示可以避免多位小數的寫法。比如三列等寬的grid可以表示為:

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

(3) repeat

我們也可以用repeat方法來簡化column或者row的寫法,repeat方法接受兩個參數,第一個參數表示重復的次數,第二個參數表示重復的內容。所以,三列等寬的grid我們還可以表示為:

grid-template-columns: repeat(3, 1fr);

當我們要定義的列數很多時,repeat就會變得非常有用,比如我們要定義一個10列等寬的grid,可以寫成repeat(10, 1fr),而不用將1fr重復書寫10遍。

2. Row

(1) 設置row

當我們設置column之后,row會因為元素的換行而自動產生,但是我們依然可以設置row的個數和高度。

css:

#content{    display: grid;    grid-template-columns: repeat(3, 1fr);    grid-template-rows: repeat(4, 60px);    max-width: 960px;}

效果:

可以看到,雖然第四行沒有內容,但是row確實存在并占據了那部分空間。

(2) minmax

上面的例子中我們給了row一個固定高度,這導致一個問題:如果某個grid item中的內容特別多,受制于固定的高度,部分內容將無法顯示,如下圖:

為解決這個問題,css提供了minmax函數,讓我們可以設置row的最小高度和最大高度,最大高度取auto后便可以讓row的高度自適應:

css:

grid-auto-rows: minmax(60px, auto);// 或者grid-template-rows: repeat(3, minmax(60px, auto));

效果:

(3) grid gap

如果我們想給行和列之間加上間隔,也有現成的方法:

css:

grid-gap:{  10px;}

效果:

3. Grid Line

以上所有例子中,grid中的每個grid item都是按默認順序排列的。如果我們想重新布局改變grid item的位置或大小呢?為此引入了grid lines的概念,所謂的grid lines就是將grid若干等分后的分割線,如下圖中橫向和縱向序號1~8的線即為grid lines:

<img src="http://lc-jOYHMCEn.cn-n1.lcfi...;/>

通過定義grid item的起始和結束的grid line我們就可以實現對grid item位置和覆蓋面積的控制。一個簡單的例子:

html:

<div id="content">    <div class="one">1</div></div>

css:

 #content {  display: grid;  grid-template-columns: repeat(8, 100px);  grid-template-rows: repeat(8, 100px);  grid-gap: 10px;}.one {  grid-column-start: 3;  grid-column-end: 6;  grid-row-start: 3;  grid-row-end: 6;}

效果:

通過設置grid-column-start/end grid-row-start/end 相當于給grid item設置起始坐標和結束坐標,上面的css也可以簡寫為:

.one {  grid-column: 3 / 6;  grid-row: 3 / 6;}// 或者.one {  grid-area: 3 / 3 / 6 / 6;}

如果grid item的起始grid line為默認,我們可以只設置它的跨度(span):

.one{  grid-column: span 3;  grid-row: span 3;}

4. Grid Area Template

除了通過grid lines進行布局,css3提供了一種更牛逼的布局方式:grid area template。與其用語言解釋什么是grid area template,不如直接看代碼:

html:

<div id="content">    <header>Header</header>    <main>Main</main>    <section>Section</section>    <aside>Aside</aside>    <nav>Nav</nav>    <footer>Footer</footer></div>

css:

body {  color: #fff;  text-align: center;}#content {  display: grid;  grid-template-columns: repeat(4, 1fr);  grid-auto-rows: minmax(100px, auto);  max-width: 960px;  margin: 0 auto;  grid-gap: 10px;  grid-template-areas:   "header header header header"  "aside . main main"  "nav . main main"   "section section section section"  "section section section section"  "footer footer footer footer";}#content>* {  background: #3bbced;  padding: 30px;}header { grid-area: header; }main   { grid-area: main; }section{ grid-area: section; }aside  { grid-area: aside; }nav    { grid-area: nav; }footer { grid-area: footer; }

效果:

看明白沒有?重點在于grid container的 grid-template-areas 屬性。我們給每個grid item設置一個grid area,然后在grid container中設置一個grid area模版(grid-template-areas),模版中每行字符串表示一個row,每個area名稱表示一個column,完全將幾何布局用文字模擬出來,空白的grid item用 . 表示。當然使用grid area要注意語法嚴謹,像 "header main header main" 這種寫法css是無法解析的,用area名稱模擬出的結構在二維空間上必須是一個整體,因為每個grid item也是無法分割的。

使用grid area template的優點在實現響應式布局時也是顯而易見的,我們只需要針對不同的屏幕尺寸制定不同的grid area template就行了。

5. Justify and Align

與flex類似,grid也可以設置justify和align來調整grid item橫向和縱向對齊方式。同樣也同時支持對grid container或單個grid item進行設置。

對grid container設置

html:

<div id="content">    <div class="one">1</div>    <div>2</div>    <div>3</div>    <div>4</div>    <div>5</div>    <div>6</div></div>

css:

#content {  display: grid;  grid-template-columns: repeat(3, 1fr);  grid-template-rows: repeat(2, minmax(120px, auto));  grid-gap: 10px;  max-width: 960px;  align-items: start;  justify-items: end;}

效果:

注意:flex里面用的是 justify-content 而grid里面是 justify-items ,flex里面的值是 flex-start/flex-end ,而grid里面是 start/end 。justify和align的默認值都是 stretch

對grid item設置

css:

.one{  align-self: start;  justify-self: end;}

效果:

實踐

掌握了上述知識,我們就能用CSS3 Grid快速做出各種layout效果了,附上幾個簡單的codepen示例:

12列grid布局

花瓣式布局

響應式布局

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲性线免费观看视频成熟| 国产美女直播视频一区| 亚洲直播在线一区| 一区二区日韩精品| 亚洲理论片在线观看| 精品视频—区二区三区免费| 国产欧美精品一区二区三区介绍| 98精品国产自产在线观看| 久久福利视频网| 日韩欧美中文免费| 欧美激情国产高清| 日本电影亚洲天堂| 久久精品成人欧美大片古装| 国产精品日本精品| 成人国产精品一区二区| 欧美激情一级欧美精品| 亚洲精品自拍视频| 欧美丰满少妇xxxxx| 欧美日韩在线观看视频小说| 日韩国产精品一区| 青青久久aⅴ北条麻妃| 一本一本久久a久久精品牛牛影视| 91九色国产视频| 亚洲国产精品电影| 影音先锋日韩有码| 欧美午夜宅男影院在线观看| 中文字幕久热精品视频在线| 欧美激情在线狂野欧美精品| 精品中文字幕乱| 国产专区精品视频| 欧美在线亚洲在线| 久久国产精品影片| 亚洲美腿欧美激情另类| 欧美成在线观看| 久久99精品久久久久久青青91| 亚洲夜晚福利在线观看| 国产成人短视频| 国产热re99久久6国产精品| 久久久精品一区| 超碰91人人草人人干| 精品香蕉一区二区三区| 国产精品三级久久久久久电影| 亚洲中国色老太| 成人在线视频福利| 97色伦亚洲国产| 91色在线视频| 精品日韩视频在线观看| 亚洲一区二区在线| 精品偷拍一区二区三区在线看| 欧美做受高潮1| 欧美成人激情图片网| 欧美成人亚洲成人日韩成人| 青草青草久热精品视频在线观看| 97精品国产97久久久久久春色| 欧美在线观看www| 日韩av观看网址| 欧美电影第一页| 日本久久91av| 亚洲欧美中文在线视频| 2021国产精品视频| 欧美激情videos| 精品国产欧美一区二区三区成人| 国产香蕉一区二区三区在线视频| 欧美电影在线播放| 欧美在线免费视频| 日本精品视频在线播放| 日韩激情视频在线播放| 欧美性猛交xxxxx免费看| 久久久久久国产精品美女| 亚洲精品国产美女| 综合网日日天干夜夜久久| 亚洲欧美一区二区三区情侣bbw| 亚洲免费电影一区| 亚洲人a成www在线影院| 久久精品视频在线播放| 国产午夜精品理论片a级探花| 国产免费一区二区三区香蕉精| 国产精品观看在线亚洲人成网| 欧美日韩人人澡狠狠躁视频| 久久99视频精品| 欧美插天视频在线播放| 亚洲成人网久久久| 久久免费精品视频| 国产成人一区二区在线| 久久精品视频在线观看| 九九久久综合网站| 亚洲成人av片| 亚洲第一免费播放区| 亚洲美女在线视频| 国产精品中文字幕久久久| 伊人久久久久久久久久久久久| 国产一区二区三区直播精品电影| 日韩高清免费在线| 亚洲一级免费视频| 精品视频中文字幕| 国产精品视频永久免费播放| 一本久久综合亚洲鲁鲁| 91sao在线观看国产| 欧美国产在线电影| 欧美亚洲另类激情另类| 欧美精品成人91久久久久久久| 欧美在线观看视频| 国产噜噜噜噜久久久久久久久| 亚洲欧美日韩成人| 国产精品久久久久aaaa九色| 亚洲图片制服诱惑| 国产v综合ⅴ日韩v欧美大片| 91青草视频久久| 欧美猛男性生活免费| 亚洲精品资源美女情侣酒店| 国产精品久久久av| 久久理论片午夜琪琪电影网| 海角国产乱辈乱精品视频| 亚洲成人在线视频播放| 欧美高清视频在线| www.久久久久久.com| 日韩精品极品视频免费观看| 国产一区二区成人| 国产免费一区二区三区在线观看| 亚洲成年人影院在线| 伊人青青综合网站| 色哟哟入口国产精品| 91av在线影院| 亚洲综合在线中文字幕| 美日韩在线视频| 性欧美xxxx视频在线观看| 欧美黑人xxxⅹ高潮交| 欧美亚洲成人免费| 欧美老女人xx| 精品日本高清在线播放| 欧美激情视频在线免费观看 欧美视频免费一| 欧美一级淫片丝袜脚交| 丝袜亚洲欧美日韩综合| 国产精品一香蕉国产线看观看| 中文字幕精品一区久久久久| 欧美另类交人妖| 欧美猛少妇色xxxxx| 亚洲黄色在线看| 精品国产欧美成人夜夜嗨| 粉嫩av一区二区三区免费野| 久久99青青精品免费观看| 国产亚洲一区二区精品| 亚洲电影av在线| 国产一区视频在线| 亚洲最大福利视频网| 亚洲免费伊人电影在线观看av| 国产精品99久久久久久白浆小说| 国产精品视频播放| 欧美日韩国产精品一区二区不卡中文| 精品国产欧美一区二区五十路| 欧美日韩国产中文字幕| 丝袜亚洲另类欧美重口| 中文字幕欧美精品日韩中文字幕| 日韩成人高清在线| 亚洲人成网站999久久久综合| 欧美日韩成人黄色| 成人高清视频观看www| 欧美视频国产精品| 精品视频中文字幕| 久久精品国产69国产精品亚洲| 在线观看日韩视频| 日韩av综合网站| 国产精品极品美女粉嫩高清在线| 国产精品久久久久久久电影|