vue中css作用域

问题:大家可能在写项目的时候经常看到style 标签中 scoped 属性,其实这个属性就是为该组件设置私有样式,防止污染其它组件的样式。

例如:创建一个组件foodNews,index

<template>
  <div class="container">
      <span class="title">为何房价!!!</span>
  </div> 
</template>
<style lang="scss">
   .container{
     width: 500px;
     height:500px;
      
   }
   .title{
       color:skyblue;
     }
</style>
<template>
  <div class="contain-wrap">
    <food-news></food-news>
     <span class="title">我是首页的文字,测试style的modules</span>
  </div>
</template>
<style lang="scss">
 .title{
       color:purple;
     }
</style>

这样如果不为组件的样式设置私有样式的话,那么如果有相同的类名以及标签样式就会起冲突。因此我们在style标签上添加scoped属性,也可以在stylen标签上添加 module 属性

但使用 scoped 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件有作用域的 CSS 和子组件有作用域的 CSS 的影响。并且如果想要修改子组件
样式的话需要使用 >>> 操作符或者/deep/ 操作符

例如:

<style scoped>
.a >>> .b { /* ... */ }
</style>

使用CSS Modules设置css的作用域:

例如:

在你的 <style> 上添加 module 属性:
<style module>
.red {
  color: red;
}
.bold {
  font-weight: bold;
}
</style>

这将为 css-loader 打开 CSS Modules 模式,生成的 CSS 对象将为组件注入一个名叫 $style 的计算属性,你可以在你的模块中使用动态 class 绑定:

<template>
  <p :class="$style.red">
    This should be red
  </p>
</template>

由于它是一个计算属性,它也适用于 :class 的 object/array 语法:


<template>
  <div>
    <p :class="{ [$style.red]: isRed }">
      Am I red?
    </p>
    <p :class="[$style.red, $style.bold]">
      Red and bold
    </p>
  </div>
</template>

你也可以在 JavaScript 访问它:

<script>
export default {
  created () {
    console.log(this.$style.red)
    // -> "_1VyoJ-uZOjlOxP7jWUy19_0"
    // an identifier generated based on filename and className.
  }
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值