摘要:自定義屬性可以方便的實(shí)現(xiàn)很多功能例如主題變化。最近我一直在嘗試?yán)米远x屬性和網(wǎng)格的組合能實(shí)現(xiàn)什么神奇的效果,我需要在不同的斷點(diǎn)處重新定義和屬性。太多的可能性了瀏覽器支持目前,全球的瀏覽器都支持自定義屬性及以下版本是明顯的例外。
我在工作中使用CSS Grid已經(jīng)有幾個(gè)月了,我非常喜歡它在頁面布局時(shí)給我的靈活性。這么長時(shí)間以來,我們一直沒有一個(gè)真正的網(wǎng)格布局解決方案——用浮動(dòng)和flexbox總是有各種各樣的限制。但現(xiàn)在,我真的無法想象沒有Grid的CSS!
最近我還注意到的一件事就是CSS自定義屬性。CSS自定義屬性的工作方式有點(diǎn)像SASS和其他預(yù)處理器中的變量,主要的區(qū)別在于其它方法都是在瀏覽器中編譯后生成,還是原本的CSS寫法。CSS自定義屬性是真正的動(dòng)態(tài)變量,可以在樣式表中或使用javascript即時(shí)更新,這使得它們具有更多的可能性。如果你熟悉JavaScript,我喜歡把預(yù)處理器變量和CSS自定義屬性之間的區(qū)別想象成與const和let之間的區(qū)別相似——它們都有不同的用途。
CSS自定義屬性可以方便的實(shí)現(xiàn)很多功能(例如主題變化)。最近我一直在嘗試?yán)肅SS自定義屬性和CSS網(wǎng)格的組合能實(shí)現(xiàn)什么神奇的效果,我需要在不同的斷點(diǎn)處重新定義grid-template-rows和grid-template-columns屬性。下面的代碼中有一個(gè)例子,我使用SASS變量定義了頁面在不同的寬度下不同的列寬值,這些值將傳遞到grid-template-rows屬性中。我對(duì)grid-gap屬性也做了同樣的操作,這樣頁面寬度不同時(shí)元素之間的間距也是不同的:
$wrapper: 1200px; $col: 1fr; $gutter: 20px; $wrapper-l: 90%; $col-l: calc((1000px - (13 * 40px)) / 12); $gutter-l: 40px; $col-xl: calc((1200px - (13 * 50px)) / 12); $gutter-xl: 50px; body { background-color: lighten(grey, 30%); } .wrapper { max-width: $wrapper; margin: 20px auto; @media (min-width: 1300px) { max-width: $wrapper-l; } } .grid { display: grid; padding: $gutter; grid-template-columns: 1fr repeat(12, $col) 1fr; grid-template-rows: repeat(2, minmax(150px, auto)); grid-gap: $gutter; border: 1px solid grey; background: white; width: auto; @media (min-width: 1300px) { grid-template-columns: 1fr repeat(12, $col-l) 1fr; grid-gap: $gutter-l; padding: $col-l; } @media (min-width: 1500px) { grid-template-columns: 1fr repeat(12, $col-xl) 1fr; grid-gap: $gutter-xl; padding: $col-xl; } } .grid__item { border: 1px solid blue; } .grid__item--heading { grid-column: 2 / 11; }
點(diǎn)擊查看上圖的全部代碼和實(shí)時(shí)效果
就如你所看到的,基本上必須在媒體查詢中再次寫出整個(gè)代碼塊來改變樣式,因?yàn)樽兞恳坏┒x就固定了。(我當(dāng)然可以使用mixin,但是最終效果是一樣的——一大塊代碼。)
使用CSS自定義屬性,可以減少代碼量,因?yàn)槲抑恍韪旅襟w查詢中的變量,瀏覽器就會(huì)重新計(jì)算網(wǎng)格。十行(sass)代碼可能看起來不是一個(gè)巨大的節(jié)省,但代碼的可讀性要高得多,因?yàn)椴槐卦诤脦讉€(gè)地方添加媒體查詢來處理我們的新變量,我只需在該組件的代碼開頭聲明它們,并且無需擔(dān)心是否已替換了正在使用的哪個(gè)值:
:root { --wrapper: 1200px; --col: 1fr; --gutter: 20px; @media (min-width: 1300px) { --wrapper: 90%; --col: calc((1000px - (13 * 40px)) / 12); --gutter: 40px; } @media (min-width: 1500px) { --wrapper: 90%; --col: calc((1200px - (13 * 50px)) / 12); --gutter: 50px; } } body { background-color: lighten(grey, 30%); } .wrapper { max-width: var(--wrapper); margin: 20px auto; } .grid { display: grid; padding: var(--gutter); grid-template-columns: 1fr repeat(12, var(--col)) 1fr; grid-template-rows: repeat(2, minmax(150px, auto)); grid-gap: var(--gutter); border: 1px solid grey; background: white; width: auto; } .grid__item { border: 1px solid blue; } .grid__item--heading { grid-column: 2 / 11; } .grid__item--body { grid-column: 2 / 8; grid-row: 2 / span 1; } .grid__item--media { background: hotPink; grid-column: 11 / 14; grid-row: 1 / span 2; }
點(diǎn)擊查看全部代碼和實(shí)時(shí)效果
我發(fā)現(xiàn)使用CSS Grid的一個(gè)特點(diǎn)是,語法非常冗長,而且并不容易快速、輕松地看到正在發(fā)生的事情,特別是在復(fù)雜的網(wǎng)格中。但是在這個(gè)例子中,使用CSS自定義屬性,可以為網(wǎng)格項(xiàng)的大小和坐標(biāo)設(shè)置變量,并且只寫一次grid-column和grid-row屬性。對(duì)我來說,這比每次都寫出完整的屬性要清楚得多,而且很容易一目了然地看到網(wǎng)格項(xiàng)的位置。
這里有一個(gè)隨機(jī)動(dòng)態(tài)改變自定義變量的DEMO,在這個(gè)示例中,我使用javascript循環(huán)網(wǎng)格項(xiàng),并在每次單擊按鈕時(shí)使用隨機(jī)值更新變量。沒有添加類或額外的CSS。
在這個(gè)的示例DEMO中,使用用戶輸入的值動(dòng)態(tài)更改網(wǎng)格項(xiàng)。這里要更新的只是x和y坐標(biāo)的三個(gè)變量以及網(wǎng)格項(xiàng)的大小。
太多的可能性了!
瀏覽器支持
目前,全球88%的瀏覽器都支持CSS自定義屬性——Internet Explorer 11及以下版本是明顯的例外。這與對(duì)CSS Grid網(wǎng)格布局的支持大致相同,這意味著要使用特性查詢來區(qū)分支持與不支持的瀏覽器。
可以這樣使用@supports聲明來測試對(duì)css自定義屬性的支持:
@supports(--css: variables) { .my-div { --size: 2; --posX: 3; grid-column: var("--posX") / span var("--size"); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/114691.html
摘要:自定義屬性可以方便的實(shí)現(xiàn)很多功能例如主題變化。最近我一直在嘗試?yán)米远x屬性和網(wǎng)格的組合能實(shí)現(xiàn)什么神奇的效果,我需要在不同的斷點(diǎn)處重新定義和屬性。太多的可能性了瀏覽器支持目前,全球的瀏覽器都支持自定義屬性及以下版本是明顯的例外。 我在工作中使用CSS Grid已經(jīng)有幾個(gè)月了,我非常喜歡它在頁面布局時(shí)給我的靈活性。這么長時(shí)間以來,我們一直沒有一個(gè)真正的網(wǎng)格布局解決方案——用浮動(dòng)和flex...
摘要:自定義屬性可以方便的實(shí)現(xiàn)很多功能例如主題變化。最近我一直在嘗試?yán)米远x屬性和網(wǎng)格的組合能實(shí)現(xiàn)什么神奇的效果,我需要在不同的斷點(diǎn)處重新定義和屬性。太多的可能性了瀏覽器支持目前,全球的瀏覽器都支持自定義屬性及以下版本是明顯的例外。 我在工作中使用CSS Grid已經(jīng)有幾個(gè)月了,我非常喜歡它在頁面布局時(shí)給我的靈活性。這么長時(shí)間以來,我們一直沒有一個(gè)真正的網(wǎng)格布局解決方案——用浮動(dòng)和flex...
摘要:瀏覽器兼容性網(wǎng)格布局從開始收到支持,微軟在會(huì)更新對(duì)網(wǎng)格布局的支持。微軟的瀏覽器和有一種比較舊的實(shí)現(xiàn),所以有不少限制,我們會(huì)簡單介紹新的實(shí)現(xiàn)方式和老的實(shí)現(xiàn)方式之間的區(qū)別,這樣你能知道如何規(guī)避他們。 原文地址:Getting to know CSS Grid Layout 原文作者:Chris Wright 譯者:華翔 校對(duì)者:珂珂、干干 翻譯 | CSS網(wǎng)格(CSS Grid)布局入...
摘要:重復(fù)網(wǎng)格區(qū)域的名稱導(dǎo)致內(nèi)容跨越這些單元格。中間一排將由兩個(gè)區(qū)域,一個(gè)是空單元格,一個(gè)區(qū)域組成。你可以使用任意數(shù)量的相鄰的點(diǎn)來聲明單個(gè)空單元格。只要這些點(diǎn)之間沒有空隙隔開,他們就代表一個(gè)單獨(dú)的單元格。? CSS Grid 布局是 CSS 中最強(qiáng)大的布局系統(tǒng)。與 flexbox 的一維布局系統(tǒng)不同,CSS Grid 布局是一個(gè)二維布局系統(tǒng),也就意味著它可以同時(shí)處理列和行。通過將 CSS 規(guī)則應(yīng)用...
摘要:簡評(píng)網(wǎng)格模塊是創(chuàng)建網(wǎng)站模型的絕佳工具。如果你對(duì)網(wǎng)格完全陌生,你可能要瀏覽一下我的分鐘介紹網(wǎng)格的文章。每一行代表一行,每一個(gè)字符,,,代表一個(gè)網(wǎng)格元素。無論標(biāo)簽在標(biāo)記中是如何放置的,我們都能隨意轉(zhuǎn)換。這被稱為源代碼的獨(dú)立性,這是的一大進(jìn)步。 簡評(píng):CSS 網(wǎng)格模塊是創(chuàng)建網(wǎng)站模型的絕佳工具。它是我嘗試過的任何其他系統(tǒng)中最快讓你體驗(yàn)布局的工具。 我們的網(wǎng)格 我們將從模仿一個(gè)經(jīng)典網(wǎng)站的非常基本...
閱讀 719·2023-04-25 20:32
閱讀 2264·2021-11-24 10:27
閱讀 4518·2021-09-29 09:47
閱讀 2240·2021-09-28 09:36
閱讀 3632·2021-09-22 15:27
閱讀 2755·2019-08-30 15:54
閱讀 369·2019-08-30 11:06
閱讀 1271·2019-08-30 10:58