Vue.js每天必学之Class与样式绑定


Posted in Javascript onSeptember 05, 2016

数据绑定一个常见需求是操作元素的 class 列表和它的内联样式。因为它们都是 attribute,我们可以用 v-bind 处理它们:只需要计算出表达式最终的字符串。不过,字符串拼接麻烦又易错。因此,在 v-bind 用于 class 和 style 时,Vue.js 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。

绑定 HTML Class

尽管可以用 Mustache 标签绑定 class,比如 `{% raw %}class=”{{ className }}”{% endraw %}`,但是我们不推荐这种写法和 `v-bind:class` 混用。两者只能选其一!

对象语法

我们可以传给 v-bind:class 一个对象,以动态地切换 class。注意 v-bind:class 指令可以与普通的 class 特性共存:

<div class="static" v-bind:class="{ 'class-a': isA, 'class-b': isB }"></div>

data: {
 isA: true,
 isB: false
}

渲染为:

<div class="static class-a"></div>

当 isA 和 isB 变化时,class 列表将相应地更新。例如,如果 isB 变为 true,class 列表将变为 "static class-a class-b"。

你也可以直接绑定数据里的一个对象:

<div v-bind:class="classObject"></div>

data: {
 classObject: {
 'class-a': true,
 'class-b': false
 }
}

我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式。

数组语法

我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:

<div v-bind:class="[classA, classB]">

data: {
 classA: 'class-a',
 classB: 'class-b'
}

渲染为:

<div class="class-a class-b"></div>

如果你也想根据条件切换列表中的 class,可以用三元表达式:

<div v-bind:class="[classA, isB ? classB : '']">

此例始终添加 classA,但是只有在 isB 是 true 时添加 classB 。

不过,当有多个条件 class 时这样写有些繁琐。在 1.0.19+ 中,可以在数组语法中使用对象语法:

<div v-bind:class="[classA, { classB: isB, classC: isC }]">

绑定内联样式

对象语法

v-bind:style 的对象语法十分直观——看着非常像 CSS,其实它是一个 JavaScript 对象。CSS 属性名可以用驼峰式(camelCase)或短横分隔命名(kebab-case):

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

data: {
 activeColor: 'red',
 fontSize: 30
}

直接绑定到一个样式对象通常更好,让模板更清晰:

<div v-bind:style="styleObject"></div>

data: {
 styleObject: {
 color: 'red',
 fontSize: '13px'
 }
}

同样的,对象语法常常结合返回对象的计算属性使用。

数组语法

v-bind:style 的数组语法可以将多个样式对象应用到一个元素上:

<div v-bind:style="[styleObjectA, styleObjectB]">

自动添加前缀

当 v-bind:style 使用需要厂商前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
动态样式类封装JS代码
Sep 02 Javascript
js实现checkbox全选、不选与反选的方法
Feb 09 Javascript
JAVA四种基本排序方法实例总结
Jul 24 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
Node.js中使用jQuery的做法
Aug 17 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
Jan 22 Javascript
详解Vue.js分发之作用域槽
Jun 13 Javascript
hammer.js实现图片手势放大效果
Aug 29 Javascript
django使用channels2.x实现实时通讯
Nov 28 Javascript
功能完善的小程序日历组件的实现
Mar 31 Javascript
如何实现js拖拽效果及原理解析
May 08 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 #Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
Sep 05 #Javascript
Bootstrap使用基础教程详解
Sep 05 #Javascript
chrome浏览器如何断点调试异步加载的JS
Sep 05 #Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
Sep 05 #Javascript
Vue.js每天必学之表单控件绑定
Sep 05 #Javascript
深入分析node.js的异步API和其局限性
Sep 05 #Javascript
You might like
无线电广播的开始
2002/01/30 无线电
两个强悍的php 图像处理类1
2009/06/15 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
JavaScript修改css样式style
2008/04/15 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
js时间控件只显示年月
2017/01/08 Javascript
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python简单猜数游戏实例
2015/07/09 Python
深入解读Python解析XML的几种方式
2016/02/16 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
在python image 中实现安装中文字体
2020/05/16 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
广州地球村科技数据库题目
2016/04/25 面试题
程序集与命名空间有什么不同
2014/07/25 面试题
入党自我鉴定范文
2013/10/04 职场文书
设备技术员岗位职责
2015/04/11 职场文书
加强党性修养心得体会
2016/01/21 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android