成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

新時代布局中一些有意思的特性!

開發 前端
而在最近幾個 Chrome 版本中,有一些挺有意思的屬性相繼得到支持,本文就將介紹一下,在今天,新時代布局中,我們能逐漸去使用的一些有意思的新特性.

[[395182]]

在最新的 Chrome Canary 中,一個有意思的 CSS 語法 Container Queries 得到了支持。

Chrome Canary[1]:開發者專用的每日構建版,站上網絡科技最前沿。當然,不一定穩定~

而在最近幾個 Chrome 版本中,有一些挺有意思的屬性相繼得到支持,本文就將介紹一下,在今天,新時代布局中,我們能逐漸去使用的一些有意思的新特性,通過本文,你將能了解到:

  • flex 布局中的 gap 屬性
  • 控制容器寬高比屬性 aspect-ratio
  • firefox 下的 CSS Grid 瀑布流布局(grid-template-rows: masonry)
  • CSS 容器查詢(Container Queries)

flex 布局中的 gap 屬性

gap 并非是新的屬性,它一直存在于多欄布局 multi-column 與 grid 布局中,其中:

  • column-gap 屬性用來設置多欄布局 multi-column 中元素列之間的間隔大小
  • grid 布局中 gap 屬性是用來設置網格行與列之間的間隙,該屬性是 row-gap 和 column-gap 的簡寫形式,并且起初是叫 grid-gap

譬如我們有如下一個 grid 布局:

  1. <div class="grid-container"
  2.     <div class="item">1</div> 
  3.     <div class="item">2</div> 
  4.     <div class="item">3</div> 
  5.     <div class="item">4</div> 
  6.     <div class="item">5</div> 
  7. </div> 
  1. .grid-container { 
  2.     display: grid; 
  3.     border: 5px solid; 
  4.     padding: 20px; 
  5.     grid-template-columns: 1fr 1fr 1fr; 
  6. .item { 
  7.     width: 100px; 
  8.     height: 100px; 
  9.     background: deeppink; 
  10.     border: 2px solid #333; 

效果如下:

grid 布局

通過給 grid-container 添加 gap 屬性,可以非常方便的設置網格行與列之間的間隙:

  1. .grid-container { 
  2.     display: grid; 
  3.     border: 5px solid; 
  4.     padding: 20px; 
  5.     grid-template-columns: 1fr 1fr 1fr; 
  6. +   gap: 5px; 

而從 Chromium 84 開始,我們可以開始在 flex 布局中使用 gap 屬性了!Can i use -- gap property for Flexbox[2]

Can i use -- gap property for Flexbox

它的作用與在 grid 布局中的類似,可以控制水平和豎直方向上 flex item 之間的間距:

  1. .flex-container { 
  2.     width: 500px; 
  3.     display: flex; 
  4.     flex-wrap: wrap; 
  5.     gap: 5px; 
  6.     justify-content: center; 
  7.     border: 2px solid #333; 
  8.  
  9. .item { 
  10.     width: 80px; 
  11.     height: 100px; 
  12.     background: deeppink; 

gap 屬性的優勢在于,它避免了傳統的使用 margin 的時候需要考慮第一個或者最后一個元素的左邊距或者右邊距的煩惱。正常而言,4 個水平的 flex item,它們就應該只有 3 個間隙。gap 只生效于兩個 flex item 之間。

控制容器寬高比屬性 aspect-ratio

保持元素容器一致的寬高比(稱為長寬比)對于響應式 Web 設計和在某些布局當中至關重要。現在,通過 Chromium 88 和 Firefox 87,我們有了一種更直接的方法來控制元素的寬高比 -- aspect-ratio。Can i use -- aspect-ratio[3]

Can i use -- aspect-ratio

首先,我們只需要設定元素的寬,或者元素的高,再通過 aspect-ratio 屬性,即可以控制元素的整體寬高:

  1. <div class="width"></div> 
  2. <div class="height"></div> 
  1. div { 
  2.     background: deeppink; 
  3.     aspect-ratio: 1/1; 
  4. .width { 
  5.     width: 100px; 
  6. .height { 
  7.     height: 100px; 

都可以得到如下圖形:

其次,設定了 aspect-ratio 的元素,元素的高寬其中一個發生變化,另外一個會跟隨變化:

  1. <div class="container"
  2.     <div>寬高比1:1</div> 
  3.     <div>寬高比2:1</div> 
  4.     <div>寬高比3:1</div> 
  5. </div> 
  1. .container { 
  2.     display: flex; 
  3.     width: 30vw; 
  4.     padding: 20px; 
  5.     gap: 20px; 
  6. .container > div { 
  7.     flex-grow: 1; 
  8.     background: deeppink; 
  9. .container > div:nth-child(1) { 
  10.     aspect-ratio: 1/1; 
  11. .container > div:nth-child(2) { 
  12.     aspect-ratio: 2/1; 
  13. .container > div:nth-child(3) { 
  14.     aspect-ratio: 3/1; 

當容器大小變化,每個子元素的寬度變寬,元素的高度也隨著設定的 aspect-ratio 比例跟隨變化:

图片

CodePen Demo -- aspect-ratio Demo[4]

firefox 下的 CSS Grid 瀑布流布局(grid-template-rows: masonry)

grid-template-rows: masonry 是 firefox 在 firefox 87 開始支持的一種基于 grid 布局快速創建瀑布流布局的方式。并且 firefox 一直在推動該屬性進入標準當中。

從 firefox 87 開始,在瀏覽器輸入網址欄輸入 about:config 并且開啟 layout.css.grid-template-masonry-value.enabled 配置使用。Can i use -- grid-template-rows: masonry[5]

正常而言,我們想要實現瀑布流布局還是需要花費一定的功夫的,即便是基于 grid 布局。在之前,我們通過 grid 布局,通過精細化控制每一個 grid item,也可以實現一些偽瀑布流布局:

  1. <div class="g-container"
  2.   <div class="g-item">1</div> 
  3.   <div class="g-item">2</div> 
  4.   <div class="g-item">3</div> 
  5.   <div class="g-item">4</div> 
  6.   <div class="g-item">5</div> 
  7.   <div class="g-item">6</div> 
  8.   <div class="g-item">7</div> 
  9.   <div class="g-item">8</div> 
  10. </div> 
  1. .g-container { 
  2.     height: 100vh; 
  3.     display: grid; 
  4.     grid-template-columns: repeat(4, 1fr); 
  5.     grid-template-rows: repeat(8, 1fr); 
  6.  
  7. .g-item { 
  8.     &:nth-child(1) { 
  9.         grid-column: 1; 
  10.         grid-row: 1 / 3; 
  11.     } 
  12.     &:nth-child(2) { 
  13.         grid-column: 2; 
  14.         grid-row: 1 / 4; 
  15.     } 
  16.     &:nth-child(3) { 
  17.         grid-column: 3; 
  18.         grid-row: 1 / 5; 
  19.     } 
  20.     &:nth-child(4) { 
  21.         grid-column: 4; 
  22.         grid-row: 1 / 6; 
  23.     } 
  24.     &:nth-child(5) { 
  25.         grid-column: 1; 
  26.         grid-row: 3 / 9; 
  27.     } 
  28.     &:nth-child(6) { 
  29.         grid-column: 2; 
  30.         grid-row: 4 / 9; 
  31.     } 
  32.     &:nth-child(7) { 
  33.         grid-column: 3; 
  34.         grid-row: 5 / 9; 
  35.     } 
  36.     &:nth-child(8) { 
  37.         grid-column: 4; 
  38.         grid-row: 6 / 9; 
  39.     } 

效果如下:

CSS Grid 實現偽瀑布流布局

CodePen Demo -- CSS Grid 實現偽瀑布流布局[6]

在上述 Demo 中,使用 grid-template-columns、grid-template-rows 分割行列,使用 grid-row 控制每個 grid item 的所占格子的大小,但是這樣做的成本太高了,元素一多,計算量也非常大,并且還是在我們提前知道每個元素的高寬的前提下。

而在有了 grid-template-rows: masonry 之后,一切都會變得簡單許多,對于一個不確定每個元素高度的 4 列的 grid 布局:

  1. .container { 
  2.   display: grid; 
  3.   grid-template-columns: repeat(4, 1fr); 

正常而言,看到的會是這樣:

簡單的給容器加上 grid-template-rows: masonry,表示豎方向上,采用瀑布流布局:

  1. .container { 
  2.   display: grid; 
  3.   grid-template-columns: repeat(4, 1fr); 
  4. + grid-template-rows: masonry; 

便可以輕松的得到這樣一種瀑布流布局:

如果你在使用 firefox,并且開啟了 layout.css.grid-template-masonry-value.enabled 配置,可以戳進下面的 DEMO 感受一下:

CodePen Demo -- grid-template-rows: masonry 實現瀑布流布局[7]

當然,這是一個最簡單的 DEMO,關于更多 grid-template-rows: masonry 相關知識,你可以詳細的看看這篇文章:Native CSS Masonry Layout In CSS Grid[8]

CSS 容器查詢(Container Queries)

什么是 CSS 容器查詢[9](Container Queries)?

在之前,對于同個樣式,我們如果希望根據視口大小得到不一樣效果,通常使用的是媒體查詢。

但是,一些容器或者組件的設計可能并不總是與視口的大小有關,而是與組件在布局中的放置位置有關。

所以在未來,新增了一種方式可以對不同狀態下的容器樣式進行控制,也就是容器查詢。在最新的 Chrome Canary[10] 中,我們可以通過 chrome://flags/#enable-container-queries 開啟 Container Queries 功能。

假設我們有如下結構:

  1. <div class="wrap"
  2.     <div class="g-container"
  3.         <div class="child">Title</div> 
  4.         <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus vel eligendi, esse illum similique sint!!</p> 
  5.     </div> 
  6. </div> 

正常情況下的樣式如下:

  1. .g-container { 
  2.     display: flex; 
  3.     flex-wrap: nowrap; 
  4.     border: 2px solid #ddd; 
  5.  
  6.     .child { 
  7.         flex-shrink: 0; 
  8.         width: 200px; 
  9.         height: 100px; 
  10.         background: deeppink; 
  11.     } 
  12.      
  13.     p { 
  14.         height: 100px; 
  15.         font-size: 16px; 
  16.     } 

結構如下:

在未來,我們可以通過 @container query 語法,設定父容器 .wrap 在不同寬度下的不同表現,在上述代碼基礎上,新增下述代碼:

  1. .wrap { 
  2.     contain: layout inline-size
  3.     resize: horizontal; 
  4.     overflow: auto; 
  5. .g-container { 
  6.     display: flex; 
  7.     flex-wrap: nowrap; 
  8.     border: 2px solid #ddd; 
  9.     .child { 
  10.         flex-shrink: 0; 
  11.         width: 200px; 
  12.         height: 100px; 
  13.         background: deeppink; 
  14.     } 
  15.     p { 
  16.         height: 100px; 
  17.         font-size: 16px; 
  18.     } 
  19. // 當 .wrap 寬度小于等于 400px 時下述代碼生效  
  20. @container (max-width: 400px) { 
  21.     .g-container { 
  22.         flex-wrap: wrap; 
  23.         flex-direction: column
  24.     } 
  25.     .g-container .child { 
  26.         width: 100%; 
  27.     } 

注意這里要開啟 @container query,需要配合容器的 contain 屬性,這里設置了 contain: layout inline-size,當 .wrap 寬度小于等于 400px 時,@container (max-width: 400px) 內的代碼則生效,從橫向布局 flex-wrap: nowrap 變換成了縱向換行布局 flex-wrap: wrap:

 å›¾ç‰‡

如果你的瀏覽器已經開啟了 chrome://flags/#enable-container-queries,你可以戳這個代碼感受一下:

CodePen Demo -- CSS @container query Demo[11]

媒體查詢與容器查詢的異同,通過一張簡單的圖看看,核心的點在于容器的寬度發生變化時,視口的寬度不一定會發生變化:

這里僅僅是介紹了 @container query 的冰山一角,更多內容你可以戳這里了解更多:say-hello-to-css-container-queries[12]

最后

好了,本文到此結束,希望對你有幫助 :)

更多精彩 CSS 技術文章匯總在我的 Github -- iCSS[13] .

參考資料

  • [1]Chrome Canary: https://www.google.com/chrome/canary/
  • [2]Can i use -- gap property for Flexbox: https://caniuse.com/?search=flex%20gap
  • [3]Can i use -- aspect-ratio: https://caniuse.com/?search=aspect-ratio
  • [4]CodePen Demo -- aspect-ratio Demo: https://codepen.io/Chokcoco/pen/eYgjbqG
  • [5]Can i use -- grid-template-rows: masonry: https://caniuse.com/?search=grid-template-rows
  • [6]CodePen Demo -- CSS Grid 實現偽瀑布流布局: https://codepen.io/Chokcoco/pen/KGXqyo
  • [7]CodePen Demo -- grid-template-rows: masonry 實現瀑布流布局: https://codepen.io/Chokcoco/pen/NWdBojd
  • [8]Native CSS Masonry Layout In CSS Grid: https://www.smashingmagazine.com/native-css-masonry-layout-css-grid/
  • [9]CSS 容器查詢: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Container_Queries
  • [10]Chrome Canary: https://www.google.com/chrome/canary/
  • [11]CodePen Demo -- CSS @container query Demo: https://codepen.io/Chokcoco/pen/PoWBOQR
  • [12]say-hello-to-css-container-queries: https://ishadeed.com/article/say-hello-to-css-container-queries/
  • [13]Github -- iCSS: https://github.com/chokcoco/iCSS

 

責任編輯:姜華 來源: iCSS前端趣聞
相關推薦

2020-01-20 14:28:05

程序員技能開發者

2021-11-17 10:45:58

Chrome 95新特性前端

2022-08-26 05:26:33

容器查詢CSS

2020-12-12 13:50:16

云開發

2021-01-27 13:54:05

開發云原生工具

2018-06-24 16:39:28

Tomcat異常線程

2021-03-25 06:12:55

SVG 濾鏡CSS

2018-09-11 16:15:36

Vue高版本前端

2022-08-15 22:34:47

Overflow方向裁切

2022-06-15 07:21:47

鼠標指針交互效果CSS

2022-12-28 07:48:40

六邊形動畫CSS

2022-07-11 13:09:26

mmapLinux

2023-05-15 09:16:18

CSSCSS Mask

2017-08-01 00:52:07

kafka大數據消息總線

2025-06-06 10:05:00

AP離線網絡MAC

2013-08-28 09:46:09

Debian LinuLinux發行版

2012-06-19 16:49:19

Web開發

2010-04-09 11:24:59

Oracle 排序

2012-05-22 10:12:59

jQuery

2015-10-28 13:57:29

融合架構華三UIS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品久久 | 国产精品久久午夜夜伦鲁鲁 | 狠狠操狠狠干 | 超碰人人人| 日韩欧美在线精品 | 九色在线观看 | 亚洲欧美精| 天堂网中文字幕在线观看 | 日韩欧美网 | 国产乱人伦精品一区二区 | 久草精品视频 | 一区二区在线免费观看 | 久久一二区 | 日韩欧美亚洲一区 | 男女羞羞视频在线 | 精品一区二区三区在线观看国产 | 欧美一区二区在线播放 | 亚洲444eee在线观看 | 精品国产乱码久久久久久老虎 | 黑人中文字幕一区二区三区 | 在线视频亚洲 | 91原创视频 | 日本午夜精品一区二区三区 | 亚洲精品综合 | 色婷婷av777 av免费网站在线 | 欧美三区 | 婷婷久久五月天 | 一区二区三区免费网站 | 久久久久久91 | 一区二区在线不卡 | 国产精品久久久久久久久久久免费看 | sese视频在线观看 | 中文字幕一区二区三区日韩精品 | 草草视频在线观看 | 亚洲欧美激情精品一区二区 | 久久亚洲91| 亚洲www | 欧美最猛黑人 | 久久天天躁狠狠躁夜夜躁2014 | 热久久久久| 国产aⅴ精品 |