最近在看vue-element-admin 项目文档的时候发现有个叫Dart Sass 的东西,这东西可以替换之前我经常的Node Sass ,曾几何我们在很痛苦的装Node Sass ,现在我们是时候跟Node Sass 说在再见了。具体内容请大家查看 Node Sass to Dart Sass
升级教程
yarn remove node-sass
yarn add sass -D
在上文提到的文档教程中提到:在替换完Node Sass后,需要用::v-deep 代替/deep/ 和>>> (注:如果在css中直接这么写是没用作用的) 来进行样式穿透。最重要原因是 vue 3.0 RFC中指定的写法,我们这么写之后可以尽量的最大程度减少升级到Vue3的复杂度。
.a {
>>> {
.b {
color: red;
}
}
}
/* 或者 */
.a {
/deep/ {
.b {
color: red;
}
}
}
/* 修改为 */
.a {
::v-deep {
.b {
color: red;
}
}
}
不过我在读完 vue 3.0 RFC后发现,其实更推荐下面的写法
/* DEPRECATED */
::v-deep .bar {}
/* 用伪元素写法传入一个css选择器作为参数 */
::v-deep(.bar) {}
/* 上边的写法会编译为下边的样子 */
[v-data-xxxxxxx] .bar {}
此外还有两种scope css写法:
在 <style scoped> 代码快中使用 ::v-global() , 在这代码块中是全局范围
::v-global(.foo) {}
/* 被编译为 */
.foo {}
专门修改slot 插槽中元素的样式,你在子组件中修改插槽中样式是没用的,因为传入组件的插槽内容输入父组件,而Scoped styling 是在编译时确定的,我们在子组件中可以这么写
::v-slotted(.foo) {}
/* 编译为 */
.foo[v-data-xxxxxxx-s] {}
注意-s (感觉像是slot的缩写)后缀,这表明这个样式只针对于slot 中的内容
参考资料
|
请发表评论