vue组件利用css var(--变量)实现动态修改伪类属性(::before、::after)

12 篇文章 0 订阅
如图所示:

在这里插入图片描述

#1:

我们可以利用此属性实现vue组件动态传值,修改例如:::before、::after等,伪类的背景色,背景图等属性值。

因为vue利用无法直接在css中使用data里的变量,利用var(–变量名),以及style中定义变量(其实此步是模仿:root{})方能修改。

动态切换主题也可利用此方式实现,由后端返回图片地址,以及颜色主题。

#2:

常规使用方式,但是很尴尬,人们并不喜欢这样写。

只有系统性,需要大量修改重复css属性,才会用到这个。

代码如下:(复制另存txt,修改.html直接运行)
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>vue组件利用css var(--变量)实现动态修改伪类属性(::before、::after)</title>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <style>
        :root {
            --main-bg-color: #eee;/* 重要(#2 配对使用) #2*/
        }
        .bodyCss {
            background: var(--main-bg-color);/* 重要(#2 配对使用) #2*/
        }
        .bodyCss .cardBox{
            font-size: 16px;
            margin:0 12px 12px 12px;
            background: #ffffff;
            border-radius: 8px;
            padding:15px;
            box-sizing: border-box;
            text-align: left;
        }
        .bodyCss .cardBox .titleBox{
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .bodyCss .cardBox .titleBox .title{    
            font-size: 16px;
            color: #333;
            font-weight: bold;
            display: flex;
            align-items: center;
        }
        .bodyCss .cardBox .titleBox .title::before{
            content:'';
            width:3px;
            height: 14px;
            margin:2px 10px 0 0;
            display: block;
            background:var(--bgColor);/* 重要(#1 配对使用) #1*/
            border-radius: 2px; 
        }
    </style>
</head>
<body class="bodyCss">
    <div id="app" style="text-align: center;">
        <el-radio-group v-model="bgColor" style="margin: 30px 0;">
            <el-radio-button label="#00f">#00f</el-radio-button>
            <el-radio-button label="#f00">#f00</el-radio-button>
            <el-radio-button label="#ff0">#ff0</el-radio-button>
            <el-radio-button label="#0f0">#0f0</el-radio-button>
        </el-radio-group>
        <div class="cardBox">
            <div class="titleBox">
                <div class="title" :style="{ '--bgColor':bgColor }"><!-- 重要(#1 配对使用) #1 -->
                    <span :style="{color:bgColor}">动态修改伪类样式</span>
                </div>
                <span>></span>
            </div>
            <div>
                <p>#1</p>
                <p>我们可以利用此属性实现vue组件动态传值,修改例如:::before、::after等,伪类的背景色,背景图等属性值。</p>
                <p>因为vue利用无法直接在css中使用data里的变量,利用var(--变量名),以及style中定义变量(其实此步是模仿:root{})方能修改。</p>
                <p>动态切换主题也可利用此方式实现,由后端返回图片地址,以及颜色主题。</p>
                <p>#2</p>
                <p>常规使用方式,但是很尴尬,人们并不喜欢这样写。</p>
                <p>只有系统性,需要大量修改重复css属性,才会用到这个</p>
            </div>
        </div>
    </div>
</body>

<script src="https://lib.baomitu.com/vue/2.6.14/vue.js"></script>
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- 引入 echart -->
<script src="https://lib.baomitu.com/echarts/5.2.0/echarts.common.js"></script>

<script>
    new Vue({
        el: '#app',
        data() {
            return { 
                bgColor:'#19AEF7',
            }
        },
        mounted(){

        },
        methods: {

        }
    })
</script>
</html>

番外篇:

要过年了,没有了鞭炮,却来了疫情,晨起动征铎,客行悲故乡。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘斩仙的笔记本

富贵险中求

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值