• 动态修改el-input样式;动态修改elmentUI元素样式;css变量


    在这里插入图片描述

    场景:正常我们动态修改div元素的样式,使用:style和:class即可;但是我们想要动态修改element的组件样式时候,例如el-input字体颜色,由于el-input的样式嵌套很深,我们需要修改的实际是.el-input__inner这个样式的color,但是我们在html又没法拿到这个类名。

    解决办法:使用css变量修改


    一、css变量是什么?

    1.css变量

    css变量具体可以看这篇

    注意:1.声明变量的时候,变量名前面要加两根连词线 –
    2.变量使用var() 函数包裹,还可以使用第二个参数,表示变量的默认值。如果变量不存在,就会使用这个默认值

    以下代码中,声明了两个变量: --shadow、--size

    div {
        font-size: var(--size, 18px);
        box-shadow: var(--shadow);
    }
    
    • 1
    • 2
    • 3
    • 4

    二、修改el-input字体颜色

    1.原先正常修改字体颜色

    /deep/ .el-input__inner {
      color: red
    }
    
    • 1
    • 2
    • 3

    2.动态修改el-input字体颜色

    思路:
    1.给css引入一个变量--inputColor

            /deep/ .el-input__inner {
              color: var(--inputColor); //使用css变量 注意变量前需要加 --
            }
    
    • 1
    • 2
    • 3

    2.vue声明一个变量颜色colorVal 例如 #606266

    data (){
    	return {
    		colorVal: '#606266',
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.需要修改的地方,为--inputColor变量赋值

    <el-input v-model="valueStr" :style="{ '--inputColor': colorVal}"></el-input>
    
    • 1

    4.动态js修改colorVal即可

    this.colorVal = 'red'
    
    • 1

    需要注意:--inputColor是css变量,帮助引导的,colorVal才是设置的样式值

    3、以下代码可直接复制

    <template>
      <div>
        <el-input v-model="valueStr" :style="{ '--inputColor': colorVal}" @input="change1"></el-input>
      </div>
    </template>
    
    <script>
    export default {
      data () {
        return {
          valueStr: '',
          colorVal: '#606266',
        }
      },
      created () {
      
      },
      methods: {
        change1 () {
          var r = Math.floor(Math.random() * 256)
          var g = Math.floor(Math.random() * 256)
          var b = Math.floor(Math.random() * 256)
          // 设置随机色
          var color = '#' + r.toString(16) + g.toString(16) + b.toString(16)
          this.colorVal = color
        },
      },
    }
    </script>
    
    <style lang="less" scoped>
    /deep/ .el-input__inner {
      color: var(--inputColor); //使用css变量 注意变量前需要加 --
    }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    三、vue3里修改element组件样式

    直接使用v-bind(变量)即可

    let displayValue = ref(props.mode !== 'view' ? 'block' : 'none')
    
    
    
    <style lang="scss" scoped>
    :deep(.el-form-item__label:before) {
      display: v-bind(displayValue) !important;
    }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    总结

    其他的组件或者组件库,动态修改样式,同样道理

  • 相关阅读:
    我的影刀故事
    新零售SaaS架构:什么是线上商城系统?
    git都在自己的个人分支开发吗?功能分支和个人分支工作流
    如果你已经学会了Python编程基础知识,那么下一步?
    Unity自定义Timeline总结
    CCIE-15-MPLS-VPN
    MySQL 版本8.0.26在centos系统中安装的记录
    Kotlin--内置函数的总结
    【生物信息学】奇异值分解(SVD)
    java的调用百度接口工具方法(两个之间的距离)
  • 原文地址:https://blog.csdn.net/i_am_a_div/article/details/127861858