Vue 绑定 class 和 style
在 原生 JS 中可以通过 classList.add()
和 classList.remove()
这两个方法来动态的增加和删除元素的 class
,也可以通过 style
属性来动态的改变元素的样式。在 Vue 中不太推荐直接操作 DOM 元素,但可以给元素的 class
和 style
绑定数据,只需要改变数据就能实现改变 class
和 style
。
class
对象语法
可以给 v-bind:class
绑定一个对象,只需要更改对象的值就能实现增加和删除 class
。
如下:
<template>
<div id="app">
<button
v-bind:class="{active: isActive}"
@mousedown="active"
@mouseup="active"
>
按钮
</button>
</div>
</template>
export default {
name: "app",
data() {
return {
isActive: false
};
},
methods: {
// 鼠标按下和松开
active() {
this.btnActive = !this.btnActive
}
}
}
.active {
background: #ff0000;
color: #ffffff;
}
上面的 button
绑定了 isActive
的值,只要 isActive
为 true
,active
的 class
就会生效,否则 active
的 class
就会被删除。在 CSS 中 active
又包含一些样式,只要 active
生效,样式也会生效。
button
还绑定了 mousedown
鼠标按下和 mouseup
鼠标松开 两个事件,两个事件都绑定了 active
方法。鼠标按下 active
就会生效,鼠标放开 active
就会失效。
注意!v-bind:class
和 class
属性可以同时存在,但是属性值不能相同。
建议把需要动态改变的 class
放在 v-bind:class
中,不需要改变的 class
可以直接放在 class
属性中。
数组语法
v-bind:class
除了能绑定对象外也能绑定数组,如下:
<template>
<div id="app">
<button v-bind:class="classArr">按钮</button>
</div>
</template>
export default {
name: "app",
data() {
return {
classArr: ["active", "btn", "red"]
}
}
}
上面的代码会被渲染为:
<button class="active btn red">按钮</button>
只需要改变数组的内容就能更改 class
。
在数组中也能使用对象语法。
如下:
<template>
<div id="app">
<button v-bind:class="classArr">按钮</button>
</div>
</template>
export default {
name: "app",
data() {
return {
classArr: [
{active: true},
'btn',
'red'
]
}
}
}
最终会被渲染为:
<button class="active btn red">按钮</button>
只要 active
为 true
,active
就会被渲染。
style
对象语法
style
也可以使用 v-bind:style
来设置。
如下:
<template>
<div id="app">
<button
v-bind:style="btnStyle"
@click="changeColor"
>
按钮
</button>
</div>
</template>
export default {
name: "app",
data() {
return {
btnStyle: {
color: 'red',
fontSize: '16px'
}
}
},
methods: {
changeColor() {
this.btnStyle.color = 'blue'
}
}
}
上面的 button
绑定了 btnStyle
对象,button
的 click
事件绑定了 changeColor
方法,changeColor
的功能就是改变 color
。button
被点击后 btnStyle
中的 color
就会改变,button
的样式也会改变。
也可以在 v-bind:style
中直接写样式。
如下:
<template>
<div id="app">
<button v-bind:style="{fontSize: size, backgroundColor: color}">按钮</button>
</div>
</template>
export default {
name: "app",
data() {
return {
size: 18 + 'px',
color: 'blue'
}
}
}
style
样式名可以使用驼峰式 backgroundImage
或 短横线 background-image
分隔,如果使用短横线的话,样式名需要用引号包裹。
数组语法
v-bind:style
也可以绑定数组,数组中可以包含多个样式对象。
如下:
<template>
<div id="app">
<button v-bind:style="[btnFont, btnMargin]">按钮</button>
</div>
</template>
export default {
name: "app",
data() {
return {
btnFont: {
fontSize: '16px',
fontFamily: '微软雅黑'
},
btnMargin: {
marginTop: '20px',
marginLeft: '50px'
}
}
}
}
上面的代码会渲染为:
<button style="font-size: 16px; font-family: 微软雅黑; margin-top: 20px; margin-left: 50px;">按钮</button>
相关文章:
版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。
本文地址:https://www.misterma.com/archives/831/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。