整合營銷服務商

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

          免費咨詢熱線:

          css布局史 - grid一統天下

          近幾年,前端經歷了飛速發展,每隔幾個月,就有新的技術框架產生,如果你有1年多沒有接觸過它,那么再上手的時候,你一定會對它感到陌生,似乎一不留神,自己就已經被無情拋棄了。


          面對著js框架的飛速發展,得益于babel技術,瀏覽器可以很快地使用新的框架技術,vue,angular,react似乎也已經統治了好久好久。

          而作為前端三劍客的css呢?似乎css3已經是很久很久的事情了,久到了我們不知道它是否還在更新,css是否還有新的技術產生。

          雖然各種scss,stylus,less預處理器提高了我們代碼的開發和維護,但是css依然缺少一個一擊致命,一劍封喉的技術。

          慶幸的是,我們等到了grid的到來,它的到來宣布了css布局從此進入了grid時代。

          table布局

          早期的網頁布局是采用table的,也就是所有的內容都會放到table里面,如果想要內嵌布局,就會采用table嵌套table,那個時候可以說布局很簡單,因為就是使用table,但是table過于繁瑣,因此也產生了大量無用的代碼。

          div+css

          css浮動的出現,徹底解放了網頁布局,目前主流的網頁采用的都是div+css的布局,這種布局簡化了代碼結構,通過使用css來定位元素位置,可以說這種布局極大程度上網站的開發效率,同時網頁的可維護性也得到大大提高。

          grid王者到來

          首先我們看下grid的支持情況,從下面的圖片可以看到,主流瀏覽器都是支持的,特別是在最新版的ie也采用和chrome一樣的內核之后,可以說現在前端開發終于迎來了最幸福的時刻。



          這是一個非常棒的布局解決方案。自從網絡誕生以來,我們就一直在努力設計我們的網站,強迫他們去適應和使用那些不適合他們的方式。

          不過網格布局的出現,直接從瀏覽器解決了我們布局的復雜性,我們不再需要復雜的css來生成網格布局,不需要使用bootstrap這樣的網格框架來布局,我們可以使用簡單的grid布局來完成。

          使用grid的優點

          • 我們可以創建任意數量的網格。
          • fraction unit 使得控制布局比例非常方便。
          • repeat可以重復布局。
          • 最簡原則,只需要定義需要使用的行和列。
          • 網格支持命名


          如何使用

          1. 聲明 display:grid;
          2. 定義列 grid-template-columns: 100px 100px 100px;
          3. 設置間距,grid-row-gap: 20px;

          一篇文章說了HTML,現在再來說一說CSS,所謂CSS是指層疊樣式表 (Cascading Style Sheets),通過引入樣式表,從而極大的提高了工作效率。

          搭配視頻觀看效果更佳~~

          Web前端開發零基礎入門HTML/CSS/JavaScript

          https://www.ixigua.com/6907467670300393988


          什么是CSS?

          Cascading Style Sheet

          層疊樣式表語言(不是編程語言,屬于樣式表語言,沒有變量、數據類型、控制語句...)

          CSS其實是專門用來修飾HTML的,讓HTML更好看。

          CSS是HTML的化妝品。

          CSS是為HTML服務的,所以HTML還是主體,CSS是依附在HTML上的,

          所以進行CSS的開發,我們還是需要新建html/htm文件。

          在HTML中怎么嵌入CSS樣式呢?

          第一種方式:內聯定義

          第二種方式:定義內部樣式塊對象

          第三種方式:鏈入外部樣式表文件(這種方式最常用!)

          關于選擇器的優先級:

          • 標簽選擇器優先級最低。
          • 其次是類選擇器。
          • 最高優先級是id選擇器。

          CSS設置背景(background)

          • 背景顏色 background-color
          • 背景圖片 background-image
          • 背景重復 background-repeat:repeat-x/repeat-y
          • 背景位置 background-position:bottom/left/top/right/center
          • 背景關聯 background-attachment:fixed/scroll

          綜合寫法:

          .tagName{background:#ffffff url(“aa.jpg”) no-repeat right left;}

          CSS設置文本格式

          通過文本屬性,您可以改變文本的顏色、字符間距,對齊文本,裝飾文本,對文本進行縮進,等等。

          文本縮進 :Text-indent:2em

          文本對齊方式:Text-align:left/right/center/ justify

          文本修飾:Text-decoration:underline/line-through/overline/none

          字符間距:Word-spacing:px/em 英文單詞之間的間隔;

          Letter-spacing:px/em漢字和英文字母之間的間隔;

          文本轉換:Text-transform:uppercase/lowercase/ capitalize

          行與行間距:Line-height:px/%

          垂直對齊圖像: vertical-align:text-top/text-bottom

          文本陰影:text-shadow:水平偏移,垂直偏移 顏色

          字體

          字體類型:font-family:”sans-serif”;

          字體樣式:font-style:normal ;

          字體大小:font-size:20px/3.75em/100%;默認大小為16px,字體為宋體

          字體加粗:font-weight:normal;

          字體的轉變:font-variant:normal/smallcaps;

          CSS鏈接

          鏈接的四種狀態

          a:link {color:#FF0000;}     /* 未被訪問的鏈接 */
          a:visited {color:#00FF00;}  /* 已被訪問的鏈接 */
          a:hover {color:#FF00FF;}    /* 鼠標指針移動到鏈接上 */
          a:active {color:#0000FF;}   /* 正在被點擊的鏈接 */

          【注意】當為鏈接的不同狀態設置樣式時,請按照以下次序規則:

          a:hover 必須位于 a:link 和 a:visited 之后

          a:active 必須位于 a:hover 之后

          去掉a鏈接默認的下劃線

          text-decoration:{none/underline}

          a:link {text-decoration:none;}
          a:visited {text-decoration:none;}
          a:hover {text-decoration:underline;}
          a:active {text-decoration:underline;}

          創建鏈接塊

          display:block;

          列表樣式

          在一個無序列表中,列表項的標志 (marker) 是出現在各列表項旁邊的圓點。在有序列表中,標志可能是字母、數字或另外某種計數體系中的一個符號。

          要修改用于列表項的標志類型,可以使用屬性 list-style-type:

          ul {list-style-type : square;}

          上面的聲明把無序列表中的列表項標志設置為方塊。

          列表項圖像

          你可能想對各標志使用一個圖像,這可以利用 list-style-image 屬性做到:

          ul li {list-style-image : url(xxx.gif);}

          列表標志位置

          ul{
            list-style-position:inside;
            }

          CSS表格

          表格邊框

          table,th,td{border:1px solid red;}

          折疊邊框

          border-collapse:collapse;

          • 表格的寬度和高度

          width,height

          • 表格的文字水平對齊

          text-align:center/right/left;

          • 表格的文字垂直對齊

          vertical-align:bottom;

          • 表格的內邊距

          padding

          • 表格的背景顏色

          background

          盒子模型

          margin: 包括margin-top, margin-right, margin-bottom, margin-left, 控制塊級元素之間的距離, 它們是透明不可見的。

          根據上, 右, 下, 左的順時針規則, 簡寫為

          margin: 40px 40px 40px 40px;

          為便于記憶, 請參考下圖:

          當上下, 左右margin值分別一致, 可簡寫為:

          margin: 40px 40px;

          前一個40px代表上下margin值, 后一個40px代表左右margin值.

          當上下左右margin值均一致, 可簡寫為:

          margin: 40px;

          padding: 包括padding-top, padding-right, padding-bottom, padding-left, 控制塊級元素內部, content與border之間的距離

          【注意】當你想讓兩個元素的content在垂直方向(vertically)分隔時, 既可以選擇padding-top/bottom, 也可以選擇margin-top/bottom, 在此建議你盡量使用padding-top/bottom來達到你的目的, 這是因為css中存在Collapsing margins(折疊的margins)的現象.

          邊框

          • 邊框樣式:border-style:none/dotted/dashed/solid/double/groove/ridge/inset/outset/hidden
          • 邊框寬度:border-width
          • 邊框顏色:border-color

          綜合寫法:

          border:1px solid red;

          輪廓(outline)

          可以按順序設置如下屬性:

          • outline-color
          • outline-style
          • outline-width

          CSS所有尺寸

          • 寬度

          width/min-width/max-width

          • 高度

          height/min-height/max-height

          • 行高

          line-height

          display顯示類型

          隱藏元素—–display:none或者visibility:hiddden

          display通常可以設置為none、inline、block

          visibility通常可以設置為hidden、visible

          二者的區別在于display會將元素隱藏掉,并且位置不再被占據,而visibility則是占據原來的位置。

          CSS塊級元素和內聯元素—-display:block/inline/inline-block;

          CSS定位(position)

          position 屬性值的含義:

          static

          元素框正常生成。塊級元素生成一個矩形框,作為文檔流的一部分,行內元素則會創建一個或多個行框,置于其父元素中。

          relative

          元素框偏移某個距離。元素仍保持其未定位前的形狀,它原本所占的空間仍保留。

          absolute

          元素框從文檔流完全刪除,并相對于其包含塊定位。包含塊可能是文檔中的另一個元素或者是初始包含塊。元素原先在正常文檔流中所占的空間會關閉,就好像元素原來不存在一樣。元素定位后生成一個塊級框,而不論原來它在正常流中生成何種類型的框。

          fixed

          元素框的表現類似于將 position 設置為 absolute,不過其包含塊是視窗本身。

          CSS浮動

          設置浮動:float:left/right;

          清除浮動:clear:both/left/right/null;

          浮動的兩個影響因素:1、文檔流 2、顯示類型

          元素內容溢出

          • 溢出滾動條

          overflow:scroll(不管是否溢出都會有滾動條)、auto(自動添加)

          • 溢出隱藏

          overflow:hidden;

          CSS的相關特性

          1、繼承性

          它不僅允許樣式應用于某個特定的html標簽元素,而且還可引用于其后代;

          2、CSS層疊

          當有相同權重的樣式存在時,會根據這些CSS樣式的前后順序來決定,處于最后面的CSS樣式會被應用,后面的CSS樣式會覆蓋前面的樣式。

          總而言之:內聯樣式表(標簽內部)>嵌入樣式表(當前文件中)>外部樣式表(外部引入文件)

          這里是云端源想IT,幫你輕松學IT”

          嗨~ 今天的你過得還好嗎?

          生命是不倒行的

          也不與昨日一同停留

          - 2024.04.08 -

          隨著現代網頁設計的不斷演進,傳統的布局方式已經逐漸不能滿足設計師和開發者們對于高效、靈活且強大布局系統的追求。而CSS Grid網格布局,正是在這樣的背景下應運而生的。

          今天,我們就來深入探討CSS Grid布局的魅力所在,帶你解鎖這項強大的設計工具,讓網頁布局變得更加簡單和高效。


          一、什么是CSS Grid布局?

          CSS Grid布局,簡稱為Grid,是CSS的一個二維布局系統,它能夠處理行和列,使得網頁布局變得更加直觀和強大。與傳統的布局方式相比,Grid能夠輕松實現復雜的頁面結構,而無需繁瑣的浮動、定位或是使用多個嵌套容器。


          Grid網格布局是一種基于網格的布局系統,它允許我們通過定義行和列的大小、位置和排列方式來創建復雜的網頁布局。

          這與之前講到的flex一維布局不相同。


          設置display:grid/inline-grid的元素就是網格布局容器,這樣就能觸發瀏覽器渲染引擎的網格布局算法。

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

          上述代碼實例中,.container元素就是網格布局容器,.item元素就是網格的項目,由于網格元素只能是容器的頂層子元素,所以p元素并不是網格元素。


          二、Grid的基本概念

          首先,我們來了解一下CSS Grid布局的核心概念:


          容器(Container):

          設置了display: grid;的元素成為容器。它是由一組水平線和垂直線交叉構成,就如同我們所在的地區是由小區和各個路構成。


          項目(Item):

          容器內的直接子元素,稱為項目。


          網格線(Grid Lines):

          劃分行和列的線條,可以想象成坐標軸。正常情況下n行會有n+1根橫向網格線,m列有m+1根縱向網格線。比如田字就好像是一個三條水平線和三條垂直線構成的網格元素。

          上圖是一個 2 x 3 的網格,共有3根水平網格線和4根垂直網格線。

          行:

          即兩個水平網格線之間的空間,也就是水平軌道,就好比我們面朝北邊東西方向橫向排列的樓房稱為行。

          列:

          即兩個垂直網格線之間的空間,也就是垂直軌道,也就是南北方向排列的樓房。



          單元格:

          由水平線和垂直線交叉構成的每個區域稱為單元格,網絡單元格是CSS網格中的最小單元。也就是說東西和南北方向的路交叉后劃分出來的土地區域。

          網格軌道(Grid Tracks):

          兩條相鄰網格線之間的空間。

          網格區域(Grid Area):

          四條網格線圍成的空間,可以是行或列。本質上,網格區域一定是矩形的。例如,不可能創建T形或L形的網格區域。

          三、Grid的主要屬性

          CSS Grid網格布局的主要屬性包括:

          • display:設置元素為網格容器或網格項。例如,display: grid; 將元素設置為網格容器,而 display: grid-item; 將元素設置為網格項。
          • grid-template-columns 和 grid-template-rows:用于定義網格的列和行的大小。
          • grid-column-gap 和 grid-row-gap:用于定義網格的列和行的間距。
          • grid-template-areas:用于定義命名區域,以便在網格中引用。
          • grid-auto-flow:用于控制網格項的排列方式,可以是行(row)或列(column)。
          • grid-auto-columns 和 grid-auto-rows:用于定義自動生成的列和行的大小。
          • grid-column-start、grid-column-end、grid-row-start 和 grid-row-end:用于定義網格項的位置。
          • justify-items、align-items 和 place-items:用于對齊網格項。
          • grid-template:一個復合屬性,用于一次性定義多個網格布局屬性。



          下面將詳細介紹這些屬性的概念及作用:


          3.1 display

          通過給元素設置:display:grid | inline-grid,可以讓一個元素變成網格布局元素。

          語法:

          display: grid | inline-grid;


          • display: grid:表示把元素定義為塊級網格元素,單獨占一行;
          • display:inline-grid:表示把元素定義為行內塊級網格元素,可以和其他塊級元素在同一行。


          3.2 grid-template-columns和grid-template-rows

          grid-template-columns和grid-template-rows:用于定義網格的列和行的大小。

          • grid-template-columns 屬性設置列寬
          • grid-template-rows 屬性設置行高
          .wrapper {
          display: grid;
          /* 聲明了三列,寬度分別為 200px 200px 200px */
          grid-template-columns: 200px 200px 200px;
          grid-gap: 5px;
          /* 聲明了兩行,行高分別為 50px 50px */
          grid-template-rows: 50px 50px;
          }

          以上表示固定列寬為 200px 200px 200px,行高為 50px 50px。


          上述代碼可以看到重復寫單元格寬高,我們也可以通過使用repeat()函數來簡寫重復的值。

          • 第一個參數是重復的次數
          • 第二個參數是重復的值



          所以上述代碼可以簡寫成:

          .wrapper {
          display: grid;
          grid-template-columns: repeat(3,200px);
          grid-gap: 5px;
          grid-template-rows:repeat(2,50px);
          }

          除了上述的repeact關鍵字,還有:


          auto-fill:表示自動填充,讓一行(或者一列)中盡可能的容納更多的單元格。

          grid-template-columns: repeat(auto-fill, 200px)

          表示列寬是 200 px,但列的數量是不固定的,只要瀏覽器能夠容納得下,就可以放置元素。


          fr:片段,為了方便表示比例關系。

          grid-template-columns: 200px 1fr 2fr

          表示第一個列寬設置為 200px,后面剩余的寬度分為兩部分,寬度分別為剩余寬度的 1/3 和 2/3。



          minmax:產生一個長度范圍,表示長度就在這個范圍之中都可以應用到網格項目中。第一個參數就是最小值,第二個參數就是最大值。

          minmax(100px, 1fr)

          表示列寬不小于100px,不大于1fr。


          auto:由瀏覽器自己決定長度。

          grid-template-columns: 100px auto 100px

          表示第一第三列為 100px,中間由瀏覽器決定長度。


          3.3 grid-row-gap 屬性, grid-column-gap 屬性, grid-gap 屬性

          grid-column-gap和grid-row-gap,用于定義網格的列間距和行間距。grid-gap 屬性是兩者的簡寫形式。

          • grid-row-gap: 10px 表示行間距是 10px
          • grid-column-gap: 20px 表示列間距是 20px
          • grid-gap: 10px 20px 等同上述兩個屬性



          3.4 grid-auto-flow 屬性

          grid-auto-flow,用于控制網格項的排列方式,可以是行(row)或列(column)。

          • 劃分網格以后,容器的子元素會按照順序,自動放置在每一個網格。
          • 順序就是由grid-auto-flow決定,默認為行,代表"先行后列",即先填滿第一行,再開始放入第二行。

          當修改成column后,放置變為如下:


          3.5 justify-items 屬性, align-items 屬性, place-items 屬性

          justify-items、align-items和place-items,用于定義網格項目的對齊方式。

          • justify-items 屬性設置單元格內容的水平位置(左中右)
          • align-items 屬性設置單元格的垂直位置(上中下)
          .container {
          justify-items: start | end | center | stretch;
          align-items: start | end | center | stretch;
          }


          屬性對應如下:

          • start:對齊單元格的起始邊緣
          • end:對齊單元格的結束邊緣
          • center:單元格內部居中
          • stretch:拉伸,占滿單元格的整個寬度(默認值)

          place-items屬性是align-items屬性和justify-items屬性的合并簡寫形式。

          3.6 justify-content 屬性, align-content 屬性, place-content 屬性

          • justify-content屬性是整個內容區域在容器里面的水平位置(左中右)
          • align-content屬性是整個內容區域的垂直位置(上中下)
          .container {
          justify-content: start | end | center | stretch | space-around | space-between | space-evenly;
          align-content: start | end | center | stretch | space-around | space-between | space-evenly;
          }
          

          兩個屬性的寫法完全相同,都可以取下面這些值:

          • start - 對齊容器的起始邊框
          • end - 對齊容器的結束邊框
          • center - 容器內部居中
          • space-around - 每個項目兩側的間隔相等。所以,項目之間的間隔比項目與容器邊框的間隔大一倍。
          • space-between - 項目與項目的間隔相等,項目與容器邊框之間沒有間隔。
          • space-evenly - 項目與項目的間隔相等,項目與容器邊框之間也是同樣長度的間隔。
          • stretch - 項目大小沒有指定時,拉伸占據整個網格容器。



          3.7 grid-auto-columns 屬性和 grid-auto-rows 屬性

          有時候,一些項目的指定位置,在現有網格的外部,就會產生顯示網格和隱式網格。


          比如網格只有3列,但是某一個項目指定在第5行。這時,瀏覽器會自動生成多余的網格,以便放置項目。超出的部分就是隱式網格。


          而grid-auto-rows與grid-auto-columns就是專門用于指定隱式網格的寬高。


          3.8 grid-column-start 屬性、grid-column-end 屬性、grid-row-start 屬性以及grid-row-end 屬性

          指定網格項目所在的四個邊框,分別定位在哪根網格線,從而指定項目的位置。

          • grid-column-start 屬性:左邊框所在的垂直網格線
          • grid-column-end 屬性:右邊框所在的垂直網格線
          • grid-row-start 屬性:上邊框所在的水平網格線
          • grid-row-end 屬性:下邊框所在的水平網格線
          <style>
          #container{
          display: grid;
          grid-template-columns: 100px 100px 100px;
          grid-template-rows: 100px 100px 100px;
          }
          .item-1 {
          grid-column-start: 2;
          grid-column-end: 4;
          }
          </style>
          
          <div id="container">
          <div class="item item-1">1</div>
          <div class="item item-2">2</div>
          <div class="item item-3">3</div>
          </div>

          通過設置grid-column屬性,指定1號項目的左邊框是第二根垂直網格線,右邊框是第四根垂直網格線。

          3.9 grid-area 屬性

          grid-area 屬性指定項目放在哪一個區域。

          .item-1 {
          grid-area: e;
          }

          意思為將1號項目位于e區域

          grid-area屬性一般與上述講到的grid-template-areas搭配使用。

          想要快速入門前端開發嗎?推薦一個前端開發基礎課程,這個老師講的特別好,零基礎學習無壓力,知識點結合代碼,邊學邊練,可以免費試看試學,還有各種輔助工具和資料,非常適合新手!點這里前往學習哦!云端源想


          3.10 justify-self 屬性、align-self 屬性以及 place-self 屬性

          justify-self屬性設置單元格內容的水平位置(左中右),跟justify-items屬性的用法完全一致,但只作用于單個項目。


          align-self屬性設置單元格內容的垂直位置(上中下),跟align-items屬性的用法完全一致,也是只作用于單個項目。

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


          這兩個屬性都可以取下面四個值。

          • start:對齊單元格的起始邊緣。
          • end:對齊單元格的結束邊緣。
          • center:單元格內部居中。
          • stretch:拉伸,占滿單元格的整個寬度(默認值)


          四、Grid網格布局應用場景

          CSS Grid網格布局的應用場景非常廣泛,包括但不限于:

          1、創建復雜的網頁布局:

          CSS Grid網格布局可以輕松創建出復雜的網頁布局,如多列布局、不規則布局等。

          2、創建響應式設計:

          CSS Grid網格布局可以輕松實現響應式設計,通過調整網格的大小和間距,可以適應不同的屏幕尺寸。

          3、創建復雜的組件布局:

          CSS Grid網格布局也可以用于創建復雜的組件布局,如卡片布局、輪播圖布局等。

          總的來說,CSS Grid網格布局是一種強大的布局工具,可以幫助網頁設計者輕松創建出各種復雜的網頁布局。



          CSS Grid布局為我們提供了一個全新的視角來思考頁面布局,它讓復雜布局的實現變得簡單明了。隨著瀏覽器支持度的提高,未來的網頁設計將更加靈活和富有創意。


          掌握了CSS Grid布局,你就已經邁出了成為前端設計高手的重要一步。不斷實踐,不斷探索,你會發現更多Grid的神奇之處。



          今天就先講到這里了,

          更多前端開發基礎知識點擊文末閱讀原文查看哦!

          記得關注【云端源想IT】一起學編程!


          我們下期再見!


          END

          文案編輯|云端學長

          文案配圖|云端學長

          內容由:云端源想分享


          主站蜘蛛池模板: 少妇精品久久久一区二区三区| 无码精品人妻一区二区三区中| 亚洲AV无码第一区二区三区| 性色av无码免费一区二区三区| 久久婷婷色一区二区三区| 综合一区自拍亚洲综合图区| 久久er99热精品一区二区| 久久久精品日本一区二区三区| 麻豆精品人妻一区二区三区蜜桃| 国产一区视频在线| 国产在线观看一区二区三区精品| 国产伦一区二区三区免费| 中文字幕在线不卡一区二区| 亚洲国产一区二区a毛片| 国产亚洲一区二区精品| 中文国产成人精品久久一区| 亚洲av高清在线观看一区二区 | 波多野结衣av高清一区二区三区| 亚洲宅男精品一区在线观看| 亚洲电影国产一区| 亚洲国产情侣一区二区三区| 在线视频一区二区| 国产精品自拍一区| 一区二区三区视频观看| 国产成人久久一区二区不卡三区 | 在线视频亚洲一区| 另类ts人妖一区二区三区| 欧美日韩精品一区二区在线视频| 亚洲福利电影一区二区?| 精品国产一区二区三区不卡| 中文字幕av日韩精品一区二区| 日日摸夜夜添一区| 波多野结衣AV一区二区三区中文| 日本一道高清一区二区三区| 国产精品一区二区综合| 亚洲国产高清在线一区二区三区| 大伊香蕉精品一区视频在线| 国产一区二区中文字幕| 日本免费一区二区在线观看| 一区二区传媒有限公司| 日韩一区二区在线观看|