<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你可能不知道的 grid 實用功能!有時候真的很方便

          共 10089字,需瀏覽 21分鐘

           ·

          2024-04-12 02:59

          作者:欲買炸雞同載可樂 原文:https://juejin.cn/post/7326816030042669110

          flex布局大家應(yīng)該已經(jīng)運用的爐火純青了,相信在日常開發(fā)中大家和我一樣不管遇到什么都是flex一把搜哈。直到我遇到grid,才發(fā)現(xiàn)有些場景下,不是說flex實現(xiàn)不了而是使用grid能夠更加輕松的完成任務(wù)。下面拿幾個場景和大家分享一下。

          宮格類的布局

          比如我要實現(xiàn)一個布局,最外層元素的寬度是1000px,高度自適應(yīng)。子元素寬度為300px,一行展示3個,從左到右排列。其中最左邊與最右邊的元素需要緊挨父元素的左右邊框。如下圖所示:

          fa765716cb9e0cc28bf53e2871514faf.webp

          使用flex實現(xiàn)

          這個頁面布局在日常開發(fā)中非常常見,考慮下使用flex布局如何實現(xiàn),橫向排列元素,固定寬度300,wrap設(shè)置換行顯示,設(shè)置雙端對齊??雌饋砗芎唵?,來實現(xiàn)一下。

                
                <!DOCTYPE html>
          <html lang="en">

          <head>
              <style>
                  .box{
                      width1000px;
                      display: flex;
                      flex-wrap: wrap;
                      justify-content: space-between;
                      gap10px;
                  }
                  .item{
                      background: pink;
                      width300px;
                      height150px;
                  }
              
          </style>
          </head>

          <body>
              <div class="box">
                  <div class="item">1</div>
                  <div class="item">2</div>
                  <div class="item">3</div>
                  <div class="item">4</div>
                  <div class="item">5</div>
                  <div class="item">6</div>
                  <div class="item">7</div>
                  <div class="item">8</div>
              </div>
          </body>

          </html>
          30d77f9f8b7fa99a2a568fd52347f1fe.webp

          實現(xiàn)之后發(fā)現(xiàn)了問題,由于我們設(shè)置了雙端對齊導致,當最后一行的個數(shù)不足三個時,頁面展示的效果和我們預期的效果有出入。使用flex實現(xiàn)這個效果就要對這個問題進行額外的處理。

          處理的方式有很多種,最常見的處理方式是在元素后面添加空元素,使其成為3的倍數(shù)即可。其實這里添加空元素的個數(shù)沒有限制,因為空元素不會展示到頁面上,即使添加100個空元素用戶也是感知不到的。個人覺得這并不是一個好辦法,在實際處理的時候可能還會遇到別的問題。個人覺得還是把flex下的子元素設(shè)置成百分比好一點。

          使用grid實現(xiàn)

          面對這種布局使用grid是非常方便的,設(shè)置3列,每列300px,剩下的元素讓它自己往下排即可。幾行代碼輕松實現(xiàn)該效果,不需要flex那樣額外的處理。

                
                <!DOCTYPE html>
          <html lang="en">

          <head>
              <style>
                  .box {
                      display: grid;
                      grid-template-columnsrepeat(3300px);
                      justify-content: space-between;
                      gap10px;
                      width1000px;
                  }

                  .item {
                      background: pink;
                      height100px;
                  }
              
          </style>
          </head>

          <body>
              <div class="box">
                  <div class="item">1</div>
                  <div class="item">2</div>
                  <div class="item">3</div>
                  <div class="item">4</div>
                  <div class="item">5</div>
                  <div class="item">6</div>
                  <div class="item">7</div>
                  <div class="item">8</div>

              </div>
          </body>

          </html>
          819a69142e463ce4a2b18c92010033a3.webp

          實現(xiàn)后臺管理布局

          541fa3643a2bdd01e2be9a8b745edd87.webp

          這種后臺管理的布局,使用flex實現(xiàn)當然也沒有問題。首先需要縱向排列紅色的兩個div,然后再橫向的排列藍色的兩個div,最后再縱向的排列綠色的兩個div實現(xiàn)布局。達到效果是沒有問題的,但是實現(xiàn)起來較為繁瑣,而且需要很多額外的標簽嵌套。

          6c73ed6a894e76cf23f5c59b527cec0d.webp

          由于grid是二維的,所以它不需要額外的標簽嵌套。html里面結(jié)構(gòu)清晰,如果需要改變頁面結(jié)構(gòu),只需要改變container的樣式就可以了,不需要對html進行修改。

                
                <!DOCTYPE html>
          <html lang="en">

          <head>
              <style>
                  .container {
                      display: grid;
                      grid-template-columns250px 1fr;
                      grid-template-rows100px 1fr 100px;
                      grid-template-areas:
                          'header header'
                          'aside  main'
                          'aside footer';
                      height100vh;
                  }

                  .header {
                      grid-area: header;
                      background#b3c0d1;
                  }

                  .aside {
                      grid-area: aside;
                      background#d3dce6;
                  }

                  .main {
                      grid-area: main;
                      background#e9eef3;
                  }

                  .footer {
                      grid-area: footer;
                      background#b3c0d1;
                  }
              
          </style>
          </head>

          <body>
              <div class="container">
                  <div class="header">Header</div>
                  <div class="aside">Aside</div>
                  <div class="main">Main</div>
                  <div class="footer">Footer</div>
              </div>
          </body>

          </html>

          實現(xiàn)響應(yīng)式布局

          借助grid的auto-fillminmax函數(shù)可以實現(xiàn)類似響應(yīng)式布局的效果,可以應(yīng)用在后臺管理的表單布局等場景。

          9fa4c1456c76e7997c976ee73257a03a.webp
                
                <!DOCTYPE html>
          <html lang="en">

          <head>
              <style>
                  .box {
                      display: grid;
                      grid-template-columnsrepeat(auto-fill, minmax(300px1fr));
                      justify-content: space-between;
                      gap10px;
                  }

                  .item {
                      background: pink;
                      height100px;
                  }
              
          </style>
          </head>

          <body>
              <div class="box">
                  <div class="item">1</div>
                  <div class="item">2</div>
                  <div class="item">3</div>
                  <div class="item">4</div>
                  <div class="item">5</div>
                  <div class="item">6</div>
                  <div class="item">7</div>
                  <div class="item">8</div>
              </div>
          </body>

          </html>

          兼容性對比

          flex的兼容性

          61e2d3542d9d5aaac120c958ab359b73.webpimage.png

          grid的兼容性

          8f4dc5f3b4c5b5b9b5c9954a7bcfeda8.webpimage.png

          可以看到grid在兼容性上還是不如flex,grid雖然強大,但是在使用前還是需要先考慮一下項目的用戶群體。

          結(jié)尾

          除了上述場景外肯定還有許多場景適合使用grid來完成。gridflex都是強大的布局方式,它們并沒有明顯的優(yōu)劣之分。關(guān)鍵在于掌握這兩種方法,并在開發(fā)中根據(jù)實際情況選擇最合適的方案。

          希望大家能有所收獲!

          最后



          如果你覺得這篇內(nèi)容對你挺有啟發(fā),我想邀請你幫我個小忙:

          1. 點個「喜歡」或「在看」,讓更多的人也能看到這篇內(nèi)容

          2. 我組建了個氛圍非常好的前端群,里面有很多前端小伙伴,歡迎加我微信「sherlocked_93」拉你加群,一起交流和學習

          3. 關(guān)注公眾號「前端下午茶」,持續(xù)為你推送精選好文,也可以加我為好友,隨時聊騷。



          點個喜歡支持我吧,在看就更好了
          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  干逼视频免费 | 四虎成人精品永久免费AV九九 | 欧美黄色电影在线观看 | 九色蝌蚪9l视频蝌蚪9l视频 | 日韩电影一级片 |