自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用Flexbox和CSS Grid,實現(xiàn)高效布局

開發(fā) 前端
CSS 浮動屬性一直是網(wǎng)站上排列元素的主要方法之一,但是當實現(xiàn)復(fù)雜布局時,這種方法不總是那么理想。幸運的是,在現(xiàn)代網(wǎng)頁設(shè)計時代,使用 Flexbox 和 CSS Grid 來對齊元素,變得相對容易起來。

CSS 浮動屬性一直是網(wǎng)站上排列元素的主要方法之一,但是當實現(xiàn)復(fù)雜布局時,這種方法不總是那么理想。幸運的是,在現(xiàn)代網(wǎng)頁設(shè)計時代,使用 Flexbox 和 CSS Grid 來對齊元素,變得相對容易起來。

使用 Flexbox 可以使元素對齊變得容易,因此 Flexbox 已經(jīng)被廣泛使用了。

同時,CSS Grid 布局也為網(wǎng)頁設(shè)計行業(yè)帶來了很大的便利。雖然 CSS Grid 布局未被廣泛采用,但是瀏覽器逐漸開始增加對 CSS Grid 布局的支持。

雖然 Flexbox 和 CSS Grid 可以完成類似的布局,但是本次,我們學(xué)習(xí)的是如何組合使用這兩個工具,而不是只選擇其中的一個。在不久的將來,當 CSS Grid 布局獲得完整的瀏覽器支持時,設(shè)計人員就能夠利用每個 CSS 組合的優(yōu)勢,來創(chuàng)建最有效和最有趣的布局設(shè)計。

測試 Flexbox 和 CSS Grid 的基本布局

我們從一個很簡單且熟悉的布局類型開始,包括標題,側(cè)邊欄,主要內(nèi)容和頁腳等部分。通過這樣一個簡單的布局,來幫助我們快速找到各種元素的布局方法。

下面是需要創(chuàng)建的內(nèi)容:

 

要完成這個基本布局, Flexbox 需要完成的主要任務(wù)包括以下方面:

  • 創(chuàng)建完整寬度的 header 和 footer
  • 將側(cè)邊欄放置在主內(nèi)容區(qū)域左側(cè)
  • 確保側(cè)邊欄和主內(nèi)容區(qū)域的大小合適
  • 確保導(dǎo)航元素定位準確

基本 HTML 結(jié)構(gòu)

  1. <div class="container"
  2.     <header> 
  3.         <nav> 
  4.           <ul> 
  5.             <li></li> 
  6.             <li></li> 
  7.             <li></li> 
  8.           </ul> 
  9.         </nav> 
  10.         <button></button> 
  11.     </header> 
  12.     <div class="wrapper"
  13.         <aside class="sidebar"
  14.             <h3></h3> 
  15.         </aside> 
  16.         <section class="main"
  17.             <h2></h2> 
  18.             <p></p> 
  19.         </section
  20.     </div><!-- /wrapper --> 
  21.     <footer> 
  22.         <h3></h3> 
  23.         <p></p> 
  24.     </footer> 
  25. </div><! -- /container -->  

使用 Flexbox 創(chuàng)建布局

Header 樣式

我們從外到內(nèi),逐層開始設(shè)計,首先將 display: flex; 添加到 container,這也是所有 Flexbox 布局的***步。接著,將 flex-direction 設(shè)置為 column,確保所有部分彼此相對。

  1. .container { 
  2.     display: flex; 
  3.     flex-direction: column
  4.  

通過 display: flex; 自動創(chuàng)建一個全寬的 header(header 默認情況下是塊級元素)。通過這個聲明,導(dǎo)航元素的放置會變得很容易。

導(dǎo)航欄的左側(cè)有一個 logo 和兩個菜單項,右側(cè)有一個登錄按鈕。導(dǎo)航位于 header 中,通過 justify-content: space-between; 可以實現(xiàn)導(dǎo)航和按鈕之間的自動間隔。

在導(dǎo)航中,使用 align-items: baseline; 能夠?qū)崿F(xiàn)所有導(dǎo)航項目與文本基線的對齊,這樣也使得導(dǎo)航欄看起來更加統(tǒng)一。

 

代碼如下:

  1. header{ 
  2.     padding: 15px; 
  3.     margin-bottom: 40px; 
  4.     display: flex; 
  5.     justify-content: space-between
  6.   
  7. header nav ul { 
  8.     display: flex; 
  9.     align-items: baseline; 
  10.     list-style-type: none; 
  11.  

頁面內(nèi)容樣式

接下來,將側(cè)邊欄和主內(nèi)容區(qū)域使用一個 wrapper 包含起來。具有 .wrapper 類的 div,也需要設(shè)置 display: flex; 但是 flex 方向與上述不同。這是因為側(cè)邊欄和主內(nèi)容區(qū)域彼此相鄰而不是堆疊。

  1. .wrapper { 
  2.     display: flex; 
  3.     flex-direction: row; 

 

 

主內(nèi)容區(qū)域和側(cè)邊欄的大小設(shè)置非常重要,因為重要的信息都在這里展示。主內(nèi)容區(qū)域應(yīng)該是側(cè)邊欄大小的三倍,使用 Flexbox 很容易實現(xiàn)這點。

  1. .main { 
  2.     flex: 3; 
  3.     margin-right: 60px; 
  4.   
  5. .sidebar { 
  6.    flex: 1; 
  7.  

總的來說,F(xiàn)lexbox 在創(chuàng)建這個簡單的布局時,十分高效。尤其在控制列表元素樣式和設(shè)置導(dǎo)航與按鈕之間的間距方面,特別有用。

使用 CSS Grid 創(chuàng)建布局

為了測試效率,接下來使用 CSS Grid 創(chuàng)建相同的基本布局。

 

Grid 模板區(qū)域

CSS Grid 的方便之處在于,可以指定模板區(qū)域,這也使得定義布局變得非常直觀。采取這種方法,網(wǎng)格上的區(qū)域可以命名并引用位置項。對于這個基本布局,我們需要命名四個項目:

  • header
  • main content
  • sidebar
  • footer

基本 HTML 結(jié)構(gòu)

  1. <div class="container"
  2.     <header> 
  3.         <nav> 
  4.           <ul> 
  5.             <li></li> 
  6.             <li></li> 
  7.             <li></li> 
  8.           </ul> 
  9.         </nav> 
  10.         <button></button> 
  11.     </header> 
  12.     
  13.     <aside class="sidebar"
  14.         <h3></h3> 
  15.         <ul> 
  16.             <li></li> 
  17.             <li></li> 
  18.          <li></li> 
  19.          <li></li> 
  20.          <li></li> 
  21.         </ul> 
  22.     </aside> 
  23.   
  24.     <section class="main"
  25.         <h2></h2> 
  26.         <p></p> 
  27.         <p> </p> 
  28.     </section
  29.   
  30.     <footer> 
  31.         <h3></h3> 
  32.         <p></p> 
  33.     </footer> 
  34. </div>  

我們按照順序在 grid container 中定義這些區(qū)域,就像繪制它們一樣。

grid-template-areas:

“header header”

“sidebar main”

“footer footer”;

當前側(cè)邊欄位于左側(cè),主區(qū)域內(nèi)容位于右側(cè),如果需要,也可以輕松更改順序。

有一件事要注意:這些名字需要“連接”到樣式上。所以需要在 header block 中,添加 grid-area: header;。

  1. header{ 
  2.     grid-area: header; 
  3.     padding: 20px 0; 
  4.     display: grid; 
  5.     grid-template-columns: 1fr 1fr; 
  6.  

HTML 結(jié)構(gòu)與 Flexbox 示例中的相同,但 CSS 與創(chuàng)建網(wǎng)格布局完全不同。

  1. .container{ 
  2.     max-width: 900px; 
  3.     background-color: #fff; 
  4.     margin: 0 auto; 
  5.     padding: 0 60px; 
  6.     display: grid; 
  7.     grid-template-columns: 1fr 3fr; 
  8.     grid-template-areas: 
  9.         "header header" 
  10.         "sidebar main" 
  11.         "footer footer"
  12.     grid-gap: 50px; 
  13.  

使用 CSS Grid 布局時,在 container 中設(shè)置 display: grid; 非常重要。此處聲明 grid-template-columns,是為了確保頁面的整體結(jié)構(gòu)。這里 grid-template-column 已將側(cè)邊欄和主內(nèi)容區(qū)域大小設(shè)置為 1fr 和 3fr。fr 是網(wǎng)格的分數(shù)單位。

 

接下來,需要調(diào)整 header 容器中的 fr 單元。將 grid-template-columns 設(shè)置為 1fr 和 1fr。這樣 header 中就有兩個相同大小的列,放置導(dǎo)航項和按鈕會很合適。

  1. header{ 
  2.     grid-area: header; 
  3.     display: grid; 
  4.     grid-template-columns: 1fr 1fr; 
  5.  

 

要放置按鈕,我們只需要將 justify-self 設(shè)置為 end。

  1. header button { 
  2.     justify-self: end
  3.  

導(dǎo)航的位置按照以下方式設(shè)置:

  1. header nav { 
  2.  
  3.     justify-self: start; 
  4.  
  5.  

使用 Flexbox 和 CSS Grid 創(chuàng)建布局

***,我們通過組合 Flexbox 和 CSS Grid 來創(chuàng)建更復(fù)雜的布局。

基本的布局如下圖所示:

 

這種布局需要在行和列兩個方向上保持一致,所以使用 CSS Grid 實現(xiàn)整體布局十分有效。 

 

規(guī)劃對于布局的實現(xiàn)來說,十分重要。

接下來看看代碼如何一步步實現(xiàn)。首先 display: grid; 是基本設(shè)置,其次內(nèi)容塊之間的間距,可以通過 grid-column-gap 和 grid-row-gap 實現(xiàn)。

  1. .container { 
  2.   display: grid; 
  3.   grid-template-columns: 0.4fr 0.3fr 0.3fr; 
  4.   grid-column-gap: 10px; 
  5.   grid-row-gap: 15px; 
  6.  

列和行布局

Header 部分橫跨所有的列。

  1. .header { 
  2.   grid-column-start: 1; 
  3.   grid-column-end: 4; 
  4.   grid-row-start: 1; 
  5.   grid-row-end: 2; 
  6.   background-color: #d5c9e2; 
  7. } 

也可以使用簡寫,起始值和結(jié)束值位于同一行上,并用斜杠分隔。就像這樣:

  1. .header { 
  2.   grid-column: 1 / 4; 
  3.   grid-row: 1 / 2; 
  4.   background-color: #55d4eb; 
  5.  

完成網(wǎng)格布局的構(gòu)建之后,微調(diào)內(nèi)容就是下一步。

導(dǎo)航

Flexbox 非常適合放置 header 元素?;镜?header 布局需要設(shè)置 justify-content: space-between。

上面的 CSS Grid 布局示例中,需要在導(dǎo)航欄設(shè)置 justify-self:start;,在按鈕設(shè)置 justify-self: end;,但是如果使用 Flexbox,導(dǎo)航的間距會變得很容易設(shè)置。

  1. .header { 
  2.   grid-column: 1 / 4; 
  3.   grid-row: 1 / 2; 
  4.   color: #9f9c9c; 
  5.   text-transform: uppercase; 
  6.   border-bottom: 2px solid #b0e0ea; 
  7.   padding: 20px 0; 
  8.   display: flex; 
  9.   justify-content: space-between
  10.   align-items: center; 
  11.  

 

列內(nèi)容網(wǎng)格

將所需的元素排列在一個方向上,意味所有元素都處在同一橫向維度,通常Flexbox是實現(xiàn)這種布局的更好選擇。此外,F(xiàn)lexbox 可以動態(tài)調(diào)整元素。使用 Flexbox,可以將所有元素連成一條直線,這也確保了所有元素都具有相同的高度。

帶有文本和按鈕的行內(nèi)容

下圖是包含了“額外”文本和按鈕的三個區(qū)域。Flexbox 可以輕松設(shè)置三列的寬度。

  1. .extra { 
  2.   grid-column: 2 / 4; 
  3.   grid-row: 4 / 5; 
  4.   padding: 1rem; 
  5.   display: flex; 
  6.   flex-wrap: wrap; 
  7.   border: 1px solid #ececec; 
  8.   justify-content: space-between

 

設(shè)計方法總結(jié)

以上的布局設(shè)計中,使用了 CSS Grid 來進行整體布局(以及設(shè)計中的非線性部分)。對于網(wǎng)格內(nèi)容區(qū)域的設(shè)計,使用 Flexbox 進行樣式的排序和微調(diào)會更容易實現(xiàn)。 

責(zé)任編輯:龐桂玉 來源: 前端大全
相關(guān)推薦

2024-04-09 10:10:23

GridCSS網(wǎng)格

2023-02-07 09:01:22

CSS

2022-10-13 09:01:24

GridCSS二維布局

2020-03-26 10:43:57

CSS Grid Ge Grid代碼

2021-12-01 09:53:46

CSS 技巧代碼重構(gòu)

2022-10-08 00:02:00

CSS工具系統(tǒng)

2022-08-01 08:02:25

單元格可視化語法

2025-04-27 09:12:42

2017-07-10 13:09:45

前端Flexbox

2021-04-12 08:01:21

GridFlexbox網(wǎng)格

2018-08-08 15:57:05

csshtml前端

2023-10-30 09:18:28

CSSColumns布局

2022-11-16 09:27:58

flexbox左右布局均分布局

2022-04-15 14:57:57

Flex布局鴻蒙操作系統(tǒng)

2024-09-18 00:00:05

Grid場景技術(shù)

2020-12-28 07:52:50

CSS網(wǎng)站Header

2025-04-08 05:55:00

CSS布局Grid

2017-03-12 10:38:56

Chromewindows

2022-03-23 08:01:36

CSSGrid小游戲

2017-05-24 10:12:54

前端FlexboxCSS3
點贊
收藏

51CTO技術(shù)棧公眾號