請教下 autoprefixer 和 cssnext 分別有什麼用處?有什麼區別?
Autoprefixer
顧名思義,這是一個根據你需要兼容的瀏覽器版本來自動增加前綴的工具,數據來自 http://caniuse.com, 這裡有一個在線演示的地址,一看就明白了。http://output.jsbin.com/gufoko/quiet
Options: 中填寫 &> 0% 可以輸出所有前綴,實際項目中推薦填寫具體的瀏覽器版本,比如我常用的配置是:
const browserOptions = {
browsers: [
"last 3 versions",
"ie &>= 10",
"ie_mob &>= 10",
"ff &>= 30",
"chrome &>= 34",
"safari &>= 6",
"opera &>= 12.1",
"ios &>= 6",
"android &>= 4.4",
"bb &>= 10",
"and_uc 9.9",
]
}
輸入:
.foo {
transition: .3s;
}
.foo {
-webkit-transition: .3s;
transition: .3s;
}
絕大多數項目我們已經可以拋棄 -moz-, -ms-, -o- 前綴了。
cssnext
這是一個面向未來的 CSS 語法轉譯工具,其實現的所有功能大部分都是有 W3C 草案的。但實際上很多功能不是太好用,比如 #rrggbbaa 這個 CSS Color L4 中定義的十六進位半透明色值,寫個 rgba(0, 0, 0, 0.5) 還得轉換為 #00000080。
功能大致就是官網列舉的這些:
Autoprefixer 和 cssnext 都是 PostCSS 的插件,而 cssnext 中引入了Autoprefixer 而已,就醬(&>^ω^&<)。
Autoprefixer根據 Can I use 的 數據,按需給無前綴代碼自動加廠商前綴。輸入:
a {
display: flex;
}
輸出:
a {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
/* custom selectors */
@custom-selector --heading h1, h2, h3, h4, h5, h6;
--heading { margin-top: 0 }
/* filters */
.blur {
filter: blur(4px);
}
輸出:
/* custom selectors */
h1,
h2,
h3,
h4,
h5,
h6 { margin-top: 0 }
/* filters */
.blur {
filter: url("data:image/svg+xml;charset=utf-8,&#filter");
-webkit-filter: blur(4px);
filter: blur(4px);
}
兩者都是基於 CSS 處理框架 postcss 的(postcss 就是 Autoprefixer 的作者把 Autoprefixer 從另一個 CSS 處理框架 rework 中遷移出來時搞的)。
相比之下,Autoprefixer 更加具有實用價值,而 cssnext 實現的功能以後瀏覽器會怎麼實現還存疑,感覺只能玩玩。倆都不懂,偶湊熱鬧的。
這玩意花點時間看下GitHub 上項目文檔不就好了。簡單來說- autoprefixer 只加前綴
- cssnext 依賴 autoprefixer(core) ,並附帶其他功能:
Features
- automatic vendor prefixes
- custom properties var() limited to :root,
- reduced calc() to optimize previously parsed var() references,
- custom media queries a nice way to have semantic media queries,
- media queries ranges that allows to replace min-/max- with &<= &>= (syntax easier to read),
- custom selectors to create your own selectors,
- color() a color function to modify colors,
- hwb() similar to hsl() but easier for humans to work with,
- gray() ,
- #rrggbbaa,
- rebeccapurple,
- font-variant properties,
- filter properties
- rem units
這個還是邀請 @一絲 姐姐來回答更為準確。我初步僅了解autoprefixer是後處理器中的一部分,而cssnext也是一個後處理器(似乎類似於PostCSS)。詳細的得問 @一絲 姐姐。
推薦閱讀:
※CSS3 的動畫的意義何在?
※如何解決前端的flex流動布局中的單個子元素位置?
※如何通過html和css完成下拉菜單的製作?
※怎樣理解HTML5和CSS3的語義化標籤?
※為什麼W3C要制定content-box盒子模型?IE5.5之前的IE盒子模型放在今天來看也是極好的啊