scoped属性是前端开发中经常接触到的样式属性。那么,我们应该如何应用这个属性来加快我们的工作进度呢?下面我将从以下几个方面来谈谈我在工作中遇到的scope属性问题。一、应用场景我们在Vue项目中经常会用到组件库。组件库本身有自己的style属性,但是组件库本身的style属性不一定是我们需要的。如边距、颜色、尺寸等属性。一些重要的常用属性可以通过组件库提供的指令进行设置。但是,在更一般的情况下,组件库提供的说明并不足以让我们完成日常的开发工作。我们需要在组件上设置一些样式,此时需要用到scoped属性和样式穿透。二、概念介绍1、属性选择器如图所示。如果要选择A页面的第一个a标签,光有类名和标签名是不够的。您还需要添加a标签的自定义[one]属性。属性选择器选择第一个属性选择器相当于java中方法或类的签名,标识一个唯一的标签或页面。2.什么是scoped属性scoped是“作用域”的意思。在我们的style标签中,除了声明CSS属性(SCSS、LESS等)的lang属性外,还声明了scoped属性。scoped作用于单页应用,形成页面间的隔离。因此,单页应用程序的第一次加载将加载页面中的所有CSS文件。如果不添加作用域。以a标签为例:页面A和B同时有一个标签。A页面的a标签没有设置颜色,B页面的a标签有颜色设置。如果先点击(load)A页面,A页面的a标签也会渲染成红色。但是如果你添加作用域。在声明a标签样式的B文件的style上设置scoped属性,我们会看到属于B页面的style文件添加了一个data-id属性。由此我们可以总结出scoped属性的作用:形成页面间样式的隔离。他的作用机制是Vue在内部为每个页面的样式添加唯一标识符(属性)。【注意】在某些情况下,constrouteA=()=>import("A.vue")等按需引入路由(路由的懒加载)的情况可能不会重现上述情况,因为在懒加载的过程中loading,每个页面会单独导入,首屏加载时不会加载所有页面。总之。Vue在创建项目时,每个Vue组件都会以属性选择器的形式拼接一个唯一标识,类似于data[v-ddddd],形成页面之间的隔离。3.scoped的副作用我们要保证样式不能被污染,所以必须要有scoped,但是在特殊情况下,元素应该如何选择呢?例如,有一个div,里面有一个el-input。我们想通过选择div下面的输入框来选择元素。通常情况下,我们会这样写:但是属性id是为我们在页面上的输入拼接的,所以我们Regular的写法是永远选不上的。4.解决方案:样式穿透v:deep比较常用,或者>>>样式穿透添加的位置相当于一个占位符,vue帮我们把属性值拼接到占位符的位置。问题完美解决。三、特殊场景的解决方法1、排查有时候,页面抖动(先打开A页面,然后B页面的样式突然抖了一下)是scoped属性引起的。仔细检查样式冲突以及是否声明了作用域。2.特殊方法是在极其特殊的情况下,不能通过样式渗透来选择元素。这时候我们可以在子页面的最外层声明class属性,通过类的唯一名称隔离不同的文件(经过特殊处理,在子页面写css属性,另外写一个style标签。scoped属性不写,只负责本页)【欢迎提出宝贵意见。]
