首页 > 其他分享 >Vue笔记 - 样式穿透原理及使用方法

Vue笔记 - 样式穿透原理及使用方法

时间:2022-11-20 19:15:00浏览次数:47  
标签:__ el Vue 样式 笔记 穿透 scoped 组件

样式穿透

目录

1. 为什么需要样式穿透

  • 在开发中引入了第三方组件库(如element-ui),但又想要修改第三方组件库中组件的样式。

    组件库中的组件往往都有自己的样式,有时在开发中需要做出一定的调整。但是由于scoped的问题,有时对组件的样式修改会失效。而一旦去掉scoped,又会导致各种组件之间样式覆盖,此时就需要使用样式穿透了

  • 需要明确一点:并不是所有第三方组件库组件的样式修改都需要样式穿透 (详情请看下文)

1.1 为什么样式会失效

  • 为什么有时在修改第三方组件样式时,样式不生效?为什么有时又能直接修改?

    /*无效*/
    .el-dialog {
      width: 100%;
    }
    
    /*有效*/
    .el-input {
    	width: 198px;
    }
    

    产生问题的原因很大程度上与scoped有关

  • scoped的原理

    scoped底层是通过在DOM节点中添加data-v-xxxCSS中通过添加[data-v-xxx]属性过滤,提高优先级,来实现样式的私有化。

    也就是说,上面两种组件的运行代码在scoped的作用下实际上长这样:

    • el-input

    • el-dialog

    由此可以看出一个问题,那就是el-dialog__wrapper下面的子组件并没有被scoped添加标记,也就是说scoped内的样式并没有对它们生效。但是对于el-input,scoped成功对它添加了标记,设置的样式也就能对它生效了

  • 那么在什么情况下scoped会添加标记呢

    scoped在渲染的时候,如果组件内部还有子组件,只会在父组件,以及子组件的根元素加上data-v-xxx属性

2. 如何使用样式穿透

  • less写法

    /deep/ .el-table__body-wrapper {
        cursor: pointer;
    }
    
  • scss写法

    ::v-deep .el-table::before {
        background-color: transparent;
     }
    

2.1 实例

我想要修改element-ui中breadcrumb(面包屑)的字体颜色

直接修改el-breadcrumb__item的字体颜色是不行的,因为字体颜色属性存在于子组件el-breadcrumb__inner之中,因为scoped的影响无法直接修改它的样式,所以只能使用样式穿透

.header-container {
  .l-content {
    /deep/.el-breadcrumb__item {
      .el-breadcrumb__inner {
        font-weight: normal;
        &.is-link {
          color: #666;
        }
      }
      &:last-child {
        .el-breadcrumb__inner {
          color: #fff;
        }
      }
    }
  }
}

标签:__,el,Vue,样式,笔记,穿透,scoped,组件
From: https://www.cnblogs.com/Solitary-Rhyme/p/16909217.html

相关文章

  • vue组件中插入二维码的操作
    vue组件中插入二维码的操作 引入在public/index.html的head标签中引入:<scriptsrc="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>......
  • Vue3笔记 - 浅析Vue2和Vue3响应式原理及两者差异
    浅析Vue2和Vue3响应式原理及两者差异目录浅析Vue2和Vue3响应式原理及两者差异vue2的响应式vue2中为数据添加响应式模拟Vue2实现响应式原理vue3的响应式vue3中为数据添加响......
  • Uncaught ReferenceError: Vue is not defined(之二)
    背景最近开发的一个项目,前段时间开发过程中还好好的,最近一次打包部署后,浏览器访问一直是打不开:打开控制台,看到的一个报错如下: 作为一个前端不太熟练的后端研发,我在网上......
  • Uncaught ReferenceError: Vue is not defined(之一)
    报错信息UncaughtReferenceError-Vueisnotdefined报错代码示例<body><divid="app"><span>{{username}}</span></div><scriptsrc="https://cdn.......
  • JavaWeb笔记
    1.JavaEE项目的三层架构web层                    com.atguigu.web/servlet/controllerservice层         ......
  • vue3和vue2的区别
    1、vue3完全支持typescript,提高项目的可维护性2、Fragment:模板更简单。vue3用到了一个虚拟的父级,可以多个根节点domvue2只能有一个父级节点3、vue2用newVue();vu......
  • 20201331 黄文刚 学习笔记12(第十四章)
    20201331黄文刚学习笔记12(第十四章)一、知识点归纳以及自己最有收获的内容知识点归纳摘要本章讨论了MySQL关系数据库系统;介绍了MySQL并指出了它的重要性;展示了如何在......
  • springboot+vue 前后端分离项目对 token 的无痛刷新
    前言最近在做一个系统时,使用了token令牌来进行前后端交互的权限认证。token一般用于前端向后端发起请求时的权限认证。用户登录自己的账号后,会得到一个token,放在每......
  • linux笔记
    1.图文并茂解释开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别?什么是开源许可协议?自由软件/开源软件是自由的,免费的,源代码开放的,我们可自由下载安装和使用。同......
  • 《Unix/Linuv系统编程》第十四章学习笔记
    第14章MYSQL数据库系统MYSQL简介1.MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB......