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 相关文章推荐
JavaScript 学习笔记(十四) 正则表达式
Jan 22 Javascript
Javascript 面向对象 命名空间
May 13 Javascript
有关js的变量作用域和this指针的讨论
Dec 16 Javascript
javascript制作的cookie封装及使用指南
Jan 02 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
Nov 04 Javascript
JavaScript中的this到底是什么(一)
Dec 09 Javascript
基于JavaScript实现右键菜单和拖拽功能
Nov 28 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
Mar 23 jQuery
微信小程序 标签传入数据
May 08 Javascript
webpack4.x CommonJS模块化浅析
Nov 09 Javascript
jQuery实现倒计时功能完整示例
Jun 01 jQuery
一篇文章带你从零快速上手Rollup
Sep 07 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 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
python批量提取word内信息
2015/08/09 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
Sony C++笔试题
2013/03/10 面试题
会计专业大学生求职信范文
2014/01/28 职场文书
高中打架检讨书
2014/02/13 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
追悼会家属答谢词
2015/09/29 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
SQLServer常见数学函数梳理总结
2022/08/05 MySQL