Vue-样式绑定(Class与Style)

本文详细介绍了Vue中v-bind如何用于绑定class和内联样式。通过对象和数组语法,展示了动态切换class的方法,并阐述了在组件上绑定class的特性。同时,解析了v-bind:style的对象和数组语法,包括自动添加浏览器前缀和处理多重值的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作元素的 class 列表和内联样式是数据绑定的一个常见需求,我们可以通过v-bind(或者简写为:)进行绑定,它后边跟的就是一个表达式,其类型除了字符串之外,还可以是对象或数组。

那么v-bind是如何绑定class的呢?

1.对象语法(class的对象绑定)

我们可以传给 v-bind:class 一个对象(对象中也可以传入更多字段),以动态地切换 class:

<div v-bind:class="{ active: isActive }"></div>

这表示,给div元素绑定了一个class,class的名字是active,它存在与否将取决于isActive 这个变量是不是truthy。

2.数组语法(class的数组绑定)

我们可以传给 v-bind:class一个数组,以应用一个 class 列表:

<div v-bind:class="[activeClass, errorClass]"></div>

这表示,页面上的div元素会显示一个class,class由数组里边的变量,即activeClass和errorClass的内容所决定,只要它的值不为空,页面就会显示对应的class。

如果你也想根据条件切换列表中的 class,可以用三元表达式:

<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

这表示,始终添加一个errorClass,但是只有当isActive为truthy时才会添加 activeClass。

3.用在组件上(class的组件绑定)

当在一个自定义组件上使用 class 时, class 将被添加到该组件的根元素上面,这个元素上已经存在的 class 不会被覆盖。

例如,如果你声明了这个组件:
Vue.component('my-component', {
  template: '<p class="foo bar">Hi</p>'
})

然后在使用它的时候添加一些 class:
<my-component class="baz boo"></my-component>

那么,HTML 将被渲染为:
<p class="foo bar baz boo">Hi</p>


即使是对于class 的对象绑定也同样适用:
<my-component v-bind:class="{ active: isActive }"></my-component>

当 isActive的值为truthy时,HTML 将被渲染成为:
<p class="foo bar active">Hi</p>

v-bind又是如何绑定内联样式的呢?

1.对象语法(style的对象绑定)

我们可以传给v-bind:style 一个 JavaScript 对象,这个对象和CSS样式进行了绑定。
(其中CSS的属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case) 来命名)

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
  activeColor: 'red',
  fontSize: 30
}

不过直接绑定到一个样式对象通常更好,这会让模板更清晰简洁:

<div v-bind:style="styleObj"></div>
data: {
  styleObj: {
    color: 'red',
    fontSize: '13px'
  }
}

2.数组语法(style的数组绑定)

我们可以给v-bind:style传递一个数组,这个数组可以将多个样式对象应用到同一个元素上:

<div v-bind:style="[activeClass, errorClass]"></div>

3.自动添加前缀

当 v-bind:style 使用需要添加浏览器引擎前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

(浏览器厂商们有时会给实验性的或者非标准的CSS属性和JavaScript API添加前缀,这样开发者就可以用这些新的特性进行试验(理论上地)。开发者们应该等到浏览器行为标准化之后再包含未加前缀的属性。)

4.多重值

可以为 style 绑定的CSS属性提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:

<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>

这样写只会渲染数组中最后一个被浏览器支持的值。在这里,如果浏览器不支持带浏览器前缀的值,那么就只会渲染 display: flex。

附注:在 JavaScript 中,truthy(真值)指的是在布尔值上下文中,转换后的值为真的值。所有值都是真值,除非它们被定义为假值(即除 false、0、""、null、undefined 和 NaN 以外皆为真值)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值