整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          用vue寫輪播圖banner(左右按鈕,小圓圈點擊,定時滾動)

          tml:

          <div class="banner" id="my">
           <img v-for="(item,index) in imgs" v-bind:src="item" v-show="n==index" />
           <div class="banner-circle">
           <ul>
           <li v-for="(item,index) in imgs" v-bind:class="n==index ? 'selected' : '' " v-on:click="onclick(index)"></li>
           </ul> 
           </div>
           <div class="btn" >
           <p class="btn-left" v-on:click="btnL()"> < </p>
           <p class="btn-right" v-on:click="btnR()"> > </p>
           </div>
          </div>

          vue:

          <script>
          new Vue({
           el:'#my',
           data:{
           n:0,
           imgs:['img/banner1.jpg','img/banner2.jpg','img/banner3.jpg','img/banner4.jpg','img/banner5.jpg']
           },
           methods:{
           play:function(){
           var timer=setInterval(this.autoplay,2000)
           },
           autoplay:function(){
           this.n++;
           if(this.n==this.imgs.length){
           this.n=0;
           }
           },
           onclick:function(num){
           this.n=num;
           },
           btnL:function(){
           clearInterval(this.timer);
           this.n--;
           if(this.n<0){
           this.n=this.imgs.length-1;
           }
           },
           btnR:function(){
           clearInterval(this.timer);
           this.n++;
           if(this.n>this.imgs.length-1){
           this.n=0;
           }
           }
           },
           mounted:function(){
           this.play();
           }
          })
          </script>

          分析下流程:

          1. 先遍歷出所有的banner圖,然后定義一個變量n,n的值等于索引,n等于幾,就展示第幾張圖;
          2. 設置一個定時器,讓輪播圖自動輪播,需判斷加到到最后一張(就是數組長度),此處用到生命周期,頁面加載完成調用自動輪播函數,
          3. 小圓點第一步的遍歷,然后三木運算 讓顯示的圖有相應的class
          4. 小圓點點擊事件和左右按鈕的點擊事件

          家好,我是 Echa。

          Grid(網格)布局是最強大的 CSS 布局方案,用于構建二維布局。Grid 布局將頁面劃分成一個個網格,可以任意組合不同的網格,實現各種各樣的布局。下面就來看看 CSS Grid 布局是如何使用的!

          創作不易,喜歡的老鐵們加個關注,點個贊,后面會持續更新干貨,速速收藏,謝謝!

          全文大綱:

          • Grid 布局概述
          • 設置基礎網格
          • 設置行和列的寬度
          • 行和列的添加間隙
          • 水平對接內容
          • 垂直對齊內容
          • 新的測量單位
          • CSS函數
          • 網格項屬性
          • 隱式網格軌道
          • 速記屬性
          • CSS Grid調試
          • CSS Grid在線生成器

          1. Grid 布局概述

          在解釋 CSS Grid 布局之前,我們先來看看 Grid 布局中一些重要概念。

          (1)網格容器

          網格容器是所有網格項的父元素,網格容器會定義display:grid。下面例子中,類名為 containerdiv 元素就是網格容器:

          .container {
           display: grid;
          }
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
          </div>
          

          (2)網格項

          網格項是網格容器的子元素,上面例子中類名為itemdiv元素就是網格項。

          (3)網格線

          構成網格結構的水平和垂直分隔線就是網格線,這些線位于列(列網格線)或行(行網格線)的任一側。

          下圖中的網格有 9 個網格項,有 4 條行網格線和 4 條列網格線:

          (4)網格軌道

          兩條相鄰網格線之間的區域就是網格軌道。下圖紫色區域就是網格軌道(紅線圈起來的位置):

          (5)網格單元

          兩條相鄰的列網格線和兩條相鄰的行網格線組成是的網格單元。它是網格的單個單元,也是最小單元。下圖紫色區域就是一個單元網格:

          (6)網格區域

          網格區域就是網格上的一個矩形區域,由一個或多個網格單元組成。下圖中紫色的區域就是網格區域:

          2. 設置基本網格

          要想創建 CSS 網格布局,首先需要定義網格容器??梢允褂?/span>display: grid或者display: inline-grid指定一個容器為網格布局。這樣網格容器的所有直接子元素都會隱式轉換為網格項。

          .container {
            display: grid;
          }
          
          .container {
            display: inline-grid;
          }
          

          下面來看一個例子:

          <div class="container">
            <div class="box a">1</div>
            <div class="box b">2</div>
            <div class="box c">3</div>
            <div class="box d">4</div>
          </div>
          

          再上面的代碼中,我們定義了一個類名為 containerdiv 元素,其有四個子元素。下面來將其設置為網格容器:

          .container {
            display: grid;
          }
          

          結果如下:

          當元素設置了網格布局,column、float、clear、vertical-align屬性都會失效。

          3. 設置行和列寬度

          將元素單獨設置為網格容器不會立即影響子元素的顯示方式,因為我們還沒有指定布局的央樣式。要更改網格中網格項的布局,就需要明確定義網格的行和列。這就用到了 grid-template-columnsgrid-template-rows 屬性。

          (1)grid-template-columns

          可以使用 grid-template-columns 屬性來指定網格容器中所需的列數以及每列的寬度。

          該屬性接受一個或多個非負 CSS 長度值,這些值的個數就是網格容器的列數,每個值表示每列(即每個網格軌道)的寬度。例如:

          .container {
            display: grid;
            grid-template-columns: 400px 400px 400px;
          }
          

          結果如下:

          在這個例子中,我們使用 grid-template-columns 屬性將網格容器的布局設置為三列,每列寬 400px。由于網格容器有四個子元素,而我們只給網格指定了三列,所以當網格容器中的網格項數量超過三個時,CSS 會將其他網格項放到新行中以保持容器的布局。

          (2)grid-template-rows

          可以使用 grid-template-rows 屬性來指定網格容器中每一行的高度。與 grid-template-columns 屬性不同,它并沒有指定網格容器的行數,而只用來設置每行的高度。這是因為每當網格項換行時,網格容器都會隱式創建一個新行。因此,我們無法使用 grid-template-rows 屬性來控制網格的行數。

          該屬性接受一個或多個非負CSS 長度值,其中每個值表示網格容器中每一行的高度,從第一行到最后一行。例如:

          .container {
            display: grid;
            grid-template-columns: 400px 400px 400px;
            grid-template-rows: 100px 200px;
          }
          

          在上面的代碼中,我們指定了網格容器的第一行高度為 100px,第二行高度為 200px。

          結果如下:

          上面我們僅設置了網格容器中前兩行的高度。如果向網格容器中添加更多的網格項,那么那些隱式創建的行的高度將不是由 grid-template-rows 屬性決定,而由其內容的大小決定。

          (3)grid-template-areas

          可以使用grid-template-areas屬性來定義網格區域。該屬性有以下三個屬性值:

          • grid-area-name:使用grid-area屬性設置的網格區域的名稱
          • . :空網格單元
          • none:沒有定義網格區域

          下面來看一個例子:

          .container{
              grid-template-areas: "header header header header"
                                   "main main . sidebar"
                                   "footer footer footer footer";
          }
          
          

          結果如下:

          (4)網格線名稱

          grid-template-columnsgrid-template-rows 屬性還可以使用方括號來指定每一條網格線的名字,方便引用。

          下面來看一個例子:

          .container{
            grid-template-columns: [one] 40px [two] 50px [three] auto [four];
            grid-template-rows: [five] 25% [six] 100px [seven] auto [eight];
          }
          

          這里定義了一個 3 行 4 列的網格,其中 one、two、three、four是列網格線的名稱,five、six、seven、eight 是行網格線的名稱。

          4. 行和列之間添加間隙

          當這樣設置完一個基礎的網格之后,有時想要在網格項之間有一些距離,就可以通過調整網格線的大小在列和行之間添加間距。這就需要用到 row-gapcolumn-gap 屬性。

          (1)column-gap

          可以使用 column-gap 屬性來通過調整網格容器中垂直網格線的寬度來增加列之間的間距。它接受一個非負 CSS 長度值,該值用來定義每列之間的網格線的寬度。例如:

          .container { 
             display: grid; 
             column-gap: 28px;
          }
          

          這里將網格容器中每條垂直(列)網格線的寬度設置為了 28px。使得網格中每一列之間的距離增加了28px。

          結果如下:

          (2)row-gap

          可以使用 row-gap 屬性來通過調整網格容器中所有水平網格線的高度來在網格容器中的行之間添加間距。它接受一個非負 CSS 長度值,該值定義每行之間網格線的大小。

          例如:

          .container { 
             display: grid; 
             column-row: 40px;
          }
          

          這里將網格容器中每條水平(行)網格線的高度設置為 40px。使得網格中每一行之間的距離增加了40px。

          結果如下:

          可以結合 column-gaprow-gap 屬性來分隔列和行:

          .container { 
             display: grid; 
             column-row: 40px;
             row-gap: 20px;
          }
          

          結果如下:

          5. 水平對齊內容

          Grid 布局提供了六個屬性來控制網格項沿網格容器的行或列的對齊方式。下面就來看看沿網格容器的列水平對齊網格項的屬性都是如何使用的。

          (1)justify-items

          可以使用 justify-items 屬性來控制所有網格項沿水平方向的對齊方式。它被傳遞給網格容器,其值適用于網格中的所有網格項。它接受四個可能的值:

          • start:將網格項對齊到所有列的開頭,即其單元格的左邊緣。
          .container {
             justify-items: start;
          }
          

          • end:將網格項對齊到所有列的末尾,即其單元格的右邊緣
          .container {
             justify-items: end;
          }
          

          • center:將所有網格項目放在其單元格的中心
          .container {
             justify-items: center;
          }
          

          • stretch:將拉伸網格項目以填充其單元格的整個寬度(默認值)
          .container {
             justify-items: stretch;
          }
          

          (2)justify-content

          可以使用justify-content屬性來設置網格在網格容器內沿著水平方向的對齊方式。它接受七個可能的值。

          • start:將網格與網格容器的左邊對齊
          .container {
             justify-content: start;
          }
          

          • end:將網格與網格容器的右邊對齊
          .container {
             justify-content: end;
          }
          

          • center:將整個網格水平放置在網格容器的中心
          .container {
             justify-content: center;
          }
          

          • stretch:調整網格項大小,讓寬度填充整個網格容器(默認值)
          .container {
             justify-content: stretch;
          }
          

          • space-around:在網格項之間設置均等寬度的空白間隙,其外邊緣間隙大小為中間空白間隙寬度的一半
          .container {
             justify-content: space-around;
          }
          

          • space-between:在網格項之間設置均等寬度空白間隙,其外邊緣無間隙
          .container {
             justify-content: space-between;
          }
          

          • space-evenly:在每個網格項之間設置均等寬度的空白間隙,包括外邊緣
          .container {
             justify-content: space-evenly;
          }
          

          (3)justify-self

          可以使用 justify-self 屬性來設置單元格內容的水平位置,此屬性定義在網格項上,它接受四個可能得值。

          • start:將網格項對齊到列的開頭,即其單元格的左邊緣
          .box-1 {
             justify-self: start;
          }
          

          • end:將網格項對齊到列的末尾,即其單元格的右邊緣
          .box-2 {
             justify-self: end;
          }
          

          • center:單將網格項放置在其單元格的中心
          .box-3 {
             justify-self: center;
          }
          

          • stretch:將拉伸網格項以填充整個單元格寬度(默認值)
          .box-4 {
             justify-self: stretch;
          }
          

          6. 垂直對齊內容

          (1)align-items

          可以使用align-items 屬性來控制所有網格項沿垂直方向的對齊方式。它被傳遞給網格容器,其值適用于網格中的所有網格項。它接受四個可能的值:

          • start:將所有網格項放在所有行的頂部
          .container {
             align-items: start;
          }
          

          • end:將所有網格項放在所有行的底部。
          .container {
             align-items: end;
          }
          

          • center:將所有網格項目放在其單元格的中心
          .container {
             align-items: center;
          }
          

          • stretch:將拉伸所有網格項目以填充其單元格的整個高度(默認值)
          .container {
             align-items: stretch;
          }
          

          (2)align-content

          可以使用align-content屬性來設置網格在網格容器內沿著垂直方向的對齊方式。它接受七個可能的值。

          • start:將整個網格對齊到網格容器的頂部
          .container {
             align-content: start;
          }
          
          

          • end:將整個網格與網格容器的底部對齊
          .container {
             align-content: end;
          }
          

          • center:將整個網格垂直放置在網格容器的中心
          .container {
             align-content: center;
          }
          

          • stretch:網格項目拉伸以填充容器網格的整個高度(默認值)
          .container {
             align-content: stretch;
          }
          

          • space-around:在網格項之間設置均等寬度的空白間隙,其外邊緣間隙大小為中間空白間隙寬度的一半
          .container {
             align-content: space-around;
          }
          

          • space-between:在網格項之間設置均等寬度空白間隙,其外邊緣無間隙
          .container {
             align-content: space-between;
          }
          

          • space-evenly:在每個網格項之間設置均等寬度的空白間隙,包括外邊緣
          .container {
             align-content: space-evenly;
          }
          

          (3)align-self

          可以使用 align-self 屬性來設置單元格內容的垂直位置,此屬性定義在網格項上,它接受四個可能得值。

          • start:在其單元格的頂部放置一個網格項
          .box-4 {
             align-self: start;
          }
          
          

          • end:在其單元格的底部放置一個網格項
          .box-5 {
             align-self: end;
          }
          

          • center:將一個網格項放置在其單元格的中心
          .box-6 {
             align-self: center;
          }
          

          • stretch:將拉伸網格項目以填充其單元格的整個高度(默認值)
          .box-1 {
            align-self: stretch;
          }
          

          7. 新的測量單位

          除了非負CSS 長度值(例如px、rem、vw和百分比 ( %) )之外,我們還可以使用特殊的大小單位和關鍵字來控制網格中網格項的大小。

          (1)fr 單位

          fr單位是“fractional”的縮寫,是 CSS 網格布局中引入的長度單位。它代表網格容器中可用空間的一部分。這使它成為定義響應列和行的理想單位,這些列和行將隨著瀏覽器的視口縮小和增大而縮放。

          下面來看一個簡單的例子,假設我們要創建一個由三列組成的網格布局,其中第一列占網格寬度的 1/6,第二列是第一列寬度的兩倍,第三列是第一列寬度的三倍。如果沒有fr 單位,我們就需要執行一些數學運算,先用網格的總寬度100%除以6,然后將結果乘以每列的跨度:

          • 第一列的寬度 = 100% / 6 * 1 —> 15%
          • 第二列的寬度 = 100% / 6 * 2 —> 30%
          • 第三列的寬度 = 100% / 6 * 3 —> 45%

          隨著布局變得越來越復雜,使用百分比或任何CSS 數學函數將變得不可持續。這時 fr 單位就派上用場了。fr單位通過讓我們指定網格容器中的可用空間應如何在其行和列之間進行分配,然后按該順序分配可用空間:

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

          上面的代碼中,我們將容器寬度的一部分分給第一列,第二列的寬度是第一列的兩倍,第三列的寬度是第一列的三倍。

          結果如下:

          (2)min-content

          min-content 是一個用于調整大小的關鍵字,它將網格軌跡的寬度設置為最小寬度,通常是網格項中最小內容或文本的大小。它的工作原理類似于CSS函數:min(),但被用作間距單位而不是函數。

          當應用于列或行時,它們會變得與軌跡中最長的內容一樣窄。這可以獲得網格項內內容的最短長度。

          下面來看一個例子;

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

          在上面的代碼中,我們將第一列和第三列的寬度設置為網格容器的小部分,同時將第二列設置為 min-content,使其縮小到網格項中內容的大小。

          結果如下:

          (3)max-content

          max-content關鍵字的效果與min-content相反,它類似于CSS函數:max()。當應用于列或行時,軌道將變得盡可能寬,以便網格項中的所有內容都顯示在一條完整的長行中。

          使用max-content的好處就是,可以讓網格項中的內容擴展,而不是將它們包裝成新行,這會導致垂直文本溢出。

          下面來看一個例子:

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

          上面的代碼定義了三列,并將第二列的寬度設置為max-content關鍵字。如果在第二列的網格項中添加大量內容,這些網格項中的文本將不會溢出。相反,第二列的寬度將增加,第一列和第三列將縮小以適應它。

          結果如下:

          8. CSS函數

          在使用 CSS Grid 進行布局時,一些CSS數學函數可以幫助我們提高效率。比如 repeat()minmax()、fit-content()。

          (1)repeat()

          repeat() 函數表示軌道列表的重復片段,允許以更緊湊的形式寫入大量顯示重復模式的列或行。。

          例如,在使用grid-template-columnsgrid-template-rows這兩個屬性時,可以使用 repeat() 函數更簡潔地聲明這些重復模式。

          該函數有兩個參數:① 第一個參數用來指定行或列的重復模式重復的次數,有三種取值方式:

          • <number>:整數,確切的重復次數。
          • <auto-fill>:以網格項為準自動填充。
          • <auto-fit>:以網格容器為準自動填充。

          ② 第二個參數用來指定行或列的重復模式重復的內容,有以下取值方式:

          • <length>:非負長度。
          • <percentage>:相對于列軌道中網格容器的內聯大小的非負百分比,以及行軌道中網格容器的塊長寬。
          • <flex>:單位為fr的非負長度,指定軌道彈性布局的系數值。
          • max-content:表示網格的軌道長度自適應內容最大的那個單元格。
          • min-content:表示網格的軌道長度自適應內容最小的那個單元格。
          • auto:作為最大值時,等價于max-content。作為最小值時,它表示軌道中單元格最小長寬(min-width/min-height)的最大值。

          假設我們要創建一個具有六個相等列的網格。如果沒有 repeat() 函數,我們必須使用 grid-template-columns 屬性顯式定義每個列。代碼如下:

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

          然而,隨著列數的增加,這種方法變得不可持續和冗長。我們可以使用repeat()函數將其重寫為更緊湊的形式。代碼如下:

          .container {
               display: grid;
               grid-template-columns: repeat(6, 1fr);
          }
          

          結果如下:

          (2)minmax()

          定義響應式網格布局時,我們可能希望為每個網格軌道指定最小和最大寬度,以確保它們在視口調整大小時上下縮放以適應其內容。這時 minmax() 就派上用場了。

          minmax() 函數允許我們指定網格軌道的最小和最大尺寸,它是一個長寬范圍的閉區間。當網格在視口中調整大小時,網格軌道將在該范圍內增長和縮小。在較小的屏幕上,它會縮小直到達到最小尺寸。在更大的屏幕上,它會拉伸直到達到最大尺寸。

          minmax() 函數接受 CSS Grid 大小單位、關鍵字、長度和百分比值。其有兩個參數:

          • min:軌道的最小尺寸。
          • max:軌道的最大尺寸。

          下面來看一個例子:

          .container {
            display: grid;
             grid-template-columns: repeat(3, 1fr);
             grid-template-rows: repeat(2, minmax(100px, max-content));
          }
          

          在上面的代碼中,我們使用 minmax() 函數將網格容器中兩行的最小高度設置為 100px,將最大高度設置 max-content。這樣就可以確保每一行在超過 100px 時都能伸展并變得盡可能寬,以容納其內容。

          結果如下:

          minmax() 函數的一個顯著優點就是它減少了對媒體查詢的需要。它不依靠媒體查詢來控制跨視口的網格軌道(列和行)的大小,而是允許在一定程度上設置網格軌道值的響應式轉換。

          (3)fit-content()

          fit-content() 函數的操作類似于 minmax() 函數。不同之處在于,使用 fit-content()時,最小值是網格項中內容的大小,最大值是我們傳遞給它的值。這樣就可以將內容設置為最小值,并根據需要將其放大到某個值。

          當應用于網格軌道時,它將網格軌道的大小設置為最小寬度,這是其網格項目中最小的內容或文本的大小。需要注意的是,最小的內容或文本大小不大于函數中指定的值。

          但是,如果最小寬度的值超過了提供給函數的值,則網格軌道的大小將設置為傳遞給 fit-content() 函數的值,并且網格項的內容將換行。

          下面來看一個例子:

          .container {
             display: grid;
             grid-template-columns: fit-content(200px) fit-content(300px) fit-content(400px);
          }
          

          上面的代碼使用 fit-content() 函數分別創建了寬度為 200px、300px 和 400px 的三列。這意味著每列的大小將等于其網格項目中最小的內容或文本的大小,但如果這變得大于提供給 fit-content() 函數的值,則列將設置為傳遞給 fit-content() 函數的值。

          結果如下:

          9. 網格項屬性

          在網格容器中,每條網格線都根據其在網格上的位置給出一個編號。第一條網格線(行或列)的編號為 1,第二條為 2,依此類推。

          例如,下圖在一個三列兩行的網格容器上存在的網格線的數量,其中列線是橙色圓圈內從 1 到 4 的數字,而行線是藍色圓圈內的數字從 1 到 3 圈。

          瀏覽器使用這些網格線來控制網格中項目的布局和位置。CSS Grid 提供了一些屬性來控制網格項目沿這些網格線的位置,以及它們在水平和垂直方向上跨越的寬度。

          可用于控制網格項的位置以及它們如何跨越這些行的屬性是:

          • grid-column-start
          • grid-column-end
          • grid-row-start
          • grid-row-end

          (1)grid-column-start

          可以使用 grid-column-start 屬性來指定網格項沿網格容器內的列網格線的水平起始位置。這個開始位置定義了網格項目左邊緣的開始。

          使用下面的網格布局,來定位第一個網格項并將其水平起始位置設置為第 2 列。

          選擇第一個子元素,并定位:

          .container div:nth-of-type(1) {
            grid-column-start: 2;
          }
          

          這樣,所選網格項的水平起始位置將位于第二條垂直網格線(第 2 列)上。

          上圖中,第一個網格項現在從第 2 列開始,而其他網格項被移動,換行到了新行或在網格上創建了空白空間。

          (2)grid-column-end

          除了使用 grid-column-start 指定網格項的水平起始位置外,還可以使用 grid-column-end屬性設置網格項的結束位置。

          例如:

          .container div:nth-of-type(1) {
            grid-column-start: 2;
            grid-column-end: 4;
          }
          

          這使得第一個網格項從第 2 列開始,跨越兩條網格線,并在第 4 行結束。使用 grid-column-startgrid-column-end 屬性,可以有效地控制網格的水平起始位置以及它跨越網格的寬度。

          結果如下:

          (3)grid-row-start

          可以使用 grid-row-start 屬性來指定網格項沿網格容器內水平(行)網格線的垂直起始位置。它用于設置網格項開始的行。

          例如:

          .container div:nth-of-type(2) {
            grid-row-start: 1;
          }
          

          在上面的代碼中,使用 grid-row-start屬性將第二個 div 元素的垂直起始位置設置為第 1 行。

          結果如下:

          (4)grid-row-end

          可以使用 grid-row-end 屬性來指定網格項沿網格容器內水平(行)網格線的垂直結束位置。

          例如:

          .container div:nth-of-type(2) {
             grid-row-start: 1;
             grid-row-start: 4;
          }
          

          這使得第二個網格項從第一行開始,跨越三個網格線,在第 4 行結束。使用 grid-row-startgrid-row-end 屬性,可以有效地控制網格項的垂直起始位置及其在網格中的高度。

          結果如下:

          (5)其他

          上面的四個屬性使用特定的網格線來確定網格項在網格內的位置,它們的屬性值有以下幾種:

          • <line>:可以是一個數字來指代相應編號的網格線,也可使用名稱指代相應命名的網格線;
          • span <number>:網格項將跨越指定數量的網格軌道;
          • span <name>:網格項將跨越一些軌道 ,直到遇到指定命名的網格線;
          • auto:自動布局,或者自動跨越,或者跨越一個默認的軌道。

          下面來看一個例子:

          .container div:nth-of-type(1) {
            grid-column-start: span 2;
          }
          

          這里使用 span 來表示第一個單元格跨越了2個網格。

          結果如下:

          下面來結合使用上面的四個屬性:

          .container div:nth-of-type(1) {
            grid-column-start: 1;
            grid-column-end: 3;
            grid-row-start: 2;
            grid-row-end: 4;
          }
          

          結果如下:

          10. 隱式網格軌道

          當我們設置的網格不足以放下所有的網格項時,就會自動出現一些網格軌道,這些多出來的行的高度是auto的,可以使用grid-auto-columnsgrid-auto-rows 屬性來指定自動生成的網格軌道(又稱為隱式網格軌道)的大小。

          例如:

          .container {
             display: grid;
             grid-auto-columns: 100px
             grid-auto-rows: 80px
          }
          

          這里, grid-auto-columns 屬性指定了隱式創建的網格垂直方向軌道的寬度為 100px,grid-auto-rows 屬性指定了隱式創建的網格水平方向軌道的高度為 80px。

          11. 速記屬性

          像大多數 CSS 屬性一樣,CSS Grid 提供了一些速記屬性,它們提供了一種更短、更先進的方式來同時設置多個 CSS Grid 屬性的值。使用這些速記屬性,我們就可以編寫更簡潔 更易讀的樣式,從而節省開發時間。下面就來看看這些屬性。

          (1)gap

          column-gaprow-gap 屬性用來設置網格之前的距離,即網格線的寬度。可以通過 gap屬性簡寫這兩個屬性,其語法如下:

          gap: <row-gap> <column-gap>
          

          其中 <column-gap> 是一個可選值,如果省略,則設置為與 <row-gap> 相同的值。下面來看一個例子:

          .container {
             display: grid;
             gap: 20px;
          }
          

          這在網格容器中的所有列和行之間都添加了 20px 的空間,與下面的代碼等價:

          .container { 
           display: grid; 
           column-row: 20px;
           row-gap: 20px;
          }
          

          (2)place-items

          place-items 用來設置 align-itemsjustify-items 屬性的值,它能夠同時控制所有網格項目的水平和垂直對齊。

          它接受兩個值:第一個值設置 align-items 屬性的值,第二個值設置 justify-items 屬性的值。如果未指定第二個值,則將第一個值指定為兩個屬性的值。

          例如:

          .container { 
           display: grid; 
           place-items: center; 
          }
          

          這會將 align-itemsjustify-items 屬性的值都設置為 center,將所有網格項放置在其網格區域的中心。

          (3)place-content

          place-content 用來設置網格屬性 align-contentjustify-content 的值,它能夠同時控制網格容器內整個網格的水平和垂直對齊方式。

          它接受兩個值:第一個值設置 align-content 屬性的值,第二個值設置 justify-content屬性的值。如果未指定第二個值,則將第一個值指定為兩個屬性的值。

          例如:

          .container { 
           display: grid; 
           place-content: center; 
          }
          

          這樣就會將 align-contentjustify-content 屬性的值都設置為 center,使整個網格在網格容器中水平和垂直居中。

          (4)place-self

          place-items 可以設置 align-selfjustify-self 屬性的值。它能夠控制單個網格項目在其網格區域內的水平和垂直對齊方式。

          它接受兩個值:第一個值設置 align-self 屬性的值,第二個值設置 justify-self 屬性的值。如果未指定第二個值,則將第一個值指定為兩個屬性的值。

          例如:

          .item { 
             place-self: end center;
          }
          

          在上面的代碼中,align-self 屬性的值設置為end,這會將網格項垂直向下推到其網格單元格的底部。justify-self 屬性設置為 center,將網格項目水平放置在其單元格的中心。

          結果如下:

          (5)grid-column

          grid-columngrid-column-startgrid-column-end 屬性的簡寫屬性。它可以指定網格項沿網格容器內的列網格線的水平起始位置以及網格項應該結束的位置。

          grid-column的語法如下:

          grid-column: column-start / column-end;
          

          grid-column 屬性接受兩個由斜線 (/) 分隔的網格線值,其中:

          • 第一個值 column-startgrid-column-start 屬性的值;
          • 第二個值 column-endgrid-column-end 屬性的值;
          • 斜杠 (/) 用作這兩個值之間的分界線,因為兩者都可以包含一個或多個空格。因此,需要通過斜線來消除錯誤和歧義。此外,作為最佳實踐,建議在斜杠 (/) 的兩側添加一哥空格,以使 CSS 更具可讀性。

          例如:

          .gird-item {
            grid-column: 1 / 3;
          }
          

          上面的代碼告訴網格項從網格中的第 1 列水平跨越到第 3 列,與下面的代碼等價:

          .gird-item {
            grid-column-start: 1;
            grid-column-end: 3;
          }
          

          (6)grid-row

          grid-row 屬性的工作方式與 grid-column 屬性一樣。它是 grid-row-startgrid-row-end 屬性的簡寫屬性。它可以指定網格項沿網格容器中的行網格線的垂直起始位置,以及網格項應該在網格中的何處結束。

          例如:

          .gird-item {
            grid-column: 2 / 5;
          }
          

          這就會使得網格項的高度從網格中的第 2 行向下跨越到第 5 行。

          grid-columngrid-row 屬性中也可以使用 span 關鍵字,以下兩者是等效的:

          .gird-item {
            grid-column: 1 / 3;
            grid-row: 1 / 3;
          }
          
          .gird-item {
            grid-column: 1 / span 2;
            grid-row: 1 / span 2;
          }
          

          斜杠后面的部分可以省略,表示跨越第一個網格。

          (7)grid-template

          grid-template-columns、grid-template-rows、grid-template-areas這三個屬性可以簡寫在grid-template屬性中。

          grid-template屬性有三個屬性值:

          • none:將三個屬性都設置為其初始值,即一行一列一個單元格;
          • subgrid:把grid-template-columnsgrid-template-rows設置為subgrid,并且把grid-template-areas設置為初始值;
          • grid-template-rows/grid-template-columns:將grid-template-columnsgrid-template-rows設為指定值,而grid-template-areas設置為none。

          (8)grid-area

          grid-area 屬性指定網格元素在網格布局中的大小和位置,它是grid-row-start、grid-column-start、grid-row-endgrid-column-end屬性的合并簡寫形式,其語法如下:

          grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
          

          對于下面這段代碼:

          .container div:nth-of-type(1) {
            grid-column-start: 1;
            grid-column-end: 3;
            grid-row-start: 2;
            grid-row-end: 4;
          }
          

          可以簡寫成這樣:

          .container div:nth-of-type(1) {
            grid-area: 2 / 1 / 4 / 3;
          }
          

          除此之外,grid-area 屬性還可以對網格元素進行命名。命名的網格元素可以通過容器的 grid-template-areas 屬性來引用。

          下面來看一個例子:

          .item1 { grid-area: header; }
          .item2 { grid-area: main; }
          .item3 { grid-area: sideber; }
          .item4 { grid-area: footer; }
           
          .container {
            grid-template-areas:
              'header header header'
              'menu main sideber'
              'footer footer footer';
          }
          

          結果如下:

          (9)grid

          grid 屬性可以為每個顯式網格容器屬性(例如 grid-template-rows、grid-template-columnsgrid-template-areas)以及每個隱式網格容器屬性設置一個值(例如 grid-auto-rowsgrid-auto-columnsgrid-auto-flow)在一個聲明中。

          grid 屬性的語法如下:

          <grid-template> | <grid-template-rows> / [ auto-flow && dense? ] <grid-auto-columns>? | [ auto-flow && dense? ] <grid-auto-rows>? / <grid-template-columns>
          

          12. CSS Grid 調試

          上面我們介紹了如何定義 CSS Grid 布局,那該如何調試呢?Chrome DevTools 支持對 Grid 布局進行提示。如果一個元素是 Grid 布局,在 DevTools 的 Elements 面板中,Grid 布局的容器元素上就會顯示一個 grid 的標識,如下:

          點擊這個 grid 標志,頁面的 grid 網格就會顯示數網格區域以及網格線,并且會為網格線進行編號,如下:

          下面切換到 Layout 選項卡,就可以看到 Grid 布局的一些選項,我們可以設置頁面上是否顯示軌道的寬度/高度,是否展示網格區域的名稱,是否顯示網格線的延長,是否顯示網格線的名稱。除此之外,還會顯示當前頁面上所有使用 Grid 布局的地方,可以進行顯示隱藏:

          通過這些選項,就可以對 CSS Grid 布局進行調試了。

          13. CSS Grid 生成器

          最后來分享幾個實用的 CSS Grid 生成器。通過這些生成器,可以可視化得調整 Grid 布局,最終會拿到生成的 Grid 布局代碼。

          (1)CSS Grid Generator

          在線體驗:https://cssgrid-generator.netlify.app/

          Github :https://github.com/sdras/cssgridgenerator




          (2)CSS Layout Generator

          在線體驗:https://layout.bradwoods.io/customize



          (3)Grid LayoutIt

          在線體驗:https://grid.layoutit.com/

          github : https://github.com/Leniolabs/layoutit-grid



          (4)Griddy

          在線體驗:https://griddy.io/



          (5)Cssgr.id

          在線體驗:https://cssgr.id/

          TML 支持有序、無序和定義列表

          實例

          無序列表

          [demo]

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <h4>一個無序列表:</h4>

          <ul>

          <li>咖啡</li>

          <li>茶</li>

          <li>牛奶</li>

          </ul>

          </body>

          </html>

          [/demo]

          本例演示無序列表。

          有序列表

          [demo]

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <ol>

          <li>咖啡</li>

          <li>牛奶</li>

          <li>茶</li>

          </ol>

          <ol start="50">

          <li>咖啡</li>

          <li>牛奶</li>

          <li>茶</li>

          </ol>

          </body>

          </html>

          [/demo]

          本例演示有序列表。

          無序列表

          無序列表是一個項目的列表,此列項目使用粗體圓點(典型的小黑圓圈)進行標記。

          無序列表始于 <ul> 標簽。每個列表項始于 <li>。

          <ul>

          <li>Coffee</li>

          <li>Milk</li>

          </ul>

          瀏覽器顯示如下:

          Coffee

          Milk

          列表項內部可以使用段落、換行符、圖片、鏈接以及其他列表等等。

          有序列表

          同樣,有序列表也是一列項目,列表項目使用數字進行標記。

          有序列表始于 <ol> 標簽。每個列表項始于 <li> 標簽。

          <ol>

          <li>Coffee</li>

          <li>Milk</li>

          </ol>

          瀏覽器顯示如下:

          Coffee

          Milk

          列表項內部可以使用段落、換行符、圖片、鏈接以及其他列表等等。

          定義列表

          自定義列表不僅僅是一列項目,而是項目及其注釋的組合。

          自定義列表以 <dl> 標簽開始。每個自定義列表項以 <dt> 開始。每個自定義列表項的定義以 <dd> 開始。

          <dl>

          <dt>Coffee</dt>

          <dd>Black hot drink</dd>

          <dt>Milk</dt>

          <dd>White cold drink</dd>

          </dl>

          瀏覽器顯示如下:

          Coffee

          Black hot drink

          Milk

          White cold drink

          定義列表的列表項內部可以使用段落、換行符、圖片、鏈接以及其他列表等等。

          更多實例

          不同類型的無序列表

          [demo]

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <h4>Disc 項目符號列表:</h4>

          <ul type="disc">

          <li>蘋果</li>

          <li>香蕉</li>

          <li>檸檬</li>

          <li>桔子</li>

          </ul>

          <h4>Circle 項目符號列表:</h4>

          <ul type="circle">

          <li>蘋果</li>

          <li>香蕉</li>

          <li>檸檬</li>

          <li>桔子</li>

          </ul>

          <h4>Square 項目符號列表:</h4>

          <ul type="square">

          <li>蘋果</li>

          <li>香蕉</li>

          <li>檸檬</li>

          <li>桔子</li>

          </ul>

          </body>

          </html>

          [/demo]

          本例演示一個無序列表。

          不同類型的有序列表

          [demo]

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <h4>數字列表:</h4>

          <ol>

          <li>蘋果</li>

          <li>香蕉</li>

          <li>檸檬</li>

          <li>桔子</li>

          </ol>

          <h4>字母列表:</h4>

          <ol type="A">

          <li>蘋果</li>

          <li>香蕉</li>

          <li>檸檬</li>

          <li>桔子</li>

          </ol>

          <h4>小寫字母列表:</h4>

          <ol type="a">

          <li>蘋果</li>

          <li>香蕉</li>

          <li>檸檬</li>

          <li>桔子</li>

          </ol>

          <h4>羅馬字母列表:</h4>

          <ol type="I">

          <li>蘋果</li>

          <li>香蕉</li>

          <li>檸檬</li>

          <li>桔子</li>

          </ol>

          <h4>小寫羅馬字母列表:</h4>

          <ol type="i">

          <li>蘋果</li>

          <li>香蕉</li>

          <li>檸檬</li>

          <li>桔子</li>

          </ol>

          </body>

          </html>

          [/demo]

          本例演示不同類型的有序列表。

          嵌套列表

          [demo]

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <h4>一個嵌套列表:</h4>

          <ul>

          <li>咖啡</li>

          <li>茶

          <ul>

          <li>紅茶</li>

          <li>綠茶</li>

          </ul>

          </li>

          <li>牛奶</li>

          </ul>

          </body>

          </html>

          [/demo]

          本例演示如何嵌套列表。

          嵌套列表 2

          [demo]

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <h4>一個嵌套列表:</h4>

          <ul>

          <li>咖啡</li>

          <li>茶

          <ul>

          <li>紅茶</li>

          <li>綠茶

          <ul>

          <li>中國茶</li>

          <li>非洲茶</li>

          </ul>

          </li>

          </ul>

          </li>

          <li>牛奶</li>

          </ul>

          </body>

          </html>

          [/demo]

          本例演示更復雜的嵌套列表。

          定義列表

          [demo]

          <html>

          <head>

          <meta charset="UTF-8">

          </head>

          <body>

          <h2>一個定義列表:</h2>

          <dl>

          <dt>計算機</dt>

          <dd>用來計算的儀器 ... ...</dd>

          <dt>顯示器</dt>

          <dd>以視覺方式顯示信息的裝置 ... ...</dd>

          </dl>

          </body>

          </html>

          [/demo]

          本例演示一個定義列表。

          列表標簽

          標簽 描述

          <ol> 定義有序列表。

          <ul> 定義無序列表。

          <li> 定義列表項。

          <dl> 定義定義列表。

          <dt> 定義定義項目。

          <dd> 定義定義的描述。

          <dir> 已廢棄。使用 <ul> 代替它。

          <menu> 已廢棄。使用 <ul> 代替它。


          主站蜘蛛池模板: 少妇一夜三次一区二区| 国产日韩高清一区二区三区| 精品一区二区三区免费毛片| 无码视频一区二区三区在线观看| 成人免费视频一区| 国产对白精品刺激一区二区| 国产在线精品一区二区中文| 色系一区二区三区四区五区| 精品国产一区二区麻豆| 亚洲国产一区在线观看| 国产自产在线视频一区| 一夲道无码人妻精品一区二区| 福利一区在线视频| 能在线观看的一区二区三区| 成人久久精品一区二区三区| 亚洲色无码专区一区| 国产日本亚洲一区二区三区| 91一区二区视频| 精品爆乳一区二区三区无码av| 人妻少妇精品视频一区二区三区| 国产成人精品一区二区三区免费 | 国产综合无码一区二区色蜜蜜| 日本无码一区二区三区白峰美 | 高清一区高清二区视频| 在线日韩麻豆一区| 乱中年女人伦av一区二区| 国产福利一区二区在线视频 | 日韩高清国产一区在线| 91一区二区视频| 中文字幕乱码亚洲精品一区| 少妇一晚三次一区二区三区| 色一情一乱一伦一区二区三欧美| 综合无码一区二区三区四区五区| 蜜桃AV抽搐高潮一区二区| 亚洲Av无码国产一区二区| 国产综合精品一区二区| 国产在线精品一区二区高清不卡| 无码人妻久久一区二区三区免费 | 国产婷婷色一区二区三区| 无码人妻精品一区二区| 亚洲av日韩综合一区久热|