前端魔法:掌握动态 class,让网页元素随心所欲

news2024/11/18 23:38:37

前言

当你动态的添加类名,在某个变量匹配需求时自动切换到某个类名,实现其对应的效果。这个过程就是我们常说的动态 class,今天就和大家一起聊聊前端中的动态 class


一、对象语法

1.1 绑定单个 class

我们可以传给 v-bind:class 一个对象,以动态地切换 class,如下案例:

<template>
  <div>
    <el-button @click="clickOn" v-bind:class="{'active':isActive}">点击我</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isActive: true,
    };
  },
  methods: {
    clickOn() {
      this.isActive = !this.isActive;
    },
  },
};
</script>

<style scoped>
.active {
  color: red;
}
</style>

实现效果

在这里插入图片描述


1.2 绑定多个 class

对象中也可存在多个属性,动态切换 class,并且 :class 可以合 class 共存,如下案例:

<template>
  <div>
    <div class="activeOne" v-bind:class="{ activeTwo: isActive, 'activeThree': hasError }"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isActive: true,
      hasError: true,
    };
  },
};
</script>

渲染结果

在这里插入图片描述


1.3 绑定计算属性

:class 的表达式过长或逻辑复杂时,可以绑定一个计算属性,一般当条件多于两个时,都可以使用 data 或者 computed,如下案例:

<template>
  <div>
    <div :class="taxonOne">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isActive: true,
      isError: null,
      error: {
        type: "fail",
      },
    };
  },
  computed: {
    taxonOne() {
      return {
        taxonTwo: this.isActive && this.error == null, // (isActive 为 true 且 error 为 null) 类名为 taxonTwo
        taxonTherr: this.error && this.error.type == "fail", // (error 不为空且 error 中的 type 值为 "fail") 类名为 taxonTherr
      };
    },
  },
};
</script>
<style scoped>
.taxonTwo {
  color: red;
}
.taxonTherr {
  color: blue;
}
</style>

渲染结果

在这里插入图片描述


二、数组语法

2.1 class 列表

当需要应用多个 class 时,可以使用数组语法,给 :class 绑定一个数组,如下案例:

<template>
  <div>
    <div v-bind:class="['taxonOne', 'taxonTwo']">内容内容内容</div>
  </div>
</template>
<style scoped>
.taxonOne {
  color: red;
}
.taxonTwo {
  border: 1px solid blue;
}
</style>

渲染结果

在这里插入图片描述


2.2 三元运算符

使用三元表达式,根据条件切换 class,如下案例:

<template>
  <div>
    <div v-bind:class="[isActive ? 'taxonOne' : 'taxonTwo']">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isActive: false,
    };
  },
};
</script>
<style scoped>
.taxonOne {
  color: red;
}
.taxonTwo {
  color: blue;
}
</style>

isActivetrue 时的渲染结果

在这里插入图片描述

反之,当 isActivefalse 时的渲染结果

在这里插入图片描述


2.3 数组语法 + 对象语法

class 有多个条件时,这样写较为烦琐,可以在数组语法中使用对象语法,如下案例:

<template>
  <div>
    <div v-bind:class="[{ taxonOne: isActive }, 'taxonTwo']">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isActive: true,
    };
  },
};
</script>
<style scoped>
.taxonOne {
  border: 1px solid red;
}
.taxonTwo {
  color: blue;
}
</style>

渲染结果

在这里插入图片描述


三、复合形式

你可以将 v-if/v-else-if:class 相结合进行使用,如下案例:

<template>
  <div>
    <div v-if="state == '0'" class="taxonOne">内容内容内容</div>
    <div v-else-if="state == '1'" class="taxonTwo">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      state: "0",
    };
  },
};
</script>
<style scoped>
.taxonOne {
  color: red;
}
.taxonTwo {
  color: blue;
}
</style>

state0 时,渲染结果

在这里插入图片描述

state1 时,渲染结果

在这里插入图片描述


:style

除了上面我们说到的动态 class,我们也可以直接动态的绑定 style ,下面一起来看看如何在标签中绑定内联样式。

注意:

  1. 凡是有 -style 属性名都要变成驼峰式,比如 font-size 要变成 fontSize
  2. 除了绑定值,其他的属性名的值要用引号括起来,比如 fontSize:'14px' 而不是 fontSize:14px

一、 对象形式

1.1 直接绑定

这也是最简单的一种形式,直接绑定,如下案例:

<template>
  <div>
    <div :style="{ color: activeColor, fontSize: fontSize + 'px' }">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeColor: "red",
      fontSize: 30,
    };
  },
};
</script>

渲染结果

在这里插入图片描述


1.2 三目运算符

三目运算符主要针对变量会动态变化时切换不同的 style 会比较方便,如下案例:

<template>
  <div>
    <div :style="{ color: state == '0' ? 'red' : 'blue'}">内容内容内容</div>
    <div :style="state == '1' ? 'color:red' : 'color:blue'">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      state: "0",
    };
  },
};
</script>

渲染结果

在这里插入图片描述


1.3 计算属性

当逻辑比较复杂时,可以通过绑定一个计算属性,如下案例:

<template>
  <div>
    <div :style="styleState(0)">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  computed: {
    styleState() {
      return function (index) {
        return index == 0 ? "color: red" : "color: blue";
      };
    },
  },
};
</script>

渲染结果

在这里插入图片描述



二、 数组形式

2.1 直接绑定

<template>
  <div>
    <div :style="[styleOne, styleTwo]">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      styleOne: {
        border:"1px solid blue"
      },
      styleTwo: {
        color: "red",
      },
    };
  },
};
</script>

渲染结果

在这里插入图片描述


2.2 三目运算符

<template>
  <div>
    <div :style="[{color:(state == '0' ? 'red' : 'blue')}]">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      state: "0",
    };
  },
};
</script>

渲染结果

在这里插入图片描述


三、调用方法

同样,你也可以选择调用一个方法,如下案例:

<template>
  <div>
    <div :style="setStyle(0)">内容内容内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    setStyle(index) {
      return index == 0 ? "color: red" : "color: blue";
    },
  },
};
</script>

渲染结果

在这里插入图片描述


拓展

以上我们展示的都是在 vue 中使用,那在别的平台该如何使用呢?其实是大同小异的,可能在语法上会有一点点的不同,下面来看看在 uniapp 和微信小程序中如何使用动态 class


uniapp 中的动态 class

:class="[{'类名':条件},{'类名':条件},{'类名':条件}]"

<template>
	<view>
		<view :class="[{'taxonOne' : index == '0'},{'taxonTwo' : index == '1'}]">内容内容内容</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				index: "0"
			}
		},
	}
</script>

<style scoped>
	.taxonOne {
		color: red;
	}

	.taxonTwo {
		color: blue;
	}
</style>

index0 时,渲染结果

在这里插入图片描述

index1 时,渲染结果

在这里插入图片描述


微信小程序中的动态 class

index.wxml

<view class="{{ state == '0' ? 'taxonOne' : 'taxonTwo' }}">内容内容内容</view>

index.js

Page({
    data: {
        state: '1'
    },
})

index.wxss

.taxonOne{
    color: red;
}
.taxonTwo{
    color: blue;
}

state0 时,渲染结果

在这里插入图片描述

state1 时,渲染结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1270065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

034.Python面向对象_综合案例

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

linux用户管理_用户和组

2 用户管理 2.1 用户和组的基本概念和作用 2.1.1 账户实质 账户实质就是一个用户在系统上的标识&#xff0c;系统依据账户ID来区分每个用户的文件、进程、任务&#xff0c;给每个用户提供特定的工作关键&#xff08;如用户的工作目录、SHELL版本以及环境配置等&#xff09;&…

SDK emulator directory is missing

要进行uniapp真机测试&#xff0c;不得不安装配置一下安卓开发环境 &#xff0c;搞一个模拟器。。。然后又是各种坑。。对比来对比去还是IOS的环境使用着舒服&#xff0c;XCODE下载好&#xff0c;一切重点就是在编码了。。 安卓这个脑残货呀&#xff0c;哎&#xff0c;各种安装…

Springboot——HttpClient入门(Get和Post)

1. HttpClient 1.1 介绍 HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新的版本和建议。 HttpClient作用&#xff1a; 发送HTTP请求接收响应数据…

网站优化进阶指南:如何用Python爬虫进行网站结构优化

前段时间一个做网络优化的朋友找我&#xff0c;问我能不能通过爬虫的手段对他们自己的网络进行优化。这个看着着实比较新颖&#xff0c;对于从事爬虫行业的程序员来说&#xff0c;很有挑战性&#xff0c;值得尝试尝试。 说白了使用爬虫进行网站优化需要对网站的结构、内容、链…

详解前后端交互时PO,DTO,VO模型类的应用场景

前后端交互时的数据传输模型 前后端交互流程 前后端交互的流程: 前端与后端开发人员之间主要依据接口进行开发 前端通过Http协议请求后端服务提供的接口后端服务的控制层Controller接收前端的请求Contorller层调用Service层进行业务处理Service层调用Dao持久层对数据持久化 …

如何让电脑每天定时自动关机?

如何让电脑每天定时自动关机&#xff1f;电脑已经成为社会生产活动中不可或缺的一种工具&#xff0c;它对于我们每个人都非常的重要&#xff0c;不管是工作、生活还是学习中&#xff0c;我们都需要利用电脑。不过很多小伙伴因为繁忙或者因为其它的事情&#xff0c;导致电脑经常…

linux用户组_创建_删除_修改

2.2.2 用户组 每个用户都有一个用户组&#xff0c;系统可以对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同&#xff0c;如Linux下的用户属于与它同名的用户组&#xff0c;这个用户组在创建用户时同时创建。 组的类型&#xff1a; 基本组&#x…

编程中常见的技术难题——如何有效地解决编程中常见的技术难题?

文章目录 前言编程的重要性编程中常见的技术难题新手编程常见问题一、变量的命名规范二、语法错误三、逻辑错误四、代码复用五、代码优化 解决技术难题的方法后记 前言 在编写程序的过程中&#xff0c;总会遇到各种各样的技术难题&#xff0c;这些问题常常需要程序员们耗费大量…

第十五届蓝桥杯(Web 应用开发)模拟赛 2 期-大学组(详细分析解答)

目录 1.相不相等 1.1 题目要求 1.2 题目分析 1.3 源代码 2.三行情书 2.1 题目要求 2.2 题目分析 2.3 源代码 3.电影院在线订票 3.1 题目要求 3.2 题目分析 3.3 源代码 4.老虎坤&#xff08;不然违规发不出来&#xff09; 4.1 题目要求 4.2 题目分析 4.3 源代码 …

vuepress-----9、PWA

# 9、PWA 使用babel 的插件形式 [vuepress/pwa,{serviceWorker: true,updatePopup: {message: "New content is available.",buttonText: "Refresh"}}]提供 Manifest 和 icons (opens new window) 拷贝到public目录下 发布后出现 service workers [外链图片…

HT for Web (Hightopo) 使用心得(5)- 动画的实现

其实&#xff0c;在 HT for Web 中&#xff0c;有多种手段可以用来实现动画。我们这里仍然用直升机为例&#xff0c;只是更换了场景。增加了巡游过程。 使用 HT 开发的一个简单网页直升机巡逻动画&#xff08;Hightopo 使用心得&#xff08;5&#xff09;&#xff09; 这里主…

『亚马逊云科技产品测评』活动征文| 基于etcd实现服务发现

提示&#xff1a;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 背景 etcd 是一个分布式 Key-Value 存储系统&#xff0…

RNN-T Training,RNN-T模型训练详解——语音信号处理学习(三)(选修三)

参考文献&#xff1a; Speech Recognition (option) - RNN-T Training哔哩哔哩bilibili 2020 年 3月 新番 李宏毅 人类语言处理 独家笔记 Alignment Train - 8 - 知乎 (zhihu.com) 本次省略所有引用论文 目录 一、如何将 Alignment 概率加和 对齐方式概率如何计算 概率加和计…

Docker + Jenkins + Nginx实现前端自动化部署

目录 前言一、前期准备工作1、示例环境2、安装docker3、安装Docker Compose4、安装Git5、安装Nginx和Jenkinsnginx.confdocker-compose.yml 6、启动环境7、验证Nginx8、验证Jenkins 二、Jenkins 自动化部署配置1、设置中文2、安装Publish Over SSH、NodeJS&#xff08;1&#x…

Redis中的缓存穿透、雪崩、击穿(详细)

目录 一、概念 1. 缓存穿透&#xff08;Cache Penetration&#xff09; 解决方案&#xff1a; 2. 缓存雪崩&#xff08;Cache Avalanche&#xff09; 解决方案&#xff1a; 3. 缓存击穿&#xff08;Cache Breakdown&#xff09; 解决方案&#xff1a; 二、三者出现的根本原…

elasticsearch操作

目录 一、mapping映射属性二、索引库的CRUD2.1 创建索引库和映射2.2 查询索引库2.3 修改索引库2.4 删除索引库2.5 总结 三、文档操作3.1 新增文档3.2 查询文档3.3 删除文档3.4 修改文档3.5 总结 四、RestClient操作索引库4.1 初始化RestClient4.2 创建索引库4.3 删除索引库4.4 …

MySQL数据库的安装

MySQL官网&#xff1a;https://www.mysql.com/ 进入下载页面&#xff1a;https://www.mysql.com/downloads/ 选择社区版&#xff1a; 选择MySQL Community Server&#xff1a; 根据自己的需要选择版本。例如选择8.2.0版本&#xff1a; 例如选择Windows (x86, 64-bit), M…

使用Python爬取快手视频与评论(App与Web端分析)

文章目录 1. APP端抓包配置2. APP端抓包分析3. Web端抓包分析4. 爬虫代码实现 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a…

Go 从编译到执行

一、Go运行编译简介 Go语言&#xff08;也称为Golang&#xff09;自从2009年由Google发布以来&#xff0c;已成为现代软件开发中不可或缺的一部分。设计者Rob Pike, Ken Thompson和Robert Griesemer致力于解决多核处理器、网络系统和大型代码库所引发的现实世界编程问题。我们…