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

使用網(wǎng)絡(luò)構(gòu)建復(fù)雜布局超實用的技巧,趕緊收藏吧!

網(wǎng)絡(luò) 通信技術(shù)
網(wǎng)格布局是現(xiàn)代CSS中最強大的功能之一。使用網(wǎng)格布局可以幫助我們在沒有任何外部 UI 框架的情況下構(gòu)建復(fù)雜的、快速響的布局。在這篇文章中,將會介紹所有我們需要了解的 CSS 網(wǎng)格知識。

 [[348361]]

本文已經(jīng)作者 soshace 授權(quán)翻譯!

網(wǎng)格布局是現(xiàn)代CSS中最強大的功能之一。使用網(wǎng)格布局可以幫助我們在沒有任何外部 UI 框架的情況下構(gòu)建復(fù)雜的、快速響的布局。在這篇文章中,將會介紹所有我們需要了解的 CSS 網(wǎng)格知識 。

CSS 網(wǎng)格的基礎(chǔ)知識

我們直接進入代碼,如下所示,先寫些標(biāo)簽,源碼在這個鏈接里面:https://codepen.io/Shadid/pen/zYqNvgv

  1. <div class="container"
  2.   <header>Header</header> 
  3.   <aside>Aside 1</aside> 
  4.   <section>Section</section
  5.   <aside>Aside 2</aside> 
  6.   <footer>Footer</footer> 
  7. </div> 

在上面,我們創(chuàng)建了一個header、兩個aside和一個footer元素,并將它們包裝在一個container 元素中。我們?yōu)槿萜髟刂械乃性靥砑颖尘吧妥煮w大小。

  1. .container > * { 
  2.   background: aquamarine; 
  3.   font-size: 30px; 

運行的網(wǎng)頁如下:

現(xiàn)在我們添加一些網(wǎng)格屬性:

  1. .container { 
  2.   display: grid; 
  3.   grid-gap: 5px; 
  4.   grid-template-areas:  
  5.     "header" 
  6.     "aside-1" 
  7.     "aside-2" 
  8.     "section" 
  9.     "footer" 
  10.  
  11. /* Assign grid areas to elements */ 
  12. header { 
  13.   grid-area: header; 
  14.  
  15. aside:nth-of-type(1) { 
  16.   grid-area: aside-1; 
  17.  
  18. aside:nth-of-type(2) { 
  19.   grid-area: aside-2; 
  20.  
  21. section { 
  22.   grid-area: section
  23.  
  24. footer { 
  25.   grid-area: footer; 

首先,我們定義了display:grid,它將啟用網(wǎng)格布局,然后我們使用grid-gap在網(wǎng)格元素中增加間隙。

接下來,我們?yōu)槊總€html元素分配了一個網(wǎng)格區(qū)域名稱。在container 類中,我們可以使用grid-template-areas`屬性定 義html 模板的外觀,注意網(wǎng)格模板區(qū)域是如何排列的。

  1. grid-template-areas:  
  2.     "header" 
  3.     "aside-1" 
  4.     "aside-2" 
  5.     "section" 
  6.     "footer"  

元素的順序與 dom 結(jié)構(gòu)不同。但是,最終按我們網(wǎng)絡(luò)區(qū)域的順序來展示。

下一步是使我們的頁面具有響應(yīng)性。我們希望在更大的屏幕上使用不同的布局。CSS網(wǎng)格使得處理媒體查詢和創(chuàng)建響應(yīng)式布局變得非常容易??聪旅娲a:

  1. @media (min-width: 670px) { 
  2.   .container { 
  3.     grid-template-areas:  
  4.       "header  header  header" 
  5.       "aside-1 section  aside-2" 
  6.       "footer    footer    footer" 
  7.   } 

我們所要做的就是在媒體查詢中重新排序網(wǎng)格模板區(qū)域。

網(wǎng)格列和行

如何使用 CSS 網(wǎng)格來組織列和?先從下面的代碼開始:

  1. <div class="container"
  2.   <div class="item">One</div> 
  3.   <div class="item">Two</div> 
  4.   <div class="item">Three</div> 
  5.   <div class="item">Four</div> 
  6.   <div class="item">Five</div> 
  7.   <div class="item">Six</div> 
  8. </div> 

添加一些基本的 css

  1. .container { 
  2.   display: grid; 
  3.   height: 100vh; 
  4.   grid-gap: 10px; 
  5.  
  6. .item { 
  7.   background: lightcoral; 

我們?yōu)樯厦娴?dom 結(jié)構(gòu)使用了網(wǎng)格布局,并使用grid-gap增加了風(fēng)格之間的間距。現(xiàn)在,我們使用grid-template-columns屬性來添加一些列。

  1. .container { 
  2.     display: grid; 
  3.     height: 100vh; 
  4.     grid-gap: 10px; 
  5.     grid-template-columns: 100px 200px auto auto; 

就像這樣,我們使用了列。我們指定第一列為100px,第二列為200px。由于我們在第3列和第4列中應(yīng)用了auto,因此剩余的屏幕長度將在其中分成兩半。

可以看到現(xiàn)在頁面中有一個空白。如果我想將第六列移至第三列和第四列怎么辦?為此,我們可以使用grid-column-start和grid-column-end屬性。

  1. .item:nth-of-type(6) { 
  2.   grid-column-start: 3; 
  3.   grid-column-end: 5; 

注意,我們使用grid-column-end: 5,值5指向列線。第四列在網(wǎng)格的第五行結(jié)束。grid-column-start和grid-column-end值是指網(wǎng)格線。

如果你覺得網(wǎng)格線的值讓人困惑,你也可以使用span,下面的效果與上面一樣:

  1. .item:nth-of-type(6) { 
  2.   grid-column-start: 3; 
  3.   grid-column-end: span 2; 

對于span 2,指定div占用網(wǎng)格中的兩個插槽。現(xiàn)在,假設(shè)要擴展第二列填充下面的空白區(qū)域。我們也可以通過grid-column-start屬性輕松地做到這一點。

  1. .item:nth-of-type(2) { 
  2.   grid-row-start: span 2; 

我們使用span和grid-row-start來指定我們想要占據(jù)兩個插槽。

如上所見,我們已經(jīng)能夠使用少量的CSS網(wǎng)格屬性來構(gòu)建非常復(fù)雜的布局。

有效地使用 grid-templates

現(xiàn)在來看看grid-templates,在本節(jié)中,我們將討論如何為不同的屏幕大小創(chuàng)建不同的布局。

首先,還是先來一段 dom 結(jié)構(gòu):

  1. <div class="container"
  2.   <header>header</header> 
  3.   <aside>Left</aside> 
  4.   <section>Section</section
  5.   <aside>Right</aside> 
  6.   <footer>Footer</footer> 
  7. </div> 

接著,添加一些樣式:

  1. `` .container { display: grid; height: 100vh; grid-gap: 10px; } 
  2. .container > * { background: coral; display: flex; justify-content: center; align-items: center; }` `` 

我們給元素添加了背景色。從上面的代碼中可以看到,我們也使用了flex屬性。我們可以將flex和grid結(jié)合在一起。在這個特殊的例子中,我們使用flex屬性中心對齊內(nèi)容。

對于移動端,我們希望section在header下面,right 在 section 下面,我們可以使用網(wǎng)格區(qū)域來完成。首先,我們定義網(wǎng)格區(qū)域:

  1. .container { 
  2.   display: grid; 
  3.   height: 100vh; 
  4.   grid-gap: 10px; 
  5.   grid-template-areas:  
  6.    "header" 
  7.     "section" 
  8.     "right" 
  9.     "left" 
  10.     "footer" 
  11.  
  12. aside:nth-of-type(1) { 
  13.   grid-area: left
  14.  
  15. aside:nth-of-type(2) { 
  16.   grid-area: right
  17.  
  18. section { 
  19.   grid-area: section
  20.  
  21. footer { 
  22.   grid-area: footer; 
  23.  
  24. header { 
  25.   grid-area: header; 

在 grid-template-areas 中可以看到,我們先有header ,然后是section,然后是right,最后是left。此外,我們希望我們的section比 left 和 right都大點。為了實現(xiàn)這一點,我們可以使用rid-template-rows屬性 

  1. .container { 
  2.   display: grid; 
  3.   height: 100vh; 
  4.   grid-gap: 10px; 
  5.   grid-template-areas:  
  6.     "header" 
  7.     "section" 
  8.     "right" 
  9.     "left" 
  10.     "footer"
  11.   grid-template-rows: 1fr 6fr 2fr 2fr 1fr; 

少了一張圖片

我們可以根據(jù)需要設(shè)置移動端的視圖,接下我們使用媒體查詢來適配一下大屏幕:

  1. @media (min-width: 500px)  { 
  2.   .container { 
  3.     grid-template-areas:  
  4.       "header header  header" 
  5.       "left   section right" 
  6.       "footer footer  right"
  7.     grid-template-rows: 1fr 6fr 1fr; 
  8.     grid-template-columns: 1fr 6fr 1fr; 
  9.   } 

如何使用minmax函數(shù)動態(tài)跟蹤元素的大小

假設(shè)我們有兩列,它們均勻地占據(jù)了屏幕上的可用空間。通過使用 grid-template-columns,我們可以很容易地做到這一點。但是,如果我們想要其中一個在200px到500px之間呢?我們的列可以適應(yīng)不同的屏幕尺寸,但其中一個永遠不會大于500px或小于200px。

對于這些類型的場景,我們使用minmax函數(shù)。讓我們來看看它的實際效果。

  1. <div class="container"
  2.   <div class="one">One</div> 
  3.   <div class="two">Two</div> 
  4. </div> 
  1. .container { 
  2.   display: grid; 
  3.   height: 100vh; 
  4.   grid-template-columns: minmax(200px, 500px) minmax(100px, auto); 
  5. .one { 
  6.   background: cyan; 
  7. .two { 
  8.   background: pink; 

在這個例子中,第一列總是在200px到500px之間。然而,第二列的最小值可以是100px,對于更大的屏幕,它將覆蓋屏幕的其余部分。

如何使用 repeat 函數(shù)?

我們討論一下元素中的重復(fù)模式。我們?nèi)绾翁幚硭鼈?我們可以重復(fù)我們的代碼或使用javascript。不過,還有另一種方法可以用css來實現(xiàn)。repeat函數(shù)表示軌道列表的一個重復(fù)片段,允許以更緊湊的形式編寫顯示重復(fù)模式的大量列或行。

  1. <div id="container"
  2.   <div> 
  3.     This item is 50 pixels wide. 
  4.   </div> 
  5.   <div> 
  6.     Item with flexible width. 
  7.   </div> 
  8.   <div> 
  9.     This item is 50 pixels wide. 
  10.   </div> 
  11.   <div> 
  12.     Item with flexible width. 
  13.   </div> 
  14.   <div> 
  15.     Inflexible item of 100 pixels width. 
  16.   </div> 
  17. </div> 
  1. #container { 
  2.   display: grid; 
  3.   grid-template-columns: repeat(2, 50px 1fr) 100px; 
  4.   grid-gap: 5px; 
  5.   box-sizing: border-box; 
  6.   height: 200px; 
  7.   width: 100%; 
  8.   background-color: #8cffa0; 
  9.   padding: 10px; 
  10.  
  11. #container > div { 
  12.   background-color: #8ca0ff; 
  13.   padding: 5px; 

嵌套網(wǎng)格

我還可以將網(wǎng)格嵌套在另一個網(wǎng)格中, 來看看如何實現(xiàn)這一點:

  1. <div class="container"
  2.   <div class="item">One</div> 
  3.   <div class="item">Two</div> 
  4.   <div class="item">Three</div> 
  5.   <div class="item inner-grid"
  6.     <div class="item">i</div> 
  7.     <div class="item">ii</div> 
  8.     <div class="item">iii</div> 
  9.     <div class="item">iv</div> 
  10.     <div class="item">v</div> 
  11.     <div class="item">vi</div> 
  12.   </div> 
  13.   <div class="item">Five</div> 
  14.   <div class="item">Six</div> 
  15. </div> 

我們首先在外部container上聲明網(wǎng)格:

  1. .container { 
  2.   display: grid; 
  3.   height: 100vh; 
  4.   grid-gap: 10px; 
  5.   grid-template-columns: repeat(auto-fill, minmax(200px, auto)) 

注意,我們在網(wǎng)格模板中有一個repeat函數(shù),并將其與一個minmax函數(shù)組合在一起。我們現(xiàn)在也可以將網(wǎng)格屬性應(yīng)用到內(nèi)部網(wǎng)格。

  1. .inner-grid { 
  2.   display: grid; 
  3.   background: white; 
  4.   height: 100%; 
  5.   grid-gap: 5px; 
  6.   grid-template-columns: repeat(3, auto); 

這樣,我們網(wǎng)格中嵌套了一個網(wǎng)格。

今天就跟大家分享到這里,感謝大家的觀看,我們下期再見!

作者:Shadid Haque 譯者:前端小智 來源:soshace

原文:https://blog.soshace.com/how-to-build-complex-layouts-with-css-grid/

 本文轉(zhuǎn)載自微信公眾號「大遷世界」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系大遷世界公眾號。

 

責(zé)任編輯:武曉燕 來源: 大遷世界
相關(guān)推薦

2020-05-28 08:59:40

Python機器學(xué)習(xí)開發(fā)

2023-11-27 13:53:00

Java數(shù)據(jù)轉(zhuǎn)換

2021-07-19 07:55:24

JavaScript技巧實踐

2022-07-15 14:54:00

DockerLinux技巧

2021-11-03 08:04:41

電腦快捷鍵電腦硬件

2021-03-12 10:01:33

Sudo命令Linux

2020-04-20 10:10:52

Python數(shù)據(jù)可視化數(shù)據(jù)科學(xué)

2013-09-23 09:18:16

云網(wǎng)絡(luò)延遲云網(wǎng)絡(luò)內(nèi)容交付網(wǎng)絡(luò)

2021-05-11 08:32:13

數(shù)據(jù)表單設(shè)計

2011-03-16 10:12:32

2024-02-19 07:12:21

Win11操作系統(tǒng)技巧

2022-07-29 09:01:20

Chrome試源代碼調(diào)試技巧

2020-11-25 09:55:40

數(shù)據(jù)分析工具

2021-09-02 11:38:12

Linux運維工具

2019-08-16 09:22:38

技術(shù)調(diào)試互聯(lián)網(wǎng)

2009-10-30 09:59:09

Hyper-V應(yīng)用技巧

2020-08-31 11:40:54

VimLinux字符

2017-11-13 20:37:49

Chrome技巧web

2009-09-03 08:51:46

Linux使用技巧Linux操作系統(tǒng)

2009-12-23 17:32:35

Linux構(gòu)建軟路由
點贊
收藏

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