5.1 class 属性绑定
- 在样式绑定中,首先是对元素的 class 属性进行绑定,绑定的数据可以是对象或数组。
5.1.1 对象语法
- 在应用 v-bind 对元素的 class 属性进行绑定时,可以将绑定的数据设置为一个对象,从而动态地切换元素的 class。将元素的 class 属性绑定为对象主要有以下三种形式。
1. 内联绑定
- 内联绑定即将元素的 class 属性直接绑定为对象的形式,格式如下:
html"> <div v-bind : class="{active :isActive}"></div>
- 上述代码中,active 是元素的 class 类名,isActive 是数据对象中的属性,是一个布尔值。如果该值为 true,则表示元素使用类名为 active 的样式,否则就不使用。例如,为 div 元素绑定 class 属性,将字体样式设置为斜体,代码如下:
html"> <div id="box">
<div v-bind:class="{active : isActive}">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
isActive : true //使用 active 类名
},
});
</script>
<style type="text/html" title=css>css">html" title=css>css">
.active{
font-style: italic;
}
</style>
-
运行结果如下图所示。
-
在对象中可以传入多个属性来动态切换元素的多个 class。另外,v-bind:class也可以和普通的 class共存。示例代码如下:
html"> <div id="box">
<div class="default" v-bind:class="{size : isSize , color : isColor}">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
isSize : true , //使用 size 类名
isColor : true //使用 color 类名
}
});
</script>
<style type="text/html" title=css>css">html" title=css>css">
.default{
text-decoration: underline;
}
.size{
font-size: 18px;
}
.color{
color: #6688FF;
}
</style>
- 上述代码中,isSize 和 isColor 属性的值都为 true,因此结果渲染为:
html"> <div class="default size color">你好,晓茗</div>
- 当 isSize 或者 isColor 的属性值发生变化时,元素的 class 列表也会相应进行更新。例如,将 isSize 属性值设置为 false,则元素的 class 列表将会变为 “default color”。运行结果如下所示。
2. 非内联绑定
- 非内联绑定即将元素的 class 属性绑定的对象定义在 data 选项中。例如,将上述代码中绑定的对象定义在 data 选项中,示例代码如下:
html"> <div id="box">
<div class="default" v-bind:class="classObject">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
classObject:{
size : true , //使用 size 类名
color : true //使用 color 类名
}
}
});
</script>
<style type="text/html" title=css>css">html" title=css>css">
.default{
text-decoration: underline;
}
.size{
font-size: 18px;
}
.color{
color: #6688FF;
}
</style>
- 运行结果如下所示。
3. 使用计算属性返回样式对象
- 可以为元素的 class 属性绑定一个返回对象的计算属性。将上述代码中的 class 属性绑定为一个计算属性的代码如下:
html"> <div id="box">
<div class="default" v-bind:class="show">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
isSize : true , //使用 size 类名
isColor : true //使用 color 类名
},
computed :{
show : function(){
return {
size : this.isSize;
color : this.isColor;
}
}
}
});
</script>
- 运行结果同上。
5.1.2 数组语法
- 在对元素的 class 属性进行绑定时,可以把一个数组传给 v-bind:class,以应用一个 class 列表。将元素的 class 属性绑定为数组有如下三种形式。
1. 普通形式
- 将元素的 class 属性直接绑定为一个数组,格式如下:
html"> <div v-bind:class="[element1,element2]"></div>
- 上述代码中,element1 和 element2 为数据对象中的属性,它们的值为 class 列表中的类名。例如,应用数组的形式为 div 元素绑定 class 属性,为文字添加删除线并设置文字大小,示例代码如下:
html"> <div id="box">
<div v-bind:class="[lineClass,sizeClass]">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
lineClass : 'line', //使用 line 类名
sizeClass : 'size' //使用 size 类名
}
});
</script>
<style type="text/html" title=css>css">html" title=css>css">
.line{
text-decoration: line-through;
}
.size{
font-size: 17px;
}
</style>
- 运行结果如下所示。
2. 在数组中使用条件运算符
- 在使用数组形式绑定元素的 class 属性时,可以使用条件运算符构成的表达式来切换列表中的 class。示例代码如下。
html"> <div id="box">
<div v-bind:class="[isLine ? 'line' : '',sizeClass]">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
isLine : true,
sizeClass : 'size' //使用 size 类名
}
});
</script>
<style type="text/html" title=css>css">html" title=css>css">
.line{
text-decoration: line-through;
}
.size{
font-size: 17px;
}
</style>
- 上述代码中,sizeClass 属性对应的类名是始终被添加的,只有当 isLine 为 true 时才会添加 line 类。运行结果同上。
3. 在数组中使用对象
- 在数组中使用条件运算符可以实现切换元素列表中 class 的目的。但是,如果使用多个条件运算符,这种写法就比较繁琐。这时,可以在数组中使用对象来更新 class 列表。将上述代码中的条件运算符表达式更改为对象的代码如下:
html"> <div id="box">
<div v-bind:class="[{line : isLine},sizeClass]">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
isLine : true,
sizeClass : 'size' //使用 size 类名
}
});
</script>
<style type="text/html" title=css>css">html" title=css>css">
.line{
text-decoration: line-through;
}
.size{
font-size: 17px;
}
</style>
- 运行结果同上。
5.2 内联样式绑定
- 在样式绑定中,除了对元素的 class 属性进行绑定之外,还可以对元素的 style 属性进行内联样式绑定,绑定的数据可以是对象或数组。下面分别介绍这两种语法。
5.2.1 对象语法
- 对元素的 style 属性进行绑定,可以将绑定的数据设置为一个对象。这种对象语法看起来比较直观。对象中的 CSS 属性名可以用驼峰式或短横线分隔命名。将元素的 style 属性绑定为对象主要有以下三种形式。
当 v-bind:style 使用需要特定前缀的 CSS 属性时,Vue.html" title=js>js 会自动侦测并添加相应的前缀。
1. 内联绑定
- 这种形式是将元素的 style 属性直接绑定为对象。例如,应用对象的形式为 div 元素绑定 style 属性,设置文字的粗细和大小,代码如下:
html"> <div id="box">
<div v-bind:html" title=css>css">style="{fontWeight : weight, 'font-size' : fontSize +'px'}">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
weight :'bold',//字体粗细
fontSize :17//字体大小
}
});
</script>
- 运行结果如下图所示。
2. 非内联绑定
- 这种形式是将元素的 style 属性绑定的对象直接定义在 data 选项中,这样会让模板更加清晰。将上个示例中绑定的对象定义在 data 选项中的代码如下:
html"> <div id="box">
<div v-bind:html" title=css>css">style="styleObject">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
styleObject :{
}
fontWeight :'bold',//字体粗细
'font-Size' :17//字体大小
}
});
</script>
- 运行结果同上。
3. 使用计算属性返回样式对象
- 内联样式绑定的对象语法常常结合返回对象的计算属性使用。将上述示例中的 style 属性绑定为一个计算属性的代码如下:
html"> <div id="box">
<div v-bind:html" title=css>css">style="show">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data :{
weight :'bold',
fontSize :17
},
computed:{
show : function(){
return {
fontWeight : this.weight ,//字体粗细
'font-size' : this.fontSize +'px'//字体大小
}
}
}
});
</script>
- 运行结果同上。
5.2.2 数组语法
- 在对元素的 style 属性进行绑定时,可以使用数组将多个样式对象应用到一个元素上。应用数组的形式进行 style 属性的绑定,有如下几种形式。
1. 直接在元素中绑定样式对象
- 示例代码如下:
html"><div id="box">
<div v-bind:html" title=css>css">style="[{fontSize :'17px'},{'font-weight' :'bold'},{'text-decoration':'underline'}]">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box'
});
</script>
- 运行结果如下图所示。
2. 在 data 选项中定义样式对象数组
- 示例代码如下:
html"> <div id="box">
<div v-bind:html" title=css>css">style="arrStyle">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data:{
arrStyle:[{
fontSize :'17px'//字体大小
},{
'font-weight' :'bold'//字体粗细
},{
'text-decoration' :'underline'//下划线
}]
}
});
</script>
- 运行结果同上。
3. 以对象数组的形式进行绑定
- 示例代码如下:
html"><div id="box">
<div v-bind:html" title=css>css">style="[size,weight,decoration]">你好,晓茗</div>
</div>
<script type="text/html" title=javascript>javascript">html" title=javascript>javascript">
var vm = new Vue({
el : '#box',
data:{
size:{fontSize :'17px'},
weight:{'font-weight':'bold'},
decoration:{'text-decoration':'underline'}
}
});
</script>
- 运行结果同上。
备注:后期会继续跟进 Vue.html" title=js>js前端框架:事件处理,希望大家的多多支持和关注。