Vue -- scoped 组件间的样式冲突

news/2024/7/10 2:02:45 标签: vue, vue.js, 前端, 前端框架

文章目录

  • 1. 组件之间的样式冲突问题
    • 1.1 如何解决组件样式冲突的问题
    • 1.2 style 节点的 scoped 属性
  • 2. /deep/ 样式穿透
  • 3. 让 style 中支持 less 语法


1. 组件之间的样式冲突问题

默认情况下,写在 .vue 组件中的样式会全局生效,因此很容易造成多个组件之间的样式冲突问题。

导致组件之间样式冲突的根本原因是:

① 单页面应用程序中,所有组件的 DOM 结构,都是基于唯一的 index.html 页面进行呈现的
② 每个组件中的样式,都会影响整个 index.html 页面中的 DOM 元素

1.1 如何解决组件样式冲突的问题

为每个组件分配唯一的自定义属性,在编写组件样式时,通过属性选择器来控制样式的作用域,示例代码如下:
请添加图片描述

1.2 style 节点的 scoped 属性

为了提高开发效率和开发体验,vue 为 style 节点提供了 scoped 属性,从而防止组件之间的样式冲突问题:

<template>
  <div>
    <h3 class="title">这是 List.vue 组件</h3>

    <p>这是 List.vue 中的 p 标签</p>
    <p>这是 List.vue 中的 p 标签</p>
  </div>
</template>

<script>
export default {
  name: 'MyList',
}
</script>

<style lang="less" scoped>
</style>

<template>
  <div>
    <h1>这是 App.vue 组件</h1>

    <p>App 中的 p 标签</p>
    <p>App 中的 p 标签</p>

    <hr />

    <my-list></my-list>
  </div>
</template>

<script>
import MyList from './List.vue'

export default {
  name: 'MyApp',
  components: {
    MyList,
  },
}
</script>

<style lang="less" scoped>
p {
  color: red;
}
</style>

2. /deep/ 样式穿透

如果给当前组件的 style 节点添加了 scoped 属性,则当前组件的样式对其子组件是不生效的。

如果想让某些样式对子组件生效,可以使用 /deep/ 深度选择器。

注意:
/deep/ 是 vue2.x 中实现样式穿透的方案。在 vue3.x 中推荐使用 :deep() 替代 /deep/。

请添加图片描述

<template>
  <div>
    <h3 class="title">这是 List.vue 组件</h3>

    <p>这是 List.vue 中的 p 标签</p>
    <p>这是 List.vue 中的 p 标签</p>
  </div>
</template>

<script>
export default {
  name: 'MyList',
}
</script>

<style lang="less" scoped>
</style>

<template>
  <div>
    <h1>这是 App.vue 组件</h1>

    <p>App 中的 p 标签</p>
    <p>App 中的 p 标签</p>

    <hr />

    <my-list></my-list>
  </div>
</template>

<script>
import MyList from './List.vue'

export default {
  name: 'MyApp',
  components: {
    MyList,
  },
}
</script>

<style lang="less" scoped>
p {
  color: red;
}

// /deep/ .title {
//   color: blue;
// }

:deep(.title) {
  color: blue;
}
</style>

3. 让 style 中支持 less 语法

如果希望使用 less 语法编写组件的 style 样式,可以按照如下两个步骤进行配置:

① 运行 npm install less -D 命令安装依赖包,从而提供 less 语法的编译支持

② 在 <style>标签上添加 lang=“less” 属性,即可使用 less 语法编写组件的样式

<style lang="less" scoped>
  h1 {
    color: aquamarine;
    span {
      color: aqua;
    }
  }
</style>

http://www.niftyadmin.cn/n/563833.html

相关文章

阿里云服务器如何选择操作系统?操作系统选择方法

阿里云ECS服务器操作系统如何选择&#xff1f;新手站长网分享阿里云操作系统选择说明及选择方法&#xff1a; 如何选择服务器操作系统&#xff1f; 购买ECS云服务器选择操作系统是很重要的步骤&#xff0c;那么如何选择&#xff1f;哪个操作系统好&#xff1f;我们先了解一下…

Vue -- props配置项

文章目录1 组件的 props2 在组件中声明 props3 无法使用未声明的 props4 props 的大小写命名1 组件的 props 为了提高组件的复用性&#xff0c;在封装 vue 组件时需要遵守如下的原则&#xff1a; 组件的 DOM 结构、Style 样式要尽量复用 组件中要展示的数据&#xff0c;尽量由…

怎么做网站?个人和企业如何做网站,看完就会

现在个人和企业都想拥有自己的一个博客、网站&#xff0c;可以宣传自己、公司业务&#xff0c;是当今互联网社会必须的。其实制作一个网站并不是非常困难&#xff0c;只要您能认真看完我们这个做网站的教程&#xff0c;我相信你一定能做出一个自己想要的网站&#xff0c;那我们…

B树[概念]

文章目录1 B-Tree2 BTree1 B-Tree B-Tree&#xff0c;B树是一种多叉路衡查找树&#xff0c;相对于二叉树&#xff0c;B树每个节点可以有多个分支&#xff0c;即多叉。以一颗最大度数&#xff08;max-degree&#xff09;为5(5阶)的b-tree为例&#xff0c;那这个B树每个节点最多…

Vue----Class 与 Style 绑定

文章目录Class 与 Style 绑定1 动态绑定 HTML 的 class2 以数组语法绑定 HTML 的 class3 以对象语法绑定 HTML 的 class4 以对象语法绑定内联的 styleClass 与 Style 绑定 在实际开发中经常会遇到动态操作元素样式的需求。因此&#xff0c;vue 允许开发者通过 v-bind 属性绑定…

小程序----组件

文章目录1 小程序中组件的分类2 常用的视图容器类组件2.1 view 组件的基本使用2.2 scroll-view 组件的基本使用2.3 swiper 和 swiper-item 组件的基本使用2 常用的基础内容组件2.1 text 组件的基本使用2.2 rich-text 组件的基本使用3 其它常用组件3.1 button 按钮的基本使用3.2…

小程序----API

文章目录1 小程序 API 概述2 小程序 API 的 3 大分类1 小程序 API 概述 小程序中的 API 是由宿主环境提供的&#xff0c;通过这些丰富的小程序 API&#xff0c;开发者可以方便的调用微信提供的能力&#xff0c;例如&#xff1a;获取用户信息、本地存储、支付功能等。 2 小程序…

小程序----数据绑定

文章目录1 数据绑定的基本原则2 在 data 中定义页面的数据3 Mustache 语法的格式&#xff08;插值表达式&#xff09;3.1 Mustache 语法的应用场景3.2 动态绑定内容3.3 动态绑定属性3.4 三元运算3.5 算数运算1 数据绑定的基本原则 在 data 中定义数据在 WXML 中使用数据 2 在 d…