遗世独立的梦见亭

  • 回首
  • 求索
    • 技术学习
    • 绘画学习
    • 建站日志
  • 消愁
    • 鸡尾酒
    • 旅游日记
    • 美酒品鉴笔记
  • 归梦
    • 游戏杂谈
    • 游戏开发日志
  • 闲笔
    • 小说创作
    • 胡言乱语
  • 入世
    • 工作笔记
遗世独立的梦见亭
  1. 首页
  2. 技术学习
  3. 正文

【Vue基础】关于Vue中CSS的scoped属性作用域与样式穿透

2022年4月2日 2004点热度 0人点赞 0条评论

scoped

在了解scoped属性之前,先了解一下Vue(中的插件)在渲染DOM时干了什么。Vue在渲染DOM后会在DOM节点上生成一个随机串data属性,这一属性给了当前组件下的DOM一种唯一标识。

当在style标签中加入scoped属性后,在页面渲染完毕后,style下所有的CSS都会自动转换,在过滤器上添加与DOM相同的data属性值。也就是说,从结果来看,scoped属性让CSS只对当前组件中的元素起作用,防止了CSS全局污染。

要注意,scoped修饰后的CSS过滤器只对编译器中写入的元素起作用(其实就是只作用于当前组件元素)。比如,如果你使用了element组件库,在编译器中写入的是<el-input>,但是在渲染页面后,input元素的类为“el-input__inner”,此时,你在scoped属性的style中写入“.el-input__inner”是无法起到作用的,因为当前组件中并没有类名为el-input__inner的元素。

>>>   /deep/   ::v-deep

那如果我们要修改这类元素该怎么办呢?我们可以去掉scoped属性,这样作用域就不会局限于当前组件了。可是去掉会造成全局样式污染,如何才能既不去掉scoped,又能够修改element元素的样式呢?

一种省事的方法是,scoped属性的style和无属性的style并用。另一种方法是,在scoped属性的style中进行样式穿透。

/deep/和“>>>”的二者作用是一样的,针对于不同的css预处理器——例如sass 不能解析 “>>>”属性——的情况下可以使用/deep/,它是">>>"的别名,原理相同。

注意:样式穿透只能向子级元素穿透,不能向父级元素穿透。

1.>>>

如果项目使用的是css原生项目,可以直接用 >>> 进行穿透。

<style scoped>
/*编译前*/
.a >>> .b { 
 /* ... */
}

/*编译后*/
.a[data-v-f3f3eg9] .b { /* ... */ }
</style>

2./deep/

项目中用到了预处理器scss、sass、less,操作符>>>可能会因为无法编译而报错。此时可以使用 /deep/。
注意:vue-cli3以上版本不可以使用

<style lang="scss" scoped>
/*用法1*/
.a {
 /deep/ .b { 
  /* ... */
 }
} 
/*用法2*/
.a /deep/ .b { 
  /* ... */
 }
</style>

3.::v-deep

如果使用了预处理器,都可以使用 ::v-deep。

<style lang="scss" scoped>
/*用法1*/
.a{
 ::v-deep .b { 
  /* ... */
 }
} 
/*用法2*/
.a ::v-deep .b {
  /* ... */
}
</style>

 

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: CSS element-ui Vue 基础 学习
最后更新:2022年4月2日

曦染

一个浪漫主义者的死。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

曦染

一个浪漫主义者的死。

文章目录
  • scoped
  • >>>   /deep/   ::v-deep
    • 1.>>>
    • 2./deep/
    • 3.::v-deep
标签聚合
cookie 工作踩坑 element-ui Vue 笔记 CSS 绘画 vant 学习 基础
最新 热点 随机
最新 热点 随机
评价《饿殍:明末千里行》 黑湖 2024.10.19 京A 8×8啤酒节 【坑】使用formdata-polyfill兼容iOS系统的FormData 【学习】解决axios前端设置cookie跨域不携带的问题 没有什么天长地久
裸辞一个月了,唠唠自己的坑爹人生和坑爹工作 第一个自设OC草稿 【坑】element表单校验坑:validate类型错误&提示"is not a string" 【Vue基础】关于Vue中CSS的scoped属性作用域与样式穿透 谨记人生的惨痛经历 2024.10.19 京A 8×8啤酒节

COPYRIGHT © 2022 遗世独立的梦见亭. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

京ICP备2022007681号-1