vue-单文件样式设置作用域的几种方式

826 阅读2分钟

众所周知scoped可以设置样式的作用域,让组件内的样式不影响到组件外,但是vue官网里是不推荐是使用scoped,那除了scoped之外还有那几种设置样式作用域的方式呢?

1.class的策略。

即:

使用唯一的 class 名可以帮你确保那些三方库的 CSS 不会运用在你自己的 HTML 上。比如许多工程都使用了 buttonbtnicon class 名,所以即便你不使用类似 BEM 的策略,添加一个 app 专属或组件专属的前缀 (比如 ButtonClose-icon) 也可以提供很多保护。

vue官方,是极力推荐这种模式的写法。

例如:

我的页面是写首页的,即home页,在class起名的时候,前缀或后缀带上首页的标记。

<style >
 .home_page{
  }
 .home_body{ 
 }
</style>

2. css model

构建步骤中对CSS类名选择器限定作用域的一种方式。

用法:

<style model >
 .home_page{
  }
 .home_body{ 
 }
</style>

实际上,我个人觉得model的方式比scoped的方式更好。

scoped作用域限制是因为它他的属性上加上了一个唯一的值,在加了scoped之后,我们F12检查的时候,经常能看到:

<span data-v-0467f817 class="errShow">css scoped</span>

而使用css model的时候 ,F12检查:

<span class="_3ylglHI_7ASkYw5BlOlYIv_0">css model</span>

css scoped的增加属性还不能完全避免样式与外部的互相影响,而css model的实现css作用域的方式却更加彻底,它不是添加属性,而是直接改变类名

www.cnblogs.com/xiaohuochai…

而,css modules的作用远不止样式作用域,通过以上链接去了解它的强大之处吧。

2. css sass

实际上,使用sass做样式作用域,也是属性一种class的策略。

<div class="page-home">
  <div class="title"></div>
  <div class="body"></div>
</div>

在样式命名上,我们通过以上方式,全部demo定义在page-home下。

在css 上

<style lang="scss">
    .page-home{
       .title{
       }

       .body{
       }
     }
</style>

我们只要保证,在整个项目里,page-home是唯一的。

end.............