使用伪类将el-switch文字放在内部

前言

由于switch是放在table里的,如果文字放在外面,样式会比较不好看。如果单独写一个浪费造轮子,我们直接动态添加类名,应该可以实现类似的效果,所以就可以使用伪类进行添加文字。

效果

在这里插入图片描述

源码

  <el-switch
            :width="60"
            :value="getTaskSubscribeState(row)"
            active-color="#3399FF"
            inactive-color="#CCCCCC"
            active-value="1"
            inactive-value="0"
            :class="{
              'switch-is-actived': getTaskSubscribeState(row) === '1',
            }"
          >
 </el-switch>
.el-switch {
  /deep/ .el-switch__core {
    &::before {
      content: '关闭';
      color: #fff;
      position: absolute;
      // font-size: 14px;
      transform: scale(0.85);
      left: 20px;
    }
  }
  &.switch-is-actived {
    /deep/ .el-switch__core {
      &::before {
        content: '开启';
        left: 10px;
        transform: scale(0.85);
      }
    }
  }
}
### 解决方案 在 Element UI 的 `el-switch` 组件中,默认情况下并没有提供直接将文字放在开关按钮内的属性设置。不过,可以通过自定义样式来实现这一效果[^1]。 为了达到这个目的,可以采用以下两种方式之一: #### 方法一:覆盖原有样式 通过 CSS 覆盖原有的样式,使文字能够显示在开关内部。需要注意的是,在修改样式时应确保不会影响其他页面元素的功能性和美观度。 ```css /* 自定义样式 */ .el-switch__core { position: relative; } .el-switch .el-switch__label { position: absolute; width: 100%; height: 100%; color: white; /* 文字颜色可以根据背景调整 */ text-align: center; line-height: 20px; /* 根据实际高度调整 */ } ``` 对于不同的开关状态(开启/关闭),还可以进一步细化样式处理: ```css .is-checked .el-switch__label--left, :not(.is-checked) .el-switch__label--right{ display:none; } .is-checked .el-switch__label--right, :not(.is-checked) .el-switch__label--left{ display:block !important; } ``` 以上代码片段实现了当开关处于不同状态下只展示相应的标签内容的效果。 #### 方法二:利用插槽(Slot) 如果希望更灵活地控制文本的位置以及交互逻辑,则推荐使用 Vue 提供的 slot 插槽机制来自定义 `el-switch` 内部结构。这种方式允许开发者完全按照需求定制化组件外观而不必担心破坏原生功能。 ```html <template> <div class="custom-switch"> <!-- 开启状态 --> <span v-if="value" class="switch-text">ON</span> <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" @change="handleChange()" > <!-- 关闭状态 --> <span slot="inactive-icon" class="switch-text">OFF</span> </el-switch> <!-- 动态切换文本位置 --> <transition name="fade"> <span :class="{ 'on': value, 'off': !value }">{{ value ? '' : 'OFF' }}</span> </transition> </div> </template> <script> export default { data() { return { value: true // 初始值可根据实际情况设定 }; }, methods: { handleChange(val){ console.log(`Switch status changed to ${val}`); } } }; </script> <style scoped> .custom-switch { position: relative; } .switch-text { font-size: 12px; margin-left: -8px; transition: all .3s ease-in-out; } .on { opacity: 1;left:-7px;} .off{opacity: 0;left:15px;} .fade-enter-active, .fade-leave-active { transition: opacity .5s; } .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { opacity: 0; } </style> ``` 此模板展示了如何基于用户的操作实时更新界面中的文本信息,并且保持良好的用户体验。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值