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

首頁 > 開發 > CSS > 正文

CSS Gird布局教程指南

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

CSS網格布局是一個二維的基于網格的布局系統, 其目的在于完全改變我們設計基于網絡的用戶界面的方式。CSS一直用來布局我們的網頁, 但是他從來沒有做過很好的工作, 最開始我們使用表格,然后 float , positioninline-block 。但是這些本質上是css的hack, 并且遺漏了很多重要的功能(例如垂直居中),后來flexbox出現了, 但是他的目的只是為了更簡單的一維布局, 而不是復雜的二維布局。網格是第一個專門為解決布局問題而創建的CSS模塊 在瀏覽器兼容性方面,可以看一下caniuse的數據

 

網格容器

在元素中應用 display: grid 。這是所有網格布局的直接父元素, 在這個例子中 container 是網格容器

<div class="container">  <div class="item item-1"></div>  <div class="item item-2"></div>  <div class="item item-3"></div></div>

網格項目

網格容器的小孩(例如直接子元素),這里的 item 元素是網格項目,但 sub-item 不是

<div class="container">  <div class="item"></div>  <div class="item">    <div class="sub-item"></div>  </div>  <div class="item"></div></div>

網格線

構成網格結構的分界線, 他們既可以是垂直的(列)也可以是水平的(行)。這里的黃線是一個列網格線的例子

 

網格軌道

兩個相鄰網格線之間的空間。你可以把它們想象成網格的列或行。這是第二行和第三行網格線之間的網格軌道

 網格單元格

兩個相鄰的行和兩個相鄰的列網格線之間的空間,也就是網格中的一個單元,這是行網格線1和2之間的網格單元, 以及列網格線2和3

 網格空間

四個網格線包圍的總空間,網格空間可以由任意數量的網格單元組成。這里是行網格線1和3之間的網格空間, 以及列網格線1和3

 網格容器的屬性

display

將元素定義為網格容器, 并未其內容建立新的網格格式上下文 值:

  1. gird: 生成塊級網格
  2. inline-grid: 生成內聯網格
  3. subgrid: 如果你的網格容本身是一個網格項目(即嵌套網格), 你可以使用這個屬性來表明你想繼承他父母的行/列而不是他自己的。
.container{  display: grid | inline-grid | subgrid}

grid-template-columns, grid-template-rows

使用空格分隔的值列表來定義網格的列和行。這些值表示軌道大小,他們之間的空間表示網格線 值:

: 可以是網格中的空閑空間的長度,百分比, 或分數

: 線的名稱 例如, 在網格軌跡之間流出空白區域時, 網格線會自動分配數字名稱

.container{  display: grid;  grid-template-columns: 40px 50px auto 50px;  grid-template-rows: 25% 100px auto;}

但是你可以選擇明確命名行,請注意行名稱的括號語法

.container{  grid-template-columns: [first] 40px [line2] 50px [line2] auto [line3] auto [col4-start] 50px [five] 5px;   grid-template-rows: [row1-start] 25% [row1-end] 100px [thrid-line] auto [last-line];}

請注意,一行/列可以有多個名字,例如這里第二列將有兩個名字

.contaienr{  grid-template-rows: [row1-start] 25% [row1-end row2-start] 25% [row2-end]}

如果您的定義包含重復的部分,您可以使用repeat()符號來簡化

.container{  grid-template-columns: repeat(3, 20px [col-start]) 5%;}

相當于這個

.container{  grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start] 5%;}

設置單位為 fr 網格會允許您設置的網格軌道大小為網格容器的自由空間的一小部分,例如,這會將每個項目設置為容器寬度的三分之一

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

可用空間是在任何非彈性項目之后計算的,在這個例子中, fr 單元可用空間的總量不包括50px

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

grid-template-areas

通過應用 grid-area 屬性指定網格空間的名稱來定義網格模板。 值:

  1. : 指定的網格空間的名稱 grid-area
  2. : 表示一個空的網格單元
  3. none: 沒有定義網格空間
.container{  grid-template-areas: "<grid-area-name> | . | none | ...";}

例子

.container{  display: grid;  grid-template-columns: repeat(4, 50px);  grid-template-rows: auto;  grid-template-areas:     "header header header header"    "main main . slidebar"    "footer footer footer footer"}.item-a{  grid-area: header;}.item-b{  grid-area: main;}.item-c{  grid-area: slidebar;}.item-d{  grid-area: footer;}

注意: 你不是用這個語法命名行只是空間, 當你使用這種語法時, 空間兩端的行實際上是自動命名的,如果你的網格空間名字是foo,那么這個空間的起始行和起始列的名字就是foo-start,最后一列和最后一行就是foo-end;

grid-template

一個簡短設置 grid-template-rows , grid-template-columnsgrid-template-areas 在一起的聲明

.container {  grid-template: none | subgrid | <grid-template-rows> <grid-area-name>/ <grid-template-columns>;}

由于 grid-template 不會重置隱式網格屬性( grid-auto-columns , grid-auto-rows , grid-auto-flow ),這可能是您在大多數情況下所要做的,所以建議使用 grid 屬而不是 grid-template

grid-column-gap grid-row-gap

指定網格線的大小 值:

: 長度值

.container{  grid-column-gap: <line-size>;  grid-row-gap: <line-size>;}
.container{  display: grid;  grid-template-columns: repeat(4, 50px);  grid-template-rows: repeat(4, 80px);  grid-column-gap: 10px;  grid-row-gap: 15px;}

 

grid-gap

一種速記 grid-row-gapgrid-column-gap 值:

: 長度值

.container {  grid-gap: <grid-row-gap><grid-column-gap>}

justify-items

沿著行軸對齊網格內的內容(而不是 align-items 沿著列軸對齊),適用于所有網格容器內的網格項目 值:

  1. start: 將內容對齊到網格區域的左端
  2. end: 將內容對齊到網格區域的右端
  3. center: 將網格區域中心的內容對齊
  4. stretch: 填充網格區域的整個寬度
.container{  justify-items: start | end | center | stretch}

例子

.container{  justify-items: start;}

 

.container{  justify-items: end;}

.container{  justify-items: center;}

.container{  justify-items: stretch;}

此行為也可以通過 justify-self 在個別網格項目上設置

align-items

沿列軸對齊網格的內容(而不是 justify-items 沿著行軸對齊)。該值適用于容器內的所有網格項目 值:

  1. start: 將內容對齊到網格空間的頂部
  2. end: 將內容對齊到網格空間的底部
  3. center: 將內容對齊到網格空間的中心
  4. stretch: 填充網格空間的整個高度
.container {  align-items: start | end | center | stretch;}

例子

.container {  align-items: start;}

.container {  align-items: end;}

.container {  align-items: center;}

.container {  align-items: stretch;}

 

此行為也可以通過 align-self

屬性在個別網格項目上設置

justify-content

有時,網格的總大小可能小于其網格容器的大小, 如果您的所有網格項目都是用非靈活單位進行大小調整,就可能發生這種情況。這時候可以設置網格容器內的網格的對齊方式,此屬性沿著行軸對齊網絡 值:

  1. start: 將網格對齊到網格容器的左端
  2. end: 將網格對齊到網格容器的右端
  3. center: 將網格對齊到網格容器的中心
  4. stretch: 調整網格的大小以允許網格填充網格容器的整個寬度
  5. space-around: 在每個網格項目之間分配一個均勻的空間,在兩個端分配一半的空間
  6. space-between: 在每個網格項目之間分配一個均勻的空間,在兩個端沒有分配空間
  7. space-evenly:在每個網格項目之間分配一個均勻的空間,包括兩個遠端 例子
.container{  justify-content: start;}

.container{  justify-content: end;}

.container{  justify-content: center;}

.container{  justify-content: stretch}

 

.container{  justify-content: space-around;}

.container{  justify-content: space-between;}

.container{  justify-content: space-evenly;}

 

align-content

此屬性和 justify-content 一樣,只不過是沿著列軸對齊網格 值:

  1. start: 將網格對齊到網格容器的頂部
  2. end: 將網格對齊到網格容器的底部
  3. cneter: 將網格對齊到網格容器的中心
  4. stretch: 調整網格項目的大小, 以允許網格項目填充網格容器的整個高度
  5. space-around: 在每個網格項目之間分配均勻的空間,在兩端分配一半的空間
  6. sapce-between: 在每個網格項目之間分配一個均勻的空間,在兩端沒有空間
  7. space-evenly: 在每個項目之間分配一個均勻的空間, 包括兩端 例子:
.container{  align-content: start;}

.container{  align-content: end}

.container{  align-content: center;}

.container{  align-content: stretch;}

.container{  align-content: space-around;}

.container{  align-content: space-between;}

.container{  align-content: space-evenly;}

 

grid-auto-columns grid-auto-rows

指定任何自動生成的網格軌道的大小,當你明確聲明超出定義的網格空間的行或列(通過grid-template-rows / grid-template-columns)時間,會創建隱式網格軌道 值:

: 可以長度, 百分比, 或分數(使用 fr 單位) 如何創建隱式網格軌道, 例子:

.contaienr{  display: grid;  grid-template-columns: repeat(2, 60px);  grid-template-rows: repeat(2, 90px);}

這樣會創建一個2 X 2的網格

但現在如果你使用 grid-columngrid-row 定位你的網格項目是這樣的

.item-a {  grid-column: 1 / 2;  grid-row: 2 / 3;}.item-b {  grid-column: 5 / 6;  grid-row: 2 / 3;}

我們告訴 item-b 從第5行開始, 到第6行結束, 但是我們沒有定義第5行或第6行, 因為我們引用了不存在的行,所以創建了寬度為0的隱式軌道來填補空白,我們可以使用 grid-auto-columnsgrid-auto-rows 來指定這些隱式軌道的寬度

.container{  grid-auto-columns: 60px;}

 grid-auto-flow

如果您沒有明確放置在網格上的網格項目,則自動分配算法會自動分配這些項目。該屬性控制自動分配算法的原理 值:

  1. column: 告訴自動分配算法依次填充每行,根據需要添加新行
  2. row: 告訴自動分配算法一次填充每列,根據需要添加新列
  3. dense: 告訴自動分配算法,如果之后出現較小的項目,則嘗試在網格中盡早填充空間
  4. dense 可能導致您的項目出現亂序 例子:
<section class="container">  <div class="item-a">item-a</div>  <div class="item-b">item-b</div>  <div class="item-c">item-c</div>  <div class="item-d">item-d</div>  <div class="item-e">item-e</div></section>

你定義了一個五行兩列的網格,并設置 grid-auto-flowrow

.container{  display: grid;  grid-template-columns: repeat(5, 60px);  grid-template-rows: repeat(2, 30px);  grid-auto-flow: row;}

將項目分配在網格容器上,只能為其中的兩個項目分配空間

.item-a {  grid-column: 1;  grid-row: 1 / 3;}.item-e {  grid-column: 5;  grid-row: 1 / 3;}

如果將 grid-auto-flow 設置為 column

 

grid

簡寫為所有設置下列屬性的單一聲明: grid-template-rows , grid-template-columns , grid-template-areas , grid-auto-rows , grid-auto-columnsgrid-flow

網格項目的屬性

grid-column-start, grid-column-end, grid-row-start,grid-row-end

通過引用特定的網格線來確定網格內項目的位置。 值:

  1. : 可以是一個數字來引用一個編號的網格線,或者一個名稱來引用一個命名的網格線
  2. span : 項目將跨越提供的網格軌道數量
  3. span : 項目將跨越, 直到與它提供的名稱命中
  4. auto: 自動分配
.item-a {  grid-column-start: 2;  grid-column-end: five;  grid-row-start: row1-start  grid-row-end: 3}

.item-b {  grid-column-start: 1;  grid-column-end: span col4-start;  grid-row-start: 2  grid-row-end: span 2}

如果沒有 grid-column-end / grid-row-end 聲明, 該項目將默認跨越一個項目,項目可以相互重疊,您可以使用 z-index 來控制堆疊順序

grid-column, grid-row

簡寫為 grid-column-start + grid-column-endgrid-row-start + grid-row-end 值:

.item-c {  grid-column: 3 / span 2;  grid-row: third-line / 4;}

 

grid-area

為項目提供一個名稱,以便可以通過使用 grid-template-areas 屬性創建的模板來引用他。或者屬性可以用作 grid-row-start + grid-column-start + grid-row-end + grid-column-end 值:

  1. : 你選擇的名稱
  2. / / / :可以是數字或命名行
.item {  grid-area:  <name> | <row-start> / <column-start> / <row-end> / <column-end>;}

例子: 作為項目分配名稱的一種方法

.item-d{  grid-area: header;}

作為 grid-row-start + grid-column-start + grid-row-end + grid-column-end 的簡寫:

.item-d {  grid-area: 1 / col4-start / last-line / 6}

 

justify-self

沿著行軸對齊網格的內容,此屬性適用與單個網格項目的內容 值:

  1. start: 將內容對齊到網格空間的左端
  2. end: 將內容對齊到網格空間的右端
  3. center: 將網格空間中心的內容對齊
  4. stretch: 填充網格空間的整個寬度
.item {  justify-self: start | end | center | stretch;}

例子:

.item-a {  justify-self: start;}

.item-a {  justify-self: end;}

.item-a {  justify-self: center;}

 

.item-a {  justify-self: stretch;}

 align-self

沿列軸對齊網格內的內容,此值適用與單個網格項目內的內容 值

start: 將內容對齊到網格空間的頂部

end: 將內容對齊到網格空間的底部

center: 將網格空間中心的內容對齊

stretch: 填充網格空間的整個高度

.item {  align-self: start | end | center | stretch;}

例子:

.item-a {  align-self: start;}

 

.item-a {  align-self: end;}

.item-a {  align-self: center;}

.item-a {  align-self: stretch;}

 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品手机在线| 日韩欧亚中文在线| 亚洲国产精品va在线观看黑人| 午夜精品久久久久久久久久久久久| 国产精品国产自产拍高清av水多| 成人黄色午夜影院| 国产成人一区二区三区| 乱亲女秽乱长久久久| 亚洲天堂av在线播放| 欧美在线视频一区二区| 精品国产一区二区三区久久狼黑人| 亚洲国产欧美久久| www.日韩.com| 欧美性猛交丰臀xxxxx网站| 亚洲综合精品一区二区| 中文字幕亚洲一区二区三区五十路| 这里只有精品在线观看| 成人做爽爽免费视频| 国产精品成人一区二区三区吃奶| 国产做受69高潮| 97视频在线观看免费高清完整版在线观看| 国模视频一区二区| 亚洲午夜小视频| 色无极影院亚洲| 亚洲性日韩精品一区二区| 午夜精品久久久久久久99黑人| 国产精品美女呻吟| 国内精品美女av在线播放| 亚洲视频电影图片偷拍一区| 午夜精品一区二区三区在线视| 精品国产一区二区三区久久狼5月| 久久久久久久久久久av| 久久伊人91精品综合网站| 4438全国亚洲精品在线观看视频| 日本亚洲欧洲色α| 日韩视频在线免费观看| 国产97色在线|日韩| 欧美中文在线视频| 91po在线观看91精品国产性色| 国产精品爱久久久久久久| 久久久国产精品视频| 亚洲美女动态图120秒| 亚洲精品视频免费| 欧美日韩免费区域视频在线观看| 97av在线播放| 欧美日本亚洲视频| 亚洲字幕在线观看| 美女黄色丝袜一区| 欧美激情久久久| 青青草精品毛片| 亚洲色图25p| 中文字幕亚洲第一| 97人人做人人爱| 国产一区二区三区中文| 97国产在线视频| 免费不卡在线观看av| 日韩精品极品毛片系列视频| 国产亚洲欧洲高清一区| 日本欧美黄网站| 九九久久久久久久久激情| 国产精品成人av性教育| 国产91精品网站| 欧美激情精品久久久久久久变态| 全亚洲最色的网站在线观看| 欧美日韩一区二区三区| 成人av资源在线播放| 日韩精品极品在线观看| 久久久久久久久久av| 97久久精品国产| 欧美在线观看网址综合| 亚洲黄色av女优在线观看| 国产精品亚洲网站| 国产精品久久久久久久久久ktv| 北条麻妃一区二区三区中文字幕| 国产精品入口尤物| 国产亚洲精品高潮| 亚洲码在线观看| 成人精品一区二区三区| 亚洲一区二区三区乱码aⅴ| 亚洲午夜精品久久久久久久久久久久| 色哟哟网站入口亚洲精品| 日韩精品日韩在线观看| 色综合导航网站| 亚洲免费伊人电影在线观看av| 欧美午夜片在线免费观看| 777国产偷窥盗摄精品视频| 亚洲午夜精品久久久久久性色| 欧美在线视频一区二区| 成人激情视频在线观看| 97在线免费视频| 成人黄色av播放免费| 欧美午夜片在线免费观看| 亚洲最大av在线| 最新国产成人av网站网址麻豆| 91精品国产九九九久久久亚洲| 国产欧美精品一区二区三区介绍| 78m国产成人精品视频| 91黑丝高跟在线| 91精品国产电影| 欧美性视频在线| 欧美性色视频在线| 亚洲一区中文字幕| 精品五月天久久| 欧美精品www在线观看| 国产日韩欧美在线视频观看| 伊人久久大香线蕉av一区二区| 51ⅴ精品国产91久久久久久| 国产精品444| 亚洲欧美激情视频| 欧美大尺度电影在线观看| 亚洲人成电影在线播放| 97视频在线观看播放| 欧美精品九九久久| 精品久久久久久久久久| 久久久久五月天| 亚洲免费人成在线视频观看| 亚洲人成人99网站| 91大神在线播放精品| 国产精品久久久久久久久久久久久| 久久久久久国产免费| 国产精品久久久久久久久久久不卡| 69av在线播放| 欧洲亚洲免费在线| 国产综合在线看| 亚洲视频在线播放| 欧美日韩国产一区二区| 国产精品亚洲第一区| 奇米影视亚洲狠狠色| 日本午夜人人精品| 国产深夜精品福利| 亚洲第一区在线观看| 日韩亚洲在线观看| 日韩在线激情视频| 亚洲理论电影网| 91中文字幕一区| 91在线观看免费高清完整版在线观看| 97avcom| 国产伦精品免费视频| 欧美大码xxxx| 日韩中文字幕网站| 欧美成人中文字幕| 亚洲国产精品人久久电影| 亚洲欧美一区二区三区情侣bbw| 日韩av影片在线观看| 国产成人精品视频在线观看| 亚洲人永久免费| 国产欧美久久久久久| 福利精品视频在线| 色狠狠久久aa北条麻妃| 国产精品高清免费在线观看| 高潮白浆女日韩av免费看| 欧美成人久久久| 九九热精品视频在线播放| 亚洲影视九九影院在线观看| 国产成人精品电影久久久| 欧美精品电影在线| 国内精品久久久久影院 日本资源| 黄色成人av在线| 视频一区视频二区国产精品| 国产精品久久久久久久久久99| 国产精品流白浆视频| 日韩欧美中文在线| 韩剧1988在线观看免费完整版| 中文字幕久精品免费视频|