Vue2动态绑定class

简介: 从基础到实战,我们一环都不要少!

动态绑 class

如果下面看着烦,看这

第一种写法是使用字符串变量来作为类名,通过动态获取来改变样式。

第二种写法是使用对象,在对象中设置类名作为属性名,通过修改属性值来控制类名是否添加。

第三种写法是将第二种写法中的对象放到data配置项中,作为变量来处理。

第四种写法是将对象变量放到数组中,可以同时应用多个样式。

这四种写法逐渐增加了复杂度和灵活性,可以根据实际需求选择适合的写法来实现样式的动态绑定。

class样式

写法:

class="xxx" xxx可以是字符串、对象、数组。
字符串写法适用于:类名不确定,要动态获取。

对象写法适用于:要绑定多个样式,个数不确定,名字也不确定。

数组写法适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。

第一种写法

box 是一个变量,值为class类名

<div :class="box"> hello Vue </div>

代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>动态样式</title>
    <style>
        .box1 {
    
    
            width: 100px;
            height: 100px;
            border: 1px red solid;
        }

        .box2 {
    
    
            width: 200px;
            height: 200px;
            border: 2px pink solid;
        }
    </style>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <div :class="box"> hello Vue </div>
    </div>
    <script>
        let app = new Vue({
    
    
            el: "#app",
            data: {
    
    
                box: "box1"
            }
        })
    </script>
</body>

</html>

第二种写法

对象属性名为类名,值为布尔值,通过修改布尔值来控制类名是否添加

<div :class="{'box1':true}"> hello Vue </div>

代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>动态样式</title>
    <style>
        .box1 {
    
    
            width: 100px;
            height: 100px;
            border: 1px red solid;
        }

        .box2 {
    
    
            width: 200px;
            height: 200px;
            border: 2px pink solid;
        }
    </style>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <div :class="{
    
    'box2':isBox2}"></div>
    </div>
    <script>
        let app = new Vue({
    
    
            el: "#app",
            data: {
    
    
                box: "box2",
                isBox2: "true"
            }
        })
    </script>
</body>

</html>

第三种写法

将第二种写法里写在样式里的对象放到data配置项中,作为变量来处理

代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>动态样式</title>
    <style>
        .base {
    
    
            text-align: center;
            color: red;
        }

        .box1 {
    
    
            width: 100px;
            height: 100px;
            border: 1px red solid;
        }

        .box2 {
    
    
            width: 200px;
            height: 200px;
            border: 2px pink solid;
        }
    </style>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <div :class="boxObj"> hello Vue </div>
    </div>
    <script>
        let app = new Vue({
    
    
            el: "#app",
            data: {
    
    
                boxObj: {
    
    
                    'box1': true,
                    'base': true
                }
            }
        })
    </script>
</body>

</html>

第四种写法

将对象变量放到数组里面

<div :class="[boxObj,boxObj2]"> hello Vue <div>

代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>动态样式</title>
    <style>
        .base {
    
    
            text-align: center;
            color: red;
        }

        .box1 {
    
    
            width: 100px;
            height: 100px;
            border: 1px red solid;
        }

        .box2 {
    
    
            width: 200px;
            height: 200px;
            border: 2px pink solid;
        }

        .boxShadow {
    
    
            box-shadow: 5px 5px 5px #aaa;
        }
    </style>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <div :class="[boxObj,boxObj2]"> hello Vue </div>
    </div>
    <script>
        let app = new Vue({
    
    
            el: "#app",
            data: {
    
    
                boxObj: {
    
    
                    'box1': true,
                    'base': true
                },
                boxObj2: {
    
    
                    'boxShadow': true
                }
            }
        })
    </script>
</body>

</html>

可以发现这四种写法是层层递进的关系

完整代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>动态样式</title>
    <style>
        .base {
    
    
            text-align: center;
            color: red;
        }

        .box1 {
    
    
            width: 100px;
            height: 100px;
            border: 1px red solid;
        }

        .box2 {
    
    
            width: 200px;
            height: 200px;
            border: 2px pink solid;
        }

        .boxShadow {
    
    
            box-shadow: 5px 5px 5px #aaa;
        }
    </style>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <div :class="box"> hello Vue </div>
        <div :class="{
    
    'box2':isBox2,'base':isBase}"> hello Vue </div>
        <div :class="boxObj"> hello Vue </div>
        <div :class="[boxObj,boxObj2]"> hello Vue </div>
    </div>
    <script>
        let app = new Vue({
    
    
            el: "#app",
            data: {
    
    
                box: "box2",
                isBox2: true,
                isBase: true,
                boxObj: {
    
    
                    'box1': true,
                    'base': true
                },
                boxObj2: {
    
    
                    'boxShadow': true
                }
            }
        })
    </script>
</body>

</html>

效果图例

image.png

简单用用吧

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>动态绑定样式示例</title>
    <style>
        .btn {
    
    
            padding: 10px 20px;
            background-color: #eee;
            border: none;
            cursor: pointer;
            outline: none;
        }

        .red {
    
    
            color: red;
        }

        .blue {
    
    
            color: blue;
        }

        .yellow-bg {
    
    
            background-color: yellow;
        }

        .green-bg {
    
    
            background-color: green;
        }
    </style>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <button :class="[btnClass, bgColorClass]" @click="changeStyles">点击我</button>
    </div>
    <script>
        let app = new Vue({
    
    
            el: "#app",
            data: {
    
    
                btnClass: "red",
                bgColorClass: "yellow-bg"
            },
            methods: {
    
    
                changeStyles() {
    
    
                    // 切换文字颜色和背景颜色
                    this.btnClass = this.btnClass === "red" ? "blue" : "red";
                    this.bgColorClass = this.bgColorClass === "yellow-bg" ? "green-bg" : "yellow-bg";
                }
            }
        })
    </script>
</body>

</html>

如上,我们使用Vue框架来创建一个Vue实例,并将其绑定到id为"app"的元素上。在数据中,我们定义了btnClass和bgColorClass这两个变量,分别控制按钮的文字颜色和背景颜色。

在按钮上使用了:class指令来动态绑定类样式。通过绑定的变量来控制类名的切换。当点击按钮时,会触发changeStyles方法,通过修改变量的值来改变类样式,从而实现了样式的动态切换。


谢谢款待

目录
相关文章
|
C++
VS Code识别编辑规范,ESlint规则,VS Code保存去掉自动加分号、逗号、双引号
书写规范是非常重要的,除了统一,还要简洁。 1、VS Code识别编辑规范 在项目根目录新建.editorconfig文件,加入设置:
1268 0
|
SQL Java 数据库连接
Mybatis多表关联查询与动态SQL(上)
Mybatis多表关联查询与动态SQL
470 0
|
安全 Serverless API
aliyun多模态数据信息提取方案评测
该页面设计布局合理,左右分区呈现文档与操作区域,实现了理论指导与实际操作的紧密结合,极大提升了部署流程的便捷性和效率。关键步骤提供详细提示,降低用户学习成本和操作难度,尤其适合初次使用者。信息整合方便对比,减少错误,增强用户体验。整体简洁明了,鼓励自主操作,适用于新手和技术人员,显著提高了部署任务的流畅性和成功率。不足之处在于多模态数据融合处理和跨平台兼容性有待优化。
371 7
|
XML 存储 数据安全/隐私保护
PyMuPDF 1.24.4 中文文档(五)(4)
PyMuPDF 1.24.4 中文文档(五)
378 0
|
传感器 存储 供应链
plant simulation物流系统仿真案例
plant simulation物流系统仿真案例
860 0
|
域名解析 弹性计算 数据挖掘
阿里云特惠云服务器82元、298元、99元和199元性能及选择参考
目前在阿里云的活动中有几款价格非常实惠的云服务器,现在购买2核2G轻量应用服务器最低只要82元1年,云服务器最低只要99元1年。购买2核4G轻量应用服务器最低只要298元1年,云服务器最低只要199元1年。本文为大家解析2024年阿里云这几款特惠云服务器的性能及选择参考。
阿里云特惠云服务器82元、298元、99元和199元性能及选择参考
vcpkg安装软件包时自定义编译选项
vcpkg安装软件包时自定义编译选项
1129 0
阿里云服务器怎么开发票?刚开完,跟着教程一步步操作!
在阿里云,用户可在用户中心的发票管理中开具发票。首次开票需设置发票抬头,支持个人或企业,可选增值税普通或专用发票。开票时选择所需订单,按提示操作。个人账号无法开具企业发票,需变更实名认证。发票税率因产品而异,通常为6%或13%。发票抬头可修改,电子发票可报销。纸质专用发票邮寄免费,普通发票电子化。更多详情见官方帮助文档。
1325 0
|
Java API Spring
Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。(上)
Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。(上)
1446 0
|
存储 缓存 Unix
Cmake 链接外部库:如何在项目中使用外部库和头文件
Cmake 链接外部库:如何在项目中使用外部库和头文件
1577 0