• scoped引起的deep与>>>改变elementUI的样式


    一、起因

    使用到了elementUI的组件,但是其鬼样式已经提前写好了,你不能改变它的原始样式,因为它全部组件的CSS都加上了scoped属性,限制了样式的作用范围与可访问范围。所以当我们直接修改elementUI的样式的时候,通常没啥效果。

    二、解决:使用deep或者>>>

    1.知识储备:

    首先vue的CSS属性为了不污染全局样式,所以给CSS样式表增加了scoped的属性,此属性限制了外面直接修改子组件的CSS样式,当我们使用UI组件的时候,那些组件,相对于我们自己写的组件来说,它们都是子组件,由于子组件都有scoped属性,所以我们无法直接在父组件内修改它们的样式,索性vue同样给出了解决方案:deep与>>>;

    2.关于deep与>>>

    官方文档的记录:

    子组件的根元素:

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

    深度作用选择器:

    如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> 操作符:

    <style scoped>
    .a >>> .b { /* ... */ }
    </style>

    上述代码将会编译成:

    .a[data-v-f3f3eg9] .b { /* ... */ }

    一些类似 Sass 之类的CSS语法模板预处理器无法正确解析 >>>。这种情况下你可以使用 /deep/::v-deep 操作符取而代之——两者都是 >>> 的别名,同样可以正常工作。

    总结:

    (1)通常在使用vue的一些UI库时,我们一般无法更改它们的原始样式,即使它们提供的原始样式不是我们所需要的,因为它们的CSS都加上了scoped属性;

    (2)由于scoped属性引起的css样式修改无效的问题,我们可以使用deep或者>>>来达到修改子组件的css样式的目的。

    (3)deep与>>>作用都一样,只不过一些类似Sass之类的CSS语法模板无法解析>>>,所以有了deep。

    三、demo:使用deep改变elementUI的input组件的placeholder的颜色

    /deep/ input::-webkit-input-placeholder { /* WebKit browsers 适配谷歌 */
        color: yellow;
    }
    /deep/ input:-moz-placeholder { /* Mozilla Firefox 4 to 18 适配火狐 */
        color: yellow;
    }
    /deep/ input::-moz-placeholder { /* Mozilla Firefox 19+ 适配火狐 */
        color: yellow;
    }
    /deep/ input:-ms-input-placeholder { /* Internet Explorer 10+  适配ie*/
        color: yellow;
    }

    结果:

    穷则独善其身,达则兼济天下……
  • 相关阅读:
    NSIS附加数据库,分离数据库脚本代码
    C# 昨天今天明天上周本周下周上月本月下月等日期计算
    NSIS安装MSDE2000和NET2.0脚本代码
    sql 获取指定数据表的所有字段名称的字符串
    如何检测TerraGate的InternetLicense运行是否正常
    Skyline TEP5.1.3二次开发入门——初级(七)
    Skyline软件二次开发初级——2如何在WEB页面中控制三维地图的观察点坐标和角度
    如何实现Skyline与微软bing地图的联动
    Skyline软件二次开发初级——3如何在WEB页面中的三维地图上创建几何对象
    Skyline软件二次开发初级——1如何在web页面中添加控件和加载三维地图数据
  • 原文地址:https://www.cnblogs.com/hmy-666/p/14670370.html
Copyright © 2020-2023  润新知