来自 Web前端 2020-05-07 05:42 的文章
当前位置: 网上澳门金莎娱乐 > Web前端 > 正文

vue组件中的样式属性scoped实例详解_vue.js_脚本之家

时间: 2019-08-30阅读: 214

Scoped CSS

在样式开发过程中,有两个问题比较突出:

网上澳门金莎娱乐,Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范。

全局污染 —— CSS 文件中的选择器是全局生效的,不同文件中的同名选择器,根据 build 后生成文件中的先后顺序,后面的样式会将前面的覆盖;选择器复杂 —— 为了避免上面的问题,我们在编写样式的时候不得不小心翼翼,类名里会带上限制范围的标示,变得越来越长,多人开发时还很容易导致命名风格混乱,一个元素上使用的选择器个数也可能越来越多,最终导致难以维护。

vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素

好在 vue 为我们提供了scoped可以很方便的解决上述问题。 它顾名思义给 css 加了一个域的概念。

它是通过使用PostCSS来改变以下内容实现的:

/* 编译前 */.example { color: red;}/* 编译后 */.example[_v-f3f3eg9] { color: red;}
.example { color: red;} hi

.example[data-v-f3f3eg9] { color: red;} hi

只要加上 style scoped 这样 css 就只会作用在当前组件内了。

混合使用全局属性和局部属性

TIP

/* global styles *//* local styles */

使用 scoped 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件的 scoped CSS 和子组件的 scoped CSS 的影响。这样设计是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式。

关于子组件的根元素

使用了scoped属性之后,父组件的style样式将不会渗透到子组件中,然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响,这么设计的目的是父组件可以对子组件根元素进行布局。 .vue模板中的样式是根据需要按需加载,访问一个页面该组件中的样式就会追加到head标签中,如果父子组件中都对某个子组件根节点元素进行了控制,则父组件里的样式会被后来的覆盖。

深选择器

如果想对设置了scoped的子组件里的元素进行控制可以使用'>>>'或者'deep'

本文由网上澳门金莎娱乐发布于Web前端,转载请注明出处:vue组件中的样式属性scoped实例详解_vue.js_脚本之家

关键词: