首頁 >web前端 >css教學 >重新設計站點以使用CSS網格佈局

重新設計站點以使用CSS網格佈局

Jennifer Aniston
Jennifer Aniston原創
2025-02-15 08:45:12341瀏覽

重新設計站點以使用CSS網格佈局

在本文中,我們將通過創建響應迅速的多列網站佈局來查看CSS電網。 如今,CSS網格是網絡開發的新趨勢。忘了桌子佈局和浮點:設計網站的新方法已經在這裡!這項技術引入了二維網格,該網格定義了使用少數CSS規則的佈局多個區域。

>網格可以製造第三方框架,例如960GS或Bootstrap Grid冗餘,因為您可以輕鬆地自己完成所有操作!儘管Internet Explorer實現了規格的較舊版本,但此功能都得到了所有主要瀏覽器的支持。

>

如果您是網格佈局的新手,請查看我們的初學者指南CSS網格指南。

鑰匙要點

> css網格佈局簡化了多列佈局的創建,消除了對諸如浮子和顯示桌子之類的舊技術的需求。 > 與傳統的CSS框架(如Bootstrap)相比

CSS網格的實現涉及定義一個具有顯示的容器:網格,設置列和行,並使用簡單的CSS規則將元素放入指定的網格區域。

> CSS網格本質上反應靈敏,可以使用最小的媒體查詢對不同屏幕尺寸的內容進行輕鬆重組。

對於不完全支持CSS網格的瀏覽器,例如Internet Explorer,使用內聯塊和媒體查詢的後備樣式可確保佈局仍然有效地呈現。
    > CSS網格和Flexbox可以合併以滿足複雜的設計要求,展示CSS電網在現代網絡設計中的兼容性和多功能性。
  • 我們要構建的
  • 因此,我們被要求創建一個典型的網站佈局,其中包含標頭,主內容區域,右側側邊欄,贊助商列表和頁腳:>
  • >另一個開發人員已經嘗試解決此任務,並提出了一個涉及浮點,顯示的解決方案:表格和一些Clearfix Hacks。我們將這種現有佈局稱為“初始”:>
  • 請參閱Pen SP:codepen上的sitepoint(@sitepoint)的浮子的多柱佈局。
  • 直到最近,浮子被認為是創建這種佈局的最佳選擇。在此之前,我們必須使用HTML表,但是它們有許多缺點。具體而言,此類佈局非常僵化,需要大量標籤(表,TR,TD,TH等),而這些標籤則使用這些標籤來顯示表數據,而不是設計佈局。

    ,但是CSS繼續發展,現在我們有了CSS網格。從概念上講,它類似於舊的表佈局,但可以使用具有更靈活的佈局的語義HTML元素。

    計劃網格

    首先:我們需要為文檔定義基本的HTML結構。在此之前,讓我們簡要討論最初的示例如何工作。它具有以下主要塊:

    • .Main-Header是包含.logo(佔據20%的空間,漂浮在左側的20%)和.main-menu(佔據79%的空間,漂浮在右側的79%)的標題。標題還分配了一個駭客修復程序以清除浮子。
    • .content-area-wrapper包裝主.CONTENT-AREA(佔據了66.6%的空間,負1REM保留了邊緣,左側漂浮在左側)和.sidebar(佔據了33.3%的空間,漂浮在右邊的33.3% )。包裝器本身也用clearfix分配了。
    • .sponsors-wrapper包含贊助商的徽標。在內部,有一個.spors部分,其中包含顯示屬性為表。每個贊助商依次顯示為表單元格。
    • .footer是我們的頁腳,並且跨越了100%的空間。
    • 我們的新佈局將與最初的佈局非常相似,但是除了一個例外:我們不會添加.main-header和.content-area-area-wrapper包裝器,因為不再需要clearfix。這是html的新版本:

    請注意,您可以將身體用作全局.Container;在這種情況下,這只是偏愛的問題。總而言之,我們有六個主要領域:
    <span><span><span><div</span> class<span>="container"</span>></span>
    </span>  <span><span><span><header</span> class<span>="logo"</span>></span>
    </span>    <span><span><span><h1</span>></span><span><span><a</span> href<span>="#"</span>></span>DemoSite<span><span></a</span>></span><span><span></h1</span>></span>
    </span>  <span><span><span></header</span>></span>
    </span>
      <span><span><span><nav</span> class<span>="main-menu"</span>></span>
    </span>    <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Our clients<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Products<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Contact<span><span></a</span>></span><span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></nav</span>></span>
    </span>
      <span><span><span><main</span> class<span>="content-area"</span>></span>
    </span>    <span><span><span><h2</span>></span>Welcome!<span><span></h2</span>></span>
    </span>
        <span><span><span><p</span>></span>
    </span>      Content
        <span><span><span></p</span>></span>
    </span>  <span><span><span></main</span>></span>
    </span>
      <span><span><span><aside</span> class<span>="sidebar"</span>></span>
    </span>    <span><span><span><h3</span>></span>Additional stuff<span><span></h3</span>></span>
    </span>
        <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span>></span>Items<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Are<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Listed<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Here<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Wow!<span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></aside</span>></span>
    </span>
      <span><span><span><section</span> class<span>="sponsors-wrapper"</span>></span>
    </span>    <span><span><span><h2</span>></span>Our sponsors<span><span></h2</span>></span>
    </span>
        <span><span><span><section</span> class<span>="sponsors"</span>></span>
    </span>      <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/150x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x100"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>    <span><span><span></section</span>></span>
    </span>
      <span><span><span></section</span>></span>
    </span>
      <span><span><span><footer</span> class<span>="footer"</span>></span>
    </span>    <span><span><span><p</span>></span>
    </span>      <span title="©">&copy; 2018 DemoSite. White&amp;Sons LLC. All rights (perhaps) reserved.
    </span>    <span><span><span></p</span>></span>
    </span>  <span><span><span></footer</span>></span>
    </span><span><span><span></div</span>></span>
    </span>

    徽標
    1. 菜單
    2. 主要內容
    3. sidebar
    4. 贊助商
    5. >頁腳
    6. 通常建議您實施一種移動優先的方法。也就是說,您是從移動佈局開始的,然後為大屏幕添加樣式。在這種情況下,這不是必需的,因為我們正在調整初始佈局,該佈局已經回到了小屏幕設備上的線性視圖。因此,讓我們首先關注電網的實現,然後再討論響應能力和後備規則。因此,返回我們的計劃,看看如何安排網格列:>

    >所以,我建議擁有三列(以紅色突出顯示)和四行(以藍色突出顯示)。某些區域(例如徽標)將僅佔據一列,而其他區域(如主內容)將跨越多列。稍後,我們可以輕鬆修改佈局,移動周圍的區域或添加新的區域。 重新設計站點以使用CSS網格佈局>

    遵循該方案,給每個區域一個唯一的名稱。這些將用於以下定義的佈局:

    >

    >現在將顯示屬性設置為網格,定義三列,並在主容器的左側和右側添加少量邊距:

    <span><span><span><div</span> class<span>="container"</span>></span>
    </span>  <span><span><span><header</span> class<span>="logo"</span>></span>
    </span>    <span><span><span><h1</span>></span><span><span><a</span> href<span>="#"</span>></span>DemoSite<span><span></a</span>></span><span><span></h1</span>></span>
    </span>  <span><span><span></header</span>></span>
    </span>
      <span><span><span><nav</span> class<span>="main-menu"</span>></span>
    </span>    <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Our clients<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Products<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Contact<span><span></a</span>></span><span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></nav</span>></span>
    </span>
      <span><span><span><main</span> class<span>="content-area"</span>></span>
    </span>    <span><span><span><h2</span>></span>Welcome!<span><span></h2</span>></span>
    </span>
        <span><span><span><p</span>></span>
    </span>      Content
        <span><span><span></p</span>></span>
    </span>  <span><span><span></main</span>></span>
    </span>
      <span><span><span><aside</span> class<span>="sidebar"</span>></span>
    </span>    <span><span><span><h3</span>></span>Additional stuff<span><span></h3</span>></span>
    </span>
        <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span>></span>Items<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Are<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Listed<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Here<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Wow!<span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></aside</span>></span>
    </span>
      <span><span><span><section</span> class<span>="sponsors-wrapper"</span>></span>
    </span>    <span><span><span><h2</span>></span>Our sponsors<span><span></h2</span>></span>
    </span>
        <span><span><span><section</span> class<span>="sponsors"</span>></span>
    </span>      <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/150x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x100"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>    <span><span><span></section</span>></span>
    </span>
      <span><span><span></section</span>></span>
    </span>
      <span><span><span><footer</span> class<span>="footer"</span>></span>
    </span>    <span><span><span><p</span>></span>
    </span>      <span title="©">&copy; 2018 DemoSite. White&amp;Sons LLC. All rights (perhaps) reserved.
    </span>    <span><span><span></p</span>></span>
    </span>  <span><span><span></footer</span>></span>
    </span><span><span><span></div</span>></span>
    </span>

    顯示:網格定義一個網格容器,並為其孩子設置特殊的格式上下文。 FR是一個特殊的單元,意思是“網格容器的自由空間的一部分”。 2 6 4給我們12,而6/12 = 0.5。這意味著中間的列將佔據自由空間的50%。

    >

    >我也想在行之間添加一些間距:>

    <span><span>.logo</span> {
    </span>  <span>grid-area: logo;
    </span><span>}
    </span>
    <span><span>.main-menu</span> {
    </span>  <span>grid-area: menu;
    </span><span>}
    </span>
    <span><span>.content-area</span> {
    </span>  <span>grid-area: content;
    </span><span>}
    </span>
    <span><span>.sidebar</span> {
    </span>  <span>grid-area: sidebar;
    </span><span>}
    </span>
    <span><span>.sponsors-wrapper</span> {
    </span>  <span>grid-area: sponsors;
    </span><span>}
    </span>
    <span><span>.footer</span> {
    </span>  <span>grid-area: footer;
    </span><span>}
    </span>
    完成此操作,我們可以與各個領域合作。但是,在結束本節之前,讓我們快速添加一些常見的樣式:

    <span><span>.container</span> {
    </span>  <span>display: grid;
    </span>  <span>margin: 0 2rem;
    </span>  <span>grid-template-columns: 2fr 6fr 4fr;
    </span><span>}
    </span>
    好!現在,我們可以前往第一個目標,這將是標題。 >

    設計標題

    >我們的標頭佔據了第一行,該排應該將特定的高度設置為3REM。在初始佈局中,通過為標頭包裝器分配高度屬性來解決:>

    >還請注意,徽標和菜單垂直與中間對齊,這是使用線路高技巧實現的:

    <span><span>.container</span> {
    </span>  // ...
      <span>grid-gap: 2rem 1rem;
    </span><span>}
    </span>

    使用CSS網格,事情將變得更簡單:我們不需要任何CSS hacks。

    <span>* {
    </span>  <span>box-sizing: border-box;
    </span><span>}
    </span>
    <span>html {
    </span>  <span>font-size: 16px;
    </span>  <span>font-family: Georgia, serif;
    </span><span>}
    </span>
    <span>body {
    </span>  <span>background-color: #fbfbfb;
    </span><span>}
    </span>
    <span>h1<span>, h2, h3</span> {
    </span>  <span>margin-top: 0;
    </span><span>}
    </span>
    <span>header h1 {
    </span>  <span>margin: 0;
    </span><span>}
    </span>
    <span>main p {
    </span>  <span>margin-bottom: 0;
    </span><span>}
    </span>
    從定義第一行開始:

    我們的徽標應僅佔據一列,而菜單應跨越兩個列。我們可以藉助網格 - 板序列屬性來表達我們的意圖,該屬性引用了上面分配的網格區域名稱:>

    <span><span>.main-header</span> {
    </span>  <span>height: 3rem;
    </span><span>}
    </span>
    這是怎麼回事?好吧,通過說徽標僅一次,我們確保它僅佔用一個徽標 - 最左側的專欄。菜單菜單意味著菜單佔有兩列:中間和最正確的一列。看看這個規則有多簡單!

    >

    現在,在y軸上對齊徽標:
    <span><span>.logo</span> {
    </span>  // ...
      <span>height: 100%;
    </span>  <span>line-height: 3rem;
    </span><span>}
    </span>

    菜單應垂直居中並向右拉動:>

    >我們的菜單是使用UL和LI標籤構建的,因此,我們還通過刪除標記,無效的邊距/撥片並將菜單設置為Flex容器來對它們進行一些樣式。
    <span><span>.container</span> {
    </span>  // ...
      <span>grid-template-rows: 3rem;
    </span><span>}
    </span>

    >就是這樣。為了觀察結果,我將使用啟用方便的CSS網格熒光筆工具使用Firefox。 (對於其他瀏覽器也有類似的工具:例如,Chrome的Gridman。)要訪問此工具,請按F12並選擇.Container元素,該元素應該具有網格標籤:

    >
    <span><span>.container</span> {
    </span>  // ...
      <span>grid-template-areas:
    </span>    <span>"logo menu menu";
    </span><span>}
    </span>

    <span><span>.logo</span> {
    </span>  <span>grid-area: logo;
    </span>  <span>align-self: center;
    </span><span>}
    </span>
    之後,繼續進行CSS規則選項卡,並找到顯示:網格屬性。通過按在網格值旁邊的小圖標上,您可以啟用或禁用熒光筆:

    重新設計站點以使用CSS網格佈局

    這是結果:

    重新設計站點以使用CSS網格佈局

    熒光筆顯示您的所有行和列以及它們與區域名稱之間的邊距。您可以自定義佈局部分中的輸出,該輸出還列出了頁面上的所有網格:>

    重新設計站點以使用CSS網格佈局

    >所以,我們已經處理了標題,所以讓我們繼續前往主要內容區域和側邊欄。

    主內容和側邊欄

    >我們的主要內容區域應跨兩列,而側邊欄應僅佔據一列。至於行,我希望它的高度自動設置。我們可以相應地更新.CONTAINER網格:

    >

    <span><span><span><div</span> class<span>="container"</span>></span>
    </span>  <span><span><span><header</span> class<span>="logo"</span>></span>
    </span>    <span><span><span><h1</span>></span><span><span><a</span> href<span>="#"</span>></span>DemoSite<span><span></a</span>></span><span><span></h1</span>></span>
    </span>  <span><span><span></header</span>></span>
    </span>
      <span><span><span><nav</span> class<span>="main-menu"</span>></span>
    </span>    <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Our clients<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Products<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Contact<span><span></a</span>></span><span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></nav</span>></span>
    </span>
      <span><span><span><main</span> class<span>="content-area"</span>></span>
    </span>    <span><span><span><h2</span>></span>Welcome!<span><span></h2</span>></span>
    </span>
        <span><span><span><p</span>></span>
    </span>      Content
        <span><span><span></p</span>></span>
    </span>  <span><span><span></main</span>></span>
    </span>
      <span><span><span><aside</span> class<span>="sidebar"</span>></span>
    </span>    <span><span><span><h3</span>></span>Additional stuff<span><span></h3</span>></span>
    </span>
        <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span>></span>Items<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Are<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Listed<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Here<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Wow!<span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></aside</span>></span>
    </span>
      <span><span><span><section</span> class<span>="sponsors-wrapper"</span>></span>
    </span>    <span><span><span><h2</span>></span>Our sponsors<span><span></h2</span>></span>
    </span>
        <span><span><span><section</span> class<span>="sponsors"</span>></span>
    </span>      <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/150x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x100"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>    <span><span><span></section</span>></span>
    </span>
      <span><span><span></section</span>></span>
    </span>
      <span><span><span><footer</span> class<span>="footer"</span>></span>
    </span>    <span><span><span><p</span>></span>
    </span>      <span title="©">&copy; 2018 DemoSite. White&amp;Sons LLC. All rights (perhaps) reserved.
    </span>    <span><span><span></p</span>></span>
    </span>  <span><span><span></footer</span>></span>
    </span><span><span><span></div</span>></span>
    </span>
    >我想為側邊欄添加一些填充物,以提供更多的視覺空間:>

    這是結果,如Firefox的網格工具中所述:
    <span><span>.logo</span> {
    </span>  <span>grid-area: logo;
    </span><span>}
    </span>
    <span><span>.main-menu</span> {
    </span>  <span>grid-area: menu;
    </span><span>}
    </span>
    <span><span>.content-area</span> {
    </span>  <span>grid-area: content;
    </span><span>}
    </span>
    <span><span>.sidebar</span> {
    </span>  <span>grid-area: sidebar;
    </span><span>}
    </span>
    <span><span>.sponsors-wrapper</span> {
    </span>  <span>grid-area: sponsors;
    </span><span>}
    </span>
    <span><span>.footer</span> {
    </span>  <span>grid-area: footer;
    </span><span>}
    </span>

    贊助商重新設計站點以使用CSS網格佈局

    贊助商部分應包含五個具有相等寬度和高度的項目。每個項目依次都會有一個圖像。

    在初始佈局中,此塊的樣式是顯示:表格,但我們不會依靠它。實際上,贊助商部分也可能是應用CSS網格的絕佳候選人!

    首先,調整網格 - 板截面以包括贊助商區域:

    現在,將.sponsors部分也變成一個網格:

    只要我們需要五個具有相等寬度的項目,重複()函數就可以用於定義列:>
    <span><span>.container</span> {
    </span>  <span>display: grid;
    </span>  <span>margin: 0 2rem;
    </span>  <span>grid-template-columns: 2fr 6fr 4fr;
    </span><span>}
    </span>
    對於行,應自動設置其高度。列之間的差距應等於1REM:

    <span><span>.container</span> {
    </span>  // ...
      <span>grid-gap: 2rem 1rem;
    </span><span>}
    </span>
    樣式每個項目:

    <span>* {
    </span>  <span>box-sizing: border-box;
    </span><span>}
    </span>
    <span>html {
    </span>  <span>font-size: 16px;
    </span>  <span>font-family: Georgia, serif;
    </span><span>}
    </span>
    <span>body {
    </span>  <span>background-color: #fbfbfb;
    </span><span>}
    </span>
    <span>h1<span>, h2, h3</span> {
    </span>  <span>margin-top: 0;
    </span><span>}
    </span>
    <span>header h1 {
    </span>  <span>margin: 0;
    </span><span>}
    </span>
    <span>main p {
    </span>  <span>margin-bottom: 0;
    </span><span>}
    </span>
    這是中間結果:

    <span><span>.main-header</span> {
    </span>  <span>height: 3rem;
    </span><span>}
    </span>

    >此示例說明您可以嵌套網格而沒有任何問題。另一個解決方案可能是使用Flexbox,但是在這種情況下,如果沒有足夠的寬度,則贊助商可能會包裝。
    <span><span>.logo</span> {
    </span>  // ...
      <span>height: 100%;
    </span>  <span>line-height: 3rem;
    </span><span>}
    </span>
    >

    >現在,我想將圖像垂直和水平居中。我們可能會嘗試執行以下操作:

    重新設計站點以使用CSS網格佈局位置對X和Y軸上的元素對齊。這是對自己的速記屬性和自我合理的。

    >

    圖像確實會對齊,但不幸的是,白色背景消失了。這是因為每個贊助器現在的寬度和高度等於圖像的尺寸:>

    <span><span>.container</span> {
    </span>  // ...
      <span>grid-template-rows: 3rem;
    </span><span>}
    </span>
    這意味著我們在這裡需要另一種方法,並且可能的解決方案之一是採用flexbox:>

    現在,一切都正確顯示了,現在我們知道網格與flexbox效果很好:

    重新設計站點以使用CSS網格佈局

    >頁腳

    我們的最後一部分是頁腳,實際上是最簡單的部分。我們要做的就是將其跨到所有三列:>

    <span><span><span><div</span> class<span>="container"</span>></span>
    </span>  <span><span><span><header</span> class<span>="logo"</span>></span>
    </span>    <span><span><span><h1</span>></span><span><span><a</span> href<span>="#"</span>></span>DemoSite<span><span></a</span>></span><span><span></h1</span>></span>
    </span>  <span><span><span></header</span>></span>
    </span>
      <span><span><span><nav</span> class<span>="main-menu"</span>></span>
    </span>    <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Our clients<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Products<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Contact<span><span></a</span>></span><span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></nav</span>></span>
    </span>
      <span><span><span><main</span> class<span>="content-area"</span>></span>
    </span>    <span><span><span><h2</span>></span>Welcome!<span><span></h2</span>></span>
    </span>
        <span><span><span><p</span>></span>
    </span>      Content
        <span><span><span></p</span>></span>
    </span>  <span><span><span></main</span>></span>
    </span>
      <span><span><span><aside</span> class<span>="sidebar"</span>></span>
    </span>    <span><span><span><h3</span>></span>Additional stuff<span><span></h3</span>></span>
    </span>
        <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span>></span>Items<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Are<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Listed<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Here<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Wow!<span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></aside</span>></span>
    </span>
      <span><span><span><section</span> class<span>="sponsors-wrapper"</span>></span>
    </span>    <span><span><span><h2</span>></span>Our sponsors<span><span></h2</span>></span>
    </span>
        <span><span><span><section</span> class<span>="sponsors"</span>></span>
    </span>      <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/150x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x100"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>    <span><span><span></section</span>></span>
    </span>
      <span><span><span></section</span>></span>
    </span>
      <span><span><span><footer</span> class<span>="footer"</span>></span>
    </span>    <span><span><span><p</span>></span>
    </span>      <span title="©">&copy; 2018 DemoSite. White&amp;Sons LLC. All rights (perhaps) reserved.
    </span>    <span><span><span></p</span>></span>
    </span>  <span><span><span></footer</span>></span>
    </span><span><span><span></div</span>></span>
    </span>
    基本上,佈局已經完成!但是,我們還沒有完成:該網站也必須響應迅速。因此,讓我們在下一節中照顧這項任務。

    >

    使佈局響應

    有CSS網格,實際上很容易引入響應能力,因為我們可以快速重新定位這些區域。

    大屏幕

    >讓我們從大屏幕開始(在本文中,我將堅持與Bootstrap 4中定義的相同的斷點)。我想降低主容器的水平邊緣和單個贊助商之間的差距:

    中等屏幕
    <span><span>.logo</span> {
    </span>  <span>grid-area: logo;
    </span><span>}
    </span>
    <span><span>.main-menu</span> {
    </span>  <span>grid-area: menu;
    </span><span>}
    </span>
    <span><span>.content-area</span> {
    </span>  <span>grid-area: content;
    </span><span>}
    </span>
    <span><span>.sidebar</span> {
    </span>  <span>grid-area: sidebar;
    </span><span>}
    </span>
    <span><span>.sponsors-wrapper</span> {
    </span>  <span>grid-area: sponsors;
    </span><span>}
    </span>
    <span><span>.footer</span> {
    </span>  <span>grid-area: footer;
    </span><span>}
    </span>

    >在中屏幕上,我希望主內容區域和側邊欄佔據所有三列:

    >還要降低字體尺寸並堆放贊助商,以便它們在另一個下方顯示。列之間的差距應為零(因為實際上只有一個列)。相反,我將在行之間設置差距:
    <span><span>.container</span> {
    </span>  <span>display: grid;
    </span>  <span>margin: 0 2rem;
    </span>  <span>grid-template-columns: 2fr 6fr 4fr;
    </span><span>}
    </span>

    這是現在中屏幕上的佈局外觀:
    <span><span>.container</span> {
    </span>  // ...
      <span>grid-gap: 2rem 1rem;
    </span><span>}
    </span>

    重新設計站點以使用CSS網格佈局小屏幕

    >在小屏幕上,我們將在單獨的一行上顯示每個區域,這意味著現在只有一個列:>

    在這種情況下,不應將菜單拉到右側,我們也不需要列之間的差距:

    <span>* {
    </span>  <span>box-sizing: border-box;
    </span><span>}
    </span>
    <span>html {
    </span>  <span>font-size: 16px;
    </span>  <span>font-family: Georgia, serif;
    </span><span>}
    </span>
    <span>body {
    </span>  <span>background-color: #fbfbfb;
    </span><span>}
    </span>
    <span>h1<span>, h2, h3</span> {
    </span>  <span>margin-top: 0;
    </span><span>}
    </span>
    <span>header h1 {
    </span>  <span>margin: 0;
    </span><span>}
    </span>
    <span>main p {
    </span>  <span>margin-bottom: 0;
    </span><span>}
    </span>
    工作完成:

    <span><span>.main-header</span> {
    </span>  <span>height: 3rem;
    </span><span>}
    </span>

    請注意,您甚至可以在各種屏幕上輕鬆地重新排列網格項目。假設我們想將菜單放在小屏幕上的菜單(以便訪問者在頁面上完成閱讀材料後不必滾動)。為此,只需調整網格 - 板序列:

    重新設計站點以使用CSS網格佈局

    在沒有媒體查詢的情況下做

    >值得一提的是,我們可以使贊助商完全不受任何媒體疑問而阻止響應。在自動擬合屬性和MinMax功能的幫助下,這是可能的。要查看它們的行動,請調整這樣的讚助商的樣式:
    <span><span>.logo</span> {
    </span>  // ...
      <span>height: 100%;
    </span>  <span>line-height: 3rem;
    </span><span>}
    </span>
    >

    您已經知道,重複功能在必要時重複了多次列。

    自動填充意思是“用盡可能多的列填充行”。如果列沒有足夠的空間,則將其放置在下一行。

    >
    <span><span>.container</span> {
    </span>  // ...
      <span>grid-template-rows: 3rem;
    </span><span>}
    </span>
    minmax允許我們指定列寬度的最小值和最大值。在這種情況下,每列應跨越1個自由空間的一部分,但不少於200個像素。

    所有這些意味著在較小的屏幕上,列可以縮小到最多的200px。如果仍然沒有足夠的空間,則將移動一條或多個列。這是應用上述CSS規則的結果:

    重新設計站點以使用CSS網格佈局

    後備

    不幸的是,所有瀏覽器尚未完全支持CSS網格,您可能會猜測哪個仍在實現規範的較舊版本。是的,它是Internet Explorer 10和11。如果您在這些瀏覽器中打開演示,您會發現網格根本不起作用,並且這些區域只是堆疊的:

    >

    重新設計站點以使用CSS網格佈局

    當然,這不是世界末日,因為該網站仍然可用,但至少添加一些後備規則。好消息是,如果元素被漂浮並也已分配,則網格優先。另外,顯示器,垂直空間和其他某些屬性也對網格項目沒有影響,因此讓我們利用這一事實。

    >堆疊的菜單看起來不錯,但是側邊欄可能應放在主要內容旁邊,而不是下面。我們可以使用顯示:inline-block:

    在所有支持網格的瀏覽器中,這些屬性都不會效果,但是在IE中,它們將按預期應用。我們需要調整的另一項屬性是寬度:

    <span><span><span><div</span> class<span>="container"</span>></span>
    </span>  <span><span><span><header</span> class<span>="logo"</span>></span>
    </span>    <span><span><span><h1</span>></span><span><span><a</span> href<span>="#"</span>></span>DemoSite<span><span></a</span>></span><span><span></h1</span>></span>
    </span>  <span><span><span></header</span>></span>
    </span>
      <span><span><span><nav</span> class<span>="main-menu"</span>></span>
    </span>    <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Our clients<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Products<span><span></a</span>></span><span><span></li</span>></span>
    </span>      <span><span><span><li</span> class<span>="main-menu__item"</span>></span><span><span><a</span> href<span>="#"</span>></span>Contact<span><span></a</span>></span><span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></nav</span>></span>
    </span>
      <span><span><span><main</span> class<span>="content-area"</span>></span>
    </span>    <span><span><span><h2</span>></span>Welcome!<span><span></h2</span>></span>
    </span>
        <span><span><span><p</span>></span>
    </span>      Content
        <span><span><span></p</span>></span>
    </span>  <span><span><span></main</span>></span>
    </span>
      <span><span><span><aside</span> class<span>="sidebar"</span>></span>
    </span>    <span><span><span><h3</span>></span>Additional stuff<span><span></h3</span>></span>
    </span>
        <span><span><span><ul</span>></span>
    </span>      <span><span><span><li</span>></span>Items<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Are<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Listed<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Here<span><span></li</span>></span>
    </span>      <span><span><span><li</span>></span>Wow!<span><span></li</span>></span>
    </span>    <span><span><span></ul</span>></span>
    </span>  <span><span><span></aside</span>></span>
    </span>
      <span><span><span><section</span> class<span>="sponsors-wrapper"</span>></span>
    </span>    <span><span><span><h2</span>></span>Our sponsors<span><span></h2</span>></span>
    </span>
        <span><span><span><section</span> class<span>="sponsors"</span>></span>
    </span>      <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/150x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x150"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/100x100"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>
          <span><span><span><figure</span> class<span>="sponsor"</span>></span>
    </span>        <span><span><span><img</span> src<span>="https://via.placeholder.com/200x200"</span>></span>
    </span>      <span><span><span></figure</span>></span>
    </span>    <span><span><span></section</span>></span>
    </span>
      <span><span><span></section</span>></span>
    </span>
      <span><span><span><footer</span> class<span>="footer"</span>></span>
    </span>    <span><span><span><p</span>></span>
    </span>      <span title="©">&copy; 2018 DemoSite. White&amp;Sons LLC. All rights (perhaps) reserved.
    </span>    <span><span><span></p</span>></span>
    </span>  <span><span><span></footer</span>></span>
    </span><span><span><span></div</span>></span>
    </span>
    >但是,添加了這些樣式後,我們的網格佈局現在看起來會更糟,因為網格項目不忽略寬度屬性

    >。可以藉助@supports CSS查詢來解決。 IE不了解這些查詢,但不需要:我們將使用它來修復網格!

    >
    <span><span>.logo</span> {
    </span>  <span>grid-area: logo;
    </span><span>}
    </span>
    <span><span>.main-menu</span> {
    </span>  <span>grid-area: menu;
    </span><span>}
    </span>
    <span><span>.content-area</span> {
    </span>  <span>grid-area: content;
    </span><span>}
    </span>
    <span><span>.sidebar</span> {
    </span>  <span>grid-area: sidebar;
    </span><span>}
    </span>
    <span><span>.sponsors-wrapper</span> {
    </span>  <span>grid-area: sponsors;
    </span><span>}
    </span>
    <span><span>.footer</span> {
    </span>  <span>grid-area: footer;
    </span><span>}
    </span>

    現在,讓我們照顧贊助商項目,並為每個塊添加一些最高邊距:> >在支撐網格時我們不需要任何最高邊距,因此將其在@supports查詢中無效:

    >
    <span><span>.container</span> {
    </span>  <span>display: grid;
    </span>  <span>margin: 0 2rem;
    </span>  <span>grid-template-columns: 2fr 6fr 4fr;
    </span><span>}
    </span>
    最後,讓我們為IE添加一些響應能力。我們只需將主要內容,側邊欄和每個贊助商拉伸到較小屏幕上的全寬度:

    >

    <span><span>.container</span> {
    </span>  // ...
      <span>grid-gap: 2rem 1rem;
    </span><span>}
    </span>
    不要忘記修復支持網格的瀏覽器的讚助商的寬度:

    這是Internet Explorer中的佈局外觀:>
    <span>* {
    </span>  <span>box-sizing: border-box;
    </span><span>}
    </span>
    <span>html {
    </span>  <span>font-size: 16px;
    </span>  <span>font-family: Georgia, serif;
    </span><span>}
    </span>
    <span>body {
    </span>  <span>background-color: #fbfbfb;
    </span><span>}
    </span>
    <span>h1<span>, h2, h3</span> {
    </span>  <span>margin-top: 0;
    </span><span>}
    </span>
    <span>header h1 {
    </span>  <span>margin: 0;
    </span><span>}
    </span>
    <span>main p {
    </span>  <span>margin-bottom: 0;
    </span><span>}
    </span>

    <span><span>.main-header</span> {
    </span>  <span>height: 3rem;
    </span><span>}
    </span>
    您可以在Codepen上查看最終結果:

    請參閱pen sp:codepen上的sitepoint(@sitepoint)帶網格的多柱佈局。
    <span><span>.logo</span> {
    </span>  // ...
      <span>height: 100%;
    </span>  <span>line-height: 3rem;
    </span><span>}
    </span>

    結論

    在本文中,我們看到了CSS網格在作用中,並利用了它來重新設計現有的基於浮點的佈局。比較這兩種解決方案,我們可以看到“網格”解決方案的HTML和CSS代碼較小(當然不計算後備),更簡單且更具表現力。借助網格 - 板塊區域屬性,很容易理解如何佈置各個區域,我們可以快速重新定位它們或調整其尺寸。最重要的是,我們不需要依靠諸如clearfix等各種駭人聽聞的技巧。

    >

    >因此,如您所見,CSS網格是浮子的絕佳選擇,並且已經準備好生產了。您可能需要為Internet Explorer提供一些後備規則(這實現了規範的較舊版本),但是如您所見,它們並不是很複雜,並且通常仍然可以使用該站點全部。

    您是否已經嘗試使用CSS網格創建網站?您的印像是什麼?在評論中分享您的想法!

    經常詢問有關CSS電網改造的問題

    > CSS網格改造在Web設計中的重要性是什麼?這是一個二維繫統,這意味著它可以處理列和行,這與Flexbox不同,這在很大程度上是一個維繫統。這使其成為創建適應不同屏幕尺寸和分辨率的響應設計的多功能工具。它還簡化了在容器中的項目中對齊和分配空間的過程,即使它們的大小是未知或動態的。由於其靈活性和易用性,改造從其他網格系統中脫穎而出。與其他需要大量編碼和計算的系統不同,CSS網格改造使開發人員可以使用最小的代碼創建複雜的佈局。它還提供了對元素的放置和對齊的更多控制權,使其成為許多開發人員的首選選擇。

    我可以將CSS網格改造用於移動響應設計嗎?是創建移動響應設計的絕佳工具。它允許開發人員使用媒體查詢為不同的屏幕尺寸定義不同的網格佈局。這意味著您可以為桌面視圖創建一個複雜的佈局,以及用於移動視圖的更簡單,更簡化的佈局,所有這些佈局都在同一CSS文檔中。

    CSS Grid Retrofit的瀏覽器兼容性問題是什麼? >

    CSS網格改造與大多數現代瀏覽器兼容,包括Chrome,Firefox,Safari和Edge。但是,在較舊的瀏覽器或版本中,它可能無法正常工作。在多個瀏覽器中測試您的設計始終是一個好習慣,以確保其按預期工作。

    >如何開始在項目中使用CSS網格改造?

    >開始使用CSS網格改造,您需要將容器元素定義為帶有顯示的網格:Grid:grid。然後,您可以使用網格 - 板塊柱和網格 - 板條排定義列和行大小,並將其子元素與網格元素一起使用網格和網格 - 列和網格行。使用其他佈局方法網格改造?

    是的,可以將CSS網格改造與其他佈局方法(如Flexbox)結合使用,例如Flexbox,以進行更複雜的設計。當您要創建一個部分靈活且部分固定的佈局時,這可能特別有用。改造包括使用命名網格區域,以更容易佈局管理,使用FR單元進行靈活的網格軌道以及在瀏覽器的開發人員工具中使用網格檢查器可視化和調試網格佈局。

    元素?

    css網格改造允許元素重疊,這可以是創建唯一佈局的強大工具。您可以控制與z index屬性重疊元素的堆疊順序。

    我可以將CSS網格改造用於垂直佈局嗎?

    是的,是的,CSS Grid Raturofit是一個二維繫統,是二維繫統,這意味著它可以處理列和行。這使其成為創建水平和垂直佈局的多功能工具。

    >

    >在使用CSS網格改造時,有哪些共同挑戰?

    >在與CSS網格翻新時有一些共同的挑戰包括處理瀏覽器兼容性問題,處理重疊元素以及在許多網格區域管理複雜佈局。但是,通過實踐和對網格屬性的良好理解,可以克服這些挑戰。

以上是重新設計站點以使用CSS網格佈局的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn