CSS的未來
什麼時候普通的CSS才能優秀到替代Sass, Less, Stylus, 以及 rest?
Web開發人員必須要面對的最艱難的一個事實是大多數人在瀏覽網站的時候使用的還是老版本、低功能的瀏覽器。瀏覽器一直在增加新的功能,但你通常沒法使用這些功能,除非你願意失去大量沒有更新瀏覽器的使用者。
當你使用 Electron 開發應用的時候就不存在這個問題了。因為你寫的Electron應用的程式碼執行在一個獨立的 Chromium 瀏覽器上。Chromium 是谷歌瀏覽器的核心引擎,由谷歌提供技術支援。同時,它也是開源的,這意味著社群大量的開發者每天都在優化它。
CSS 自定義屬性
上週,Electron 釋出了一個支援CSS自定義屬性的新版本。如果你使用過類似 Sass 和 Less 的預處理語言,你可能已經很熟悉變數了,它們允許你定義可反覆使用的值,用於配色方案或者佈局等。變數可以使你的樣式表保持 DRY (Don't Repeat Yourself),並且提高可維護性。
由於CSS的自定義屬性只是CSS的常規屬性, 因此它們可以通過JavaScript來操作。這微妙但強大的功能,使開發者在享受CSS硬體加速的同時可以動態地改變視覺介面,並能夠減少前端程式碼和樣式表之間的重複。
下面是一個使用自定義屬性的例子:
:root { --primary-color: papayawhip; --base-line-height: 1.4; } .thing { color: var(--primary-color); margin: 0 0 calc(var(--base-line-height) * 1rem); }
檢視 在谷歌瀏覽器的演示 (需要chrome版本高於49)
CSS 混合(Mixin) 和 繼承
現在,我們的CSS中有變數了。這很不錯了,但它並不足夠讓我們寫出完美的CSS。我們真正需要的是一種可以寫可複用的CSS的方式。在 Sass, Less 以及 Stylus 這些功能早就存在了,但是在常規CSS中卻沒法實現。
Enter the @apply Rule
此規範定義了@apply規則,它允許開發者在一個命名變數中儲存一組屬性,然後在其他樣式規則中的引用。
下面是一個使用@apply規則的例子:
body { --alert: { color: white; padding: 15px; margin: 1rem 0; border-radius: 6px; } } .alert-success { @apply --alert; background-color: olivedrab; } .alert-warning { @apply --alert; background-color: firebrick; }
在寫這篇文章時(2016年4月8日),這個功能仍舊非常新,並沒有被谷歌瀏覽器甚至 Chrome Canary 支援,但是在最新的 Chromium nightly 中通過啟用標記(flag)是可以實現的。
自己來嘗試@apply規則的話, 可以先下載最新的Chromium,然後從通過啟用標記來實現@apply。下面是在 OS X系統中的做法:
/Applications/Chromium.app/Contents/MacOS/Chromium \ --enable-blink-features=CSSApplyAtRules
檢視以上規則所有組合出來的炫酷樣式,可以參考我的 codepen 演示:
@apply 在Chromium瀏覽器上的 Codepen 演示
從現在開始編寫未來的的CSS
一旦@apply被Chromium 和 Electron所支援,我們就能夠使用原生CSS編寫乾淨可維護的樣式。但在那一天到來之前,我們仍然需要不斷地學習前處理器來填補這些空白。
現在有至少兩個專案允許你寫未來的CSS: Myth 和 cssnext。在這兩個專案中,cssnext 更加活躍,甚至有一個專門的git issue來促進 @apply 的實現 (譯者注: 最新版本的 postcss-cssnext 已經支援 @apply 規則)。
以上就是CSS的未來。
相關文章
- JavaScript 中的 CSS:基於元件的樣式的未來JavaScriptCSS元件
- [譯] JavaScript 中的 CSS:基於元件的樣式的未來JavaScriptCSS元件
- 遊戲的未來遊戲
- 未來的框架框架
- 利用PostCSS跳進未來的CSS- JS-Republics BlogCSSJS
- 來一起讓我們越來越懶,面向CSS、JS未來程式設計CSSJS程式設計
- 移動遊戲產業的未來:流量變現的未來(五)遊戲產業
- 滑向未來(現代 JavaScript 與 CSS 滾動實現指南)JavaScriptCSS
- css佈局簡史與決勝未來的第四代css佈局技術CSS
- DevOps 的未來dev
- AngularJS的未來AngularJS
- 我們口中的「未來遊戲製作人」,代表的是哪種未來?遊戲
- 未來的Linux世界Linux
- 智慧城市:未來的城市
- 智慧教育:未來的教育
- 未來的資料中心
- 大模型的未來在哪?大模型
- 機器智慧的未來
- 想象下未來的NOSQLSQL
- 大資料的未來大資料
- 程式設計的未來程式設計
- JavaScript模組打包的未來JavaScript
- iPhone——媒體的未來iPhone
- 未來web前端的六大趨勢,看未來的發展前景!Web前端
- 來了來了,CSS 版的冰墩墩來了……CSS
- Data Fabric:資料管理的未來已來
- 深入解密來自未來的快取-Caffeine解密快取
- JavaScript的進化和未來JavaScript
- 未來學東西的思路
- 展望未來的「暗黑」類遊戲遊戲
- 機器學習的未來——深度特徵融合機器學習特徵
- 寫給未來的程式媛
- 展望 C# 7 的未來C#
- C#的未來計劃C#
- 未來的前端工程師前端工程師
- Docker 網路管理的未來Docker
- Docker的前生今世和未來Docker
- 競速(四):JavaScript的未來JavaScript