摘要:下面的代碼違反規則下面的代碼符合規則禁止使用十六進制顏色十六進制的顏色違反規則無效的十六進制色同樣違規下面的是符合規則的自動將十六進制色轉換為大寫或者小寫可以使用實現同樣的功能。
在PostCSS官網有著這樣的對PostCSS特性介紹,箭頭后面是對應功能的插件及其github地址。
increase code readability → Autoprefixer
Use tomorrow"s CSS ,today! → postcss-cssnext
The end of global CSS → postcss-modules
Avoid errors in your CSS → stylelint
Powerful grid CSS → lost →lost
PostCSS是一款使用插件去轉換CSS的工具,有許多非常好用的插件,例如autoprefixer,cssnext以及CSS Modules。而上面列舉出的這些特性,都是由對應的postcss插件去實現的。而使用PostCSS則需要與webpack或者parcel結合起來。
在Parcel中使用PostCSS的方法:添加配置文件.postcssrc(JSON),.postcssrc.js或者是postcss.config.js。
拿 .postcssrc 文件來舉例:
{ "modules": true, "plugins": { "autoprefixer": { "grid": true } } }
Plugins 在 plugins 對象中被指定為 key,并使用對象的值定義選項。如果插件沒有選項,只需將其設置為 true 即可。
下面我將對根據官方readme的演示demo,對各個插件進行一一介紹,并添加一些隱藏在插件背后的知識點的說明。
首先明確一點Autoprefixer是一個根據can i use解析css并且為其添加瀏覽器廠商前綴的PostCSS插件。
不加任何vender prefix的通常寫法。
::placeholder { color: gray; }
Autoprefixer將使用基于當前瀏覽器支持的特性和屬性數據去為你添加前綴。你可以嘗試下Autoprefixer的demo:http://autoprefixer.github.io/
由上圖可以看出,像沒有瀏覽器差異已經完全符合W3C標準的css2.1屬性display,position等,Autoprefixer不會為其加前綴,而像css3屬性transform就會為其加前綴,其中--webkit是chrome和safari前綴,--ms則是ie的前綴,像firefox由于已經實現了對transform的W3C標準化,因此使用transform即可。
因此Autoprefixer是一個非常有用的加速前端開發的一個工具,但是它需要基于PostCSS去發揮作用。
如果對vender prefix存疑,可以去看我的這篇博客:rem / Vender Prefix / CSS extensions
2.什么是postcss-cssnext?postcss-cssnext語法input:
:root { --fontSize: 1rem; --mainColor: #12345678; --centered: { display: flex; align-items: center; justify-content: center; }; } body { color: var(--mainColor); font-size: var(--fontSize); line-height: calc(var(--fontSize) * 1.5); padding: calc((var(--fontSize) / 2) + 1px); } .centered { @apply --centered; }
瀏覽器可用語法output:
body { color: rgba(18, 52, 86, 0.47059); font-size: 16px; font-size: 1rem; line-height: 24px; line-height: 1.5rem; padding: calc(0.5rem + 1px); } .centered { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; }
粗略看了一遍演示demo,http://cssnext.io/playground/,感覺既好用又不好用。
好用的地方在于通過var()和calc()進行css屬性值的計算,也有@apply這樣的應用大段規則的寫法,也可以借此去了解一些新的css草案特性;不好用的地方在于有一定的學習成本,而且在前期與webpack,gulp以及parcel進行結合時也需要花費一定時間,并且如果有新的前端組成員加入,必須要掌握這種cssnext的語法。
這樣做有些似乎在嘗試將css變為一種可以進行邏輯處理的語言,但是我個人認為這對于css這樣的靈活的需要具象思維并且需要大量調試的語言來說,工作中使用cssnext不是一個很好的選擇,但是工作之余可以作為一個學習新的css草案特性的一個入口,待到納入標準再去使用。
剛開始對自己的想法不確定,因此去看了下前輩們的想法,其中顧鐵靈對cssnext的想法與我的想法如出一轍:
CSS 的轉譯器(transpiler),根據目前仍處于草案階段、未被瀏覽器實現的標準把代碼轉譯成符合目前瀏覽器實現的 CSS。類似 ES6 的 Babel。3.什么是postcss-modules?
相比之下,Autoprefixer 更加具有實用價值,而 cssnext 實現的功能以后瀏覽器會怎么實現還存疑,感覺只能玩玩。
在看postcss-modules之前,首先要明確的是CSS Modules的這個概念,關于CSS Modules,可以閱讀我翻譯的一篇文章:【譯】什么是CSS Modules ?我們為什么需要他們?
postcss-modules則是CSS Modules在PostCSS上的實現插件,這里有一篇插件作者本人寫的介紹postcss-modules的文章:PostCSS-modules:make CSS great again!。
在我有限的開發經驗中,只在react中使用過css modules,在vue和angularjs中都沒用到過,而且在react中使用時,不會去用postcss-modules這個插件,而是使用react-css-modules這個CSS Modules思想在react中的插件。
下面將給出最簡單的入門例子:
在React上下文中,CSS Modules可能像下面這樣寫:
import React from "react"; import styles from "./table.css"; export default class Table extends React.Component { render () { return; } }A0B0
最后渲染出的組件的標簽會是如下形式:
A0B0
如果對為什么會把class名編譯成table__table___32osj這樣的形式存在疑惑,需要先把css modules搞清楚:【譯】什么是CSS Modules ?我們為什么需要他們?
如果需要在開發環境或者生產環境結合webpack去使用,那么可以閱讀react-css-modules的官方文檔尋找答案。
通過這次探索我們可以發現,前端開發在不同的生態,或者說框架體系下,同一個技術,例如CSS Modules這種將思想,會有對應的實現方式,而我們要掌握的,不僅僅是在某種框架下配置使用的方法,而是這種開發思想。因為學習的核心在于學習知識,而不是無休止的學習工具。
4.什么是stylelint?這是用來強制開發人員按照團隊css規范寫css樣式的工具,類似eslint。
若想使用,只需要去啟用規則即可。
節選一段stylelint作者博文中的話:
沒錯,你的團隊可能在某個地方的某條純文本wiki中記錄了團隊的代碼樣式規范。但是,不容忽視的是人的因素:人總是會犯錯——總是在無意之間。
而且即使你很自律地執著遵循某個規范的代碼風格,但是你沒辦法確保你的同事或是你的開源項目的貢獻者能夠像你一樣。沒有linter的幫助,你必須人工檢查代碼樣式和錯誤。而機器存在的意義就是代替人來完成能夠自動化實現的任務。linter就是這樣的機器,有了linter,你不需要浪費時間檢查代碼風格,也不需要對每一個代碼錯誤都寫一大堆的注釋,因此它能夠極大程度地減少你花費在代碼審閱上的時間。你無須檢查代碼究竟做了些什么,也無需關心它看起來什么樣。
事實與stylelint作者說的是一樣的,即使團隊有前端開發規范,也會不經意間寫出不符合規范的代碼,因為每次寫css規則前都去規范check一遍不是誰都能做到的,如果團隊再沒有code review這一關的話,寫出各種各樣風格的css代碼就是一件必然的事了,短期沒有什么影響,當項目變得龐大起來,增加新功能或者重寫舊功能將會是一件很痛苦的事。
我們主要去關注Rules部分:
sytlelint的規則主要有3類,我將從每一類規則中挑一個拿出來作為示例。
Possible errors(常見的錯誤寫法,強烈推薦開啟)
Limit language features(棄用一些正確的寫法,中等推薦開啟)
Stylistic issues(代碼風格代碼統一,普通建議開啟)
Possible errors ------ color-no-invalid-hex: 禁止無效的十六進制顏色
完全形式的十六進制顏色可以是6或者8(7,8位是透明度的值)個字符。同樣他們的縮寫可以是3或者4個字符。
options : true
下面的代碼違反規則:
a { color: #00; } a { color: #fff1az; } a { color: #12345aa; }
下面的代碼符合規則:
a { color: #000; } a { color: #000f; } a { color: #fff1a0; } a { color: #123450aa; }
Limit language features ------ color-no-hex:禁止使用十六進制顏色
options : true
十六進制的顏色違反規則:
a { color: #000; } a { color: #fff1aa; } a { color: #123456aa; }
無效的十六進制色同樣違規:
a { color: #foobar; } a { color: #0000000000000000; }
下面的是符合規則的:
a { color: black; } a { color: rgb(0, 0, 0); } a { color: rgba(0, 0, 0, 1); }
Stylistic issues ------ color-hex-case: 自動將十六進制色轉換為大寫或者小寫
Options string: "lower"|"upper"
可以使用stylelint "foo/*.css" --fix實現同樣的功能。
"小寫"
下面的代碼是違規的:
a { color: #FFF; }
下面的是符合規則的:
a { color: #000; } a { color: #fff; }
"大寫"
下面的代碼是違規的:
a { color: #fff; }
下面的是符合規則的:
a { color: #000; } a { color: #FFF; }
更多的stylelint的規則可以查閱:https://github.com/stylelint/...
5.什么是LostGrid?Lost Grid是一個強大的PostCSS網格系統,可與任何預處理器甚至是原生CSS一起使用。
在這里有非常好的demo展示:http://lostgrid.org/lostgrid-...
節選2個展示進行說明。
.ColumnSection__grid div { lost-column: 1/1; } @media (min-width: 400px) { .ColumnSection__grid div { lost-column: 1/3; } } @media (min-width: 900px) { .ColumnSection__grid div { lost-column: 1/6; } }
大于900px時:
小于900px時:
.NestingSection__grid { background: #8eb19d; } .NestingSection__grid div { background: #7ba48d; lost-column: 1/3; } .NestingSection__grid div div { background: #68977c; lost-column: 1/2; }
經過查看css樣式我們發現,其實就是巧用了table布局,before/after偽元素,以及css選擇器,以及border-box布局,但其實最最核心的地方還是在于很好的使用了css本身具有的流式布局以及BFC,針對各種情況,在插件內部使用了大量的樣式進行約束。
在css3的flex布局和grid布局逐漸被瀏覽器所支持的今天,我個人建議不使用LostGrid插件。
期待和大家交流,共同進步,歡迎大家加入我創建的與前端開發密切相關的技術討論小組:
SegmentFault技術圈:ES新規范語法糖
SegmentFault專欄:趁你還年輕,做個優秀的前端工程師
知乎專欄:趁你還年輕,做個優秀的前端工程師
Github博客: 趁你還年輕233的個人博客
前端開發交流群:660634678
努力成為優秀前端工程師!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/113233.html
摘要:而則可制定個人需求的一套解決方案僅安裝需要的插件。迫不及待的你已經等不及安裝使用了吧。安裝及使用一般是結合自動化工具使用,如果要單獨使用可以安裝,這里我先對的安裝使用講解下。接下來說點實際的,如何利用結合自動化工作在項目中使用。 PostCSS介紹 PostCSS是一個利用JS插件來對CSS進行轉換的工具,這些插件非常強大,強大到無所不能。其中,Autoprefixer就是眾多Post...
摘要:本身并不直接用于處理樣式,只有配合它的插件,才能完成相關的編譯工作。是很容易引入當前的工作流中的。無論是還是,都有比較方便的方式。 一般來說介紹一個東西都是要從是什么,怎么用的順序來講。我感覺這樣很容易讓大家失去興趣,先看一下postcss能做點什么,有興趣的話再往下看,否則可能沒有耐心看下去。讓我們開始吧 postcss能做什么 補全css屬性瀏覽器前綴 手寫的代碼可以是這樣的: ....
摘要:這里要介紹的是工作流中的一種很普遍的代碼加工流程正常的業務邏輯開發流程需要經過預處理器如或,然后再經過后處理器如進行深加工。 還未看的,可以點擊查看上兩篇文章喲:Webpack 最佳實踐總結(一)、Webpack 最佳實踐總結(二) 好了,這篇是第三篇,也是完結篇,我感覺這一篇是最亂的一篇,湊合著看吧,不會讓你失望的 整合 CSS 加工流 有時候,前端項目中除了 JavaScript ...
摘要:這里要介紹的是工作流中的一種很普遍的代碼加工流程正常的業務邏輯開發流程需要經過預處理器如或,然后再經過后處理器如進行深加工。 還未看的,可以點擊查看上兩篇文章喲:Webpack 最佳實踐總結(一)、Webpack 最佳實踐總結(二) 好了,這篇是第三篇,也是完結篇,我感覺這一篇是最亂的一篇,湊合著看吧,不會讓你失望的 整合 CSS 加工流 有時候,前端項目中除了 JavaScript ...
閱讀 3463·2019-08-30 13:15
閱讀 1402·2019-08-29 18:34
閱讀 826·2019-08-29 15:18
閱讀 3487·2019-08-29 11:21
閱讀 3250·2019-08-29 10:55
閱讀 3700·2019-08-26 10:36
閱讀 1872·2019-08-23 18:37
閱讀 1822·2019-08-23 16:57