关于javascript:scoped属性及样式穿透

5次阅读

共计 1390 个字符,预计需要花费 4 分钟才能阅读完成。

scoped 属性是前端开发中常常接触的一个款式属性。那么,咱们应该怎么利用好这个属性,放慢咱们的工作进度呢?上面我会从以下几个方面来谈谈我工作中遇到的对于 scope 属性的问题。

一、利用场景

在 vue 我的项目中咱们常常会应用组件库,组件库自身具备本人的 style 属性,然而组件库自身的 style 属性不肯定是咱们须要的。比方边距、色彩、大小等属性。一些重要的、通用的属性能够通过组件库给咱们提供的指令来设置,然而,在更个别的状况下,组件库提供的指令不足以咱们实现日常的开发工作,咱们须要在组件上设置一些款式,此时咱们就须要用到 scoped 属性以及款式穿透。

二、概念引入

1. 属性选择器

如图,想要选中页面 A 中的第一个 a 标签,光有类名和标签名是不够的,还须要加上 a 标签自定义的 [one] 属性。

  • 属性选择器选中第一个 a

属性选择器相当于 java 中办法或类的签名,标识了惟一的标签或页面。

2.scoped 属性是什么

scoped 是“作用域”的意思。在咱们的 style 标签中,除了要申明 CSS 属性的 lang 属性(SCSS、LESS 等),还要申明 scoped 属性。

scoped 作用于单页面利用,是为了造成各个页面之间的隔离。因而,单页面利用首次加载就会加载页面中所有的 CSS 文件。

如果不加 scoped 的状况。

以 a 标签为例:A、B 页面同时有 a 标签。A 页面中的 a 标签没有设置色彩,B 中的 a 标签设置了色彩。如果先点开(加载)A 页面,则 A 页面中的 a 标签也会被渲染成红色。

然而如果加上 scoped。在申明 a 标签款式的 B 文件的 style 上设置 scoped 属性,咱们会看到属于 B 页面的款式文件被加上了一个 data-id 属性。

由此能够总结 scoped 属性的作用:

造成各个页面之间款式的隔离。他的作用机制是 vue 外部为每个页面上的款式都加上了惟一的标识符(属性)。

[留神]

在某些状况下,形如

const routeA =()=>import("A.vue")

这种按需引入路由(路由懒加载)的状况可能不会复现下面的状况,是因为懒加载的过程中,每个页面都会独自的引入,不会首屏加载的时候就全副加载。

综上所述。在 vue 创立我的项目时,每个 vue 组件会以属性选择器的形式拼接上一个惟一的标识符,相似于data[v-ddddd],造成页面之间的隔离。

3.scoped 的副作用

咱们要保障不能净化款式,因而必须有 scoped, 然而在非凡状况下,元素应该怎么选中呢?

例如,有一个 div,外面有一个 el-input,咱们想通过选中 div 下的 input 框的模式来选中元素,惯例状况咱们会这么写:

然而页面上为咱们的 input 拼接了属性 id,因而咱们的惯例写法永远无奈选中。

4. 解决形式: 款式穿透

v:deep 比拟罕用, 或者用 >>>
款式穿透加上的地位相当于占位符,vue 帮咱们把属性值拼接到占位符的地位。

问题完满解决。

三、非凡场景的解决措施

1. 排查

有时候,页面抖动(先关上 A 页面,而后 B 页面的款式忽然抖动一下)就是因为 scoped 属性惹的祸。要仔细检查有没有款式抵触,scoped 是否申明。

2. 非凡办法

还有就是在极其非凡的状况下,款式穿透也无奈选中元素,咱们此时能够在子页面最外层申明 class 属性,通过类的惟一名称隔离不同的文件(被非凡解决的 css 属性写在子页面中,另写一个 style 标签,不写 scoped 属性,只对本页面负责)

[

欢送大家提出宝贵意见。

]

正文完
 0