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 相关文章推荐
document对象execCommand的command参数介绍
Aug 01 Javascript
javascript强大的日期函数代码分享
Sep 04 Javascript
JQuery鼠标移到小图显示大图效果的方法
Jun 10 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
Jun 08 Javascript
微信小程序 教程之条件渲染
Oct 18 Javascript
微信小程序 天气预报开发实例代码源码
Jan 20 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
详解如何提高 webpack 构建 Vue 项目的速度
Jul 03 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
JavaScript canvas实现文字时钟
Jan 10 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 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
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
js中关于String对象的replace使用详解
2011/05/24 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python内置数据类型详解
2014/08/18 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
采购部主管岗位职责
2014/01/01 职场文书
入党转预备思想汇报
2014/01/07 职场文书
争先创优演讲稿
2014/09/15 职场文书
求职自我评价怎么写
2015/03/09 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
在职证明格式样本
2015/06/15 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python