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 相关文章推荐
jQuery滚动加载图片效果的实现
Mar 06 Javascript
文本框只能选择数据到文本框禁止手动输入
Nov 22 Javascript
JavaScript中Cookie操作实例
Jan 09 Javascript
Node.js抓取中文网页乱码问题和解决方法
Feb 10 Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 Javascript
javascript实现全角转半角的方法
Jan 23 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
Jul 04 Javascript
浅析Javascript ES6中的原生Promise
Aug 25 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
Jan 19 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
JavaScript设计模式之观察者模式实例详解
Jan 16 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 jQuery
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
用php+mysql一个名片库程序
2006/10/09 PHP
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
PHP开发过程中常用函数收藏
2009/12/14 PHP
PHP动态创建Web站点的方法
2011/08/14 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
ES6函数和数组用法实例分析
2020/05/23 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
python+pygame简单画板实现代码实例
2017/12/13 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
python实现多层感知器
2019/01/18 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
2014年党员自我评议对照检查材料
2014/09/20 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android