当前位置: 首页 > news >正文

Vue中的样式绑定

我们将样式绑定分为两种:一种是通过style绑定,一种是通过class绑定

样式绑定适用于 切换效果的实现,小规模用style,大规模用class

style绑定样式

这里需要用到v-bind指令,绑定style属性。在绑定的:style=" "引号中有三种写法。

第一种:直接写对象字面量,对象的属性值取data中的数据。

代码展示:

<div id="box">
        <button @click="changecolor">点击切换文字颜色</button>
        <div :style="{color:color}">测试文字</div>
    </div>
    <script>
        new Vue({
            el:"#box",
            data:{
                color:"red",
                flag:false
            },
            methods: {
                changecolor(){
                    this.flag=!this.flag
                    if (this.flag) {
                        this.color="yellow"
                    }else{
                        this.color="red"
                    }
                }
            },
        })
    </script>

第一个color是要改变的属性,第二个是我们data中设置的属性名,对应取数据。如果我们将style中第二个参数加上引号那么就会变成字符串,直接就把作为属性值,就如我们直接改为"blue",标签能得内容就变为蓝色。

第二种在data中声明对象:

   <div id="box">
        <button @click="changecolor">点击切换文字颜色</button>
        <div :style="obj">测试文字</div>
    </div>
    <script>
        new Vue({
            el:"#box",
            data:{
                color:"red",
                flag:false,
                obj:{
                    color:"red"
                }
            },
            methods: {
                changecolor(){
                    this.flag=!this.flag
                    if (this.flag) {
                        this.obj.color="yellow"
                    }else{
                        this.obj.color="red"
                    }
                }
            },
        })
</script>

第三种:在:style=""中写数组,这种方法综合前面了两种,可以两种形式都写在数组中,我们来给这个元素多加点样式:

 <div id="box">
        <button @click="changecolor">点击切换文字颜色</button>
        <div :style="[size,bc,color,{width:width}]">测试文字</div>
    </div>
        <script>
            new Vue({
                el:"#box",
                data:{
                    color:"red",
                    flag:false,
                    size:{
                        fontSize:"50px"
                    },
                   bc:{
                       backgroundColor:"gray"

                    },
                    color:{
                        color:"red"
                    },
                    width:"100px"
                },
                methods: {
                    changecolor(){
                        this.flag=!this.flag
                        if (this.flag) {
                            this.color.color="yellow"
                        }else{
                            this.color.color="red"
                        }
                    }
                },
            })
    </script>

最终效果:点击就能使文字变色

 

 class绑定样式

通过改变类名来实现页面变换效果,:class=""中,引号内也是有三种写法

第一种:直接写表达式,为data中的属性

代码:

  <style>
        .box1{
            width: 100px;
            height: 100px;
            background-color: blueviolet;
        }
        .box2{
            width: 50px;
            height:50px;
            background-color: green;
        }
    </style>
    <div id="box">
        <button @click="change">点击改变模块</button>
        <div :class="mode">测试文字</div>
    </div>
        <script>
            new Vue({
                el:"#box",
                data:{
                    mode:"box1",
                    flag:false

                },
                methods: {
                    change(){
                        this.flag=!this.flag
                        if (this.flag) {
                            this.mode="box2"
                        }else{
                            this.mode="box1"
                        }
                    }
                },
            })
         </script>

效果:

初始状态:                                                                     

点击后:

 

第二种写成对象,与style中写的对象有一点区别。在这种class属性绑定中对象的属性值为布尔值,当为true时,该属性值的属性为类名成立,反之不成立。

代码展示:

<style>
        .box1{
            width: 100px;
            height: 100px;
            background-color: blueviolet;
        }
        .box2{
            width: 50px;
            height:50px;
            background-color: green;
        }
        .box3{
         font-size: 20px;
         color: red;
         line-height: 50px;
        }
    </style>
    <div id="box">
        <div :class="{box1:isb,box3:isbo}">测试文字</div>
    </div>
        <script>
            new Vue({
                el:"#box",
                data:{
                   isb:true,
                   isbo:true

                },
            
            })
         </script>

效果:

 这种方式对象的属性值会在data数据中去匹配,如果我们不需要改变当前类名时我们可以在行内直接将其写成true或者false,也是同样成立的。如:

<div :class="{box1:isb,box3:false}">测试文字</div> 这时box3类名就不存在div

第三种方式:class=""中写数组,数组内每一项可以写不同的形式,是前面的综合,这种形式我们平时都不会用,用的最多的就是写表达式。

代码展示:

 <style>
        .box1{
            width: 100px;
            height: 100px;
            background-color: blueviolet;
        }
        .box2{
            width: 50px;
            height:50px;
            background-color: green;
        }
        .box3{
         font-size: 20px;
         color: crimson;
        }
        .box4{
            margin: 0 auto;
        }
    </style>
    <div id="box">
        <button @click="change">点击改变模块</button>
        <div :class="mode">测试文字</div>
        <!-- <div :class="{box1:isb,box3:isbo}">测试文字</div> -->
        <div :class="['box3',{box2:isb},model]">arr</div>
    </div>
        <script>
            new Vue({
                el:"#box",
                data:{
                    mode:"box1",
                    flag:false,
                    isb:true,
                   isbo:true,
                   model:"box4"

                },
                methods: {
                    change(){
                        this.flag=!this.flag
                        if (this.flag) {
                            this.mode="box2"
                        }else{
                            this.mode="box1"
                        }
                    }
                },
            })
         </script>

效果:

 

相关文章:

  • 大学网课答案公众号题库搭建
  • torch.utils.data
  • torch.torchvision
  • Git GitHub VSCode 简单使用
  • 小程序开发技术框架选型
  • 大学生怎么制作查题搜题公众号?
  • Spring源码------IOC容器初始化过程
  • SpringBoot+Vue+Element-UI实现家具商城系统
  • Proxy-Reflect
  • 容器-基础
  • GC垃圾回收
  • 3D场景的制作步骤
  • 【精讲】后台项目 采用vue2框架 完整版内含详细注释 2
  • mac vscode debug安装调试moodle
  • PyTorch(一)安装与环境配置
  • Angular6错误 Service: No provider for Renderer2
  • Codepen 每日精选(2018-3-25)
  • github从入门到放弃(1)
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JS字符串转数字方法总结
  • Mysql5.6主从复制
  • ------- 计算机网络基础
  • 力扣(LeetCode)21
  • 我是如何设计 Upload 上传组件的
  • 学习ES6 变量的解构赋值
  • 原生js练习题---第五课
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (TOJ2804)Even? Odd?
  • (ZT)出版业改革:该死的死,该生的生
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (九)信息融合方式简介
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转) RFS+AutoItLibrary测试web对话框
  • ../depcomp: line 571: exec: g++: not found
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 解决重复提交问题
  • .Net各种迷惑命名解释
  • .Net语言中的StringBuilder:入门到精通
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [ActionScript][AS3]小小笔记
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [CF226E]Noble Knight's Path
  • [C语言]一维数组二维数组的大小
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [Django 0-1] Core.Handlers 模块
  • [emacs] CUA的矩形块操作很给力啊
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [GN] 设计模式——面向对象设计原则概述