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 相关文章推荐
传智播客学习之java 反射
Nov 22 Javascript
js禁止document element对象选中文本实现代码
Mar 21 Javascript
jquery比较简洁的软键盘特效实现方法
Mar 19 Javascript
jquery插件bxslider用法实例分析
Apr 16 Javascript
jQuery.form插件的使用及跨域异步上传文件
Apr 27 Javascript
jsp 网站引入外部css或者js失效问题解决
Oct 31 Javascript
js多个物体运动功能实例分析
Dec 20 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
基于Vue+element-ui 的Table二次封装的实现
Jul 20 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
Mar 06 Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 Javascript
原生Javascript+HTML5一步步实现拖拽排序
Jun 12 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
PHP实现图片简单上传
2006/10/09 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
详解PHP中的Traits
2015/07/29 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
python基础练习之几个简单的游戏
2017/11/10 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
学python安装的软件总结
2019/10/12 Python
Python实现密码薄文件读写操作
2019/12/16 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
python的launcher用法知识点总结
2020/08/07 Python
python xlsxwriter模块的使用
2020/12/24 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
EJB的几种类型
2012/08/15 面试题
生物科学系大学生的自我评价
2013/12/20 职场文书
超市采购员岗位职责
2014/02/01 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
患者身份识别制度
2015/08/06 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
php修改word的实例方法
2021/11/17 PHP
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python