最近我還注意到的一件事就是CSS自定義屬性。CSS自定義屬性的工作方式有點(diǎn)像SASS和其他預(yù)處理器中的變量,主要的區(qū)別在于其它方法都是在瀏覽器中編譯后生成,還是原本的CSS寫法。CSS自定義屬性是真正的動態(tài)變量,可以在樣式表中或使用javascript即時更新,這使得它們具有更多的可能性。如果你熟悉JavaScript,我喜歡把預(yù)處理器變量和CSS自定義屬性之間的區(qū)別想象成與const和let之間的區(qū)別相似——它們都有不同的用途。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比溧陽網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式溧陽網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋溧陽地區(qū)。費(fèi)用合理售后完善,十年實體公司更值得信賴。
CSS自定義屬性可以方便的實現(xiàn)很多功能(例如主題變化)。最近我一直在嘗試?yán)肅SS自定義屬性和CSS網(wǎng)格的組合能實現(xiàn)什么神奇的效果,我需要在不同的斷點(diǎn)處重新定義grid-template-rows和grid-template-columns屬性。下面的代碼中有一個例子,我使用SASS變量定義了頁面在不同的寬度下不同的列寬值,這些值將傳遞到grid-template-rows屬性中。我對grid-gap屬性也做了同樣的操作,這樣頁面寬度不同時元素之間的間距也是不同的:
$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; }
就如你所看到的,基本上必須在媒體查詢中再次寫出整個代碼塊來改變樣式,因為變量一旦定義就固定了。(我當(dāng)然可以使用mixin,但是最終效果是一樣的——一大塊代碼。)
使用CSS自定義屬性,可以減少代碼量,因為我只需更新媒體查詢中的變量,瀏覽器就會重新計算網(wǎng)格。十行(sass)代碼可能看起來不是一個巨大的節(jié)省,但代碼的可讀性要高得多,因為不必在好幾個地方添加媒體查詢來處理我們的新變量,我只需在該組件的代碼開頭聲明它們,并且無需擔(dān)心是否已替換了正在使用的哪個值:
: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; }
我發(fā)現(xiàn)使用CSS Grid的一個特點(diǎn)是,語法非常冗長,而且并不容易快速、輕松地看到正在發(fā)生的事情,特別是在復(fù)雜的網(wǎng)格中。但是在這個例子中,使用CSS自定義屬性,可以為網(wǎng)格項的大小和坐標(biāo)設(shè)置變量,并且只寫一次grid-column和grid-row屬性。對我來說,這比每次都寫出完整的屬性要清楚得多,而且很容易一目了然地看到網(wǎng)格項的位置。
為了幫助大家讓學(xué)習(xí)變得輕松、高效,給大家免費(fèi)分享一大批資料,幫助大家在成為前端工程師,乃至全棧工程師的路上披荊斬棘。在這里給大家推薦一個前端全棧學(xué)習(xí)扣qun:784783012 歡迎大家進(jìn)群。交流討論,學(xué)習(xí)交流,共同進(jìn)步。
當(dāng)真正開始學(xué)習(xí)的時候難免不知道從哪入手,導(dǎo)致效率低下影響繼續(xù)學(xué)習(xí)的信心。
但最重要的是不知道哪些技術(shù)需要重點(diǎn)掌握,學(xué)習(xí)時頻繁踩坑,最終浪費(fèi)大量時間,所以有效資源還是很有必要的。
網(wǎng)頁名稱:CSS自定義屬性+CSSGrid網(wǎng)格實現(xiàn)超級的布局能力
URL標(biāo)題:http://www.rwnh.cn/article4/gdipoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、品牌網(wǎng)站制作、靜態(tài)網(wǎng)站、云服務(wù)器、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)