# Class 與 Style 綁定
操作元素的 class 列表和內聯樣式是數據綁定的一個常見需求。因為它們都是屬性,所以我們可以用 `v-bind` 處理它們:只需要通過表達式計算出字符串結果即可。不過,字符串拼接麻煩且易錯。因此,在將 `v-bind` 用于 `class` 和 `style` 時,Vue.js 做了專門的增強。表達式結果的類型除了字符串之外,還可以是對象或數組。
## [綁定 HTML Class](https://cn.vuejs.org/v2/guide/class-and-style.html#綁定-HTML-Class "綁定 HTML Class")
### [對象語法](https://cn.vuejs.org/v2/guide/class-and-style.html#對象語法 "對象語法")
我們可以傳給 `v-bind:class` 一個對象,以動態地切換 class:
~~~
<div v-bind:class="{ active: isActive }"></div>
~~~
上面的語法表示 `active` 這個 class 存在與否將取決于數據屬性 `isActive` 的 [truthiness](https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy)。
你可以在對象中傳入更多屬性來動態切換多個 class。此外,`v-bind:class` 指令也可以與普通的 class 屬性共存。當有如下模板:
~~~
<div
class="static"
v-bind:class="{ active: isActive, 'text-danger': hasError }"
></div>
~~~
和如下 data:
~~~
data: {
isActive: true,
hasError: false
}
~~~
結果渲染為:
~~~
<div class="static active"></div>
~~~
當 `isActive` 或者 `hasError` 變化時,class 列表將相應地更新。例如,如果 `hasError` 的值為 `true`,class 列表將變為 `"static active text-danger"`。
綁定的數據對象不必內聯定義在模板里:
~~~
<div v-bind:class="classObject"></div>
~~~
~~~
data: {
classObject: {
active: true,
'text-danger': false
}
}
~~~
渲染的結果和上面一樣。我們也可以在這里綁定一個返回對象的[計算屬性](https://cn.vuejs.org/v2/guide/computed.html)。這是一個常用且強大的模式:
~~~
<div v-bind:class="classObject"></div>
~~~
~~~
data: {
isActive: true,
error: null
},
computed: {
classObject: function () {
return {
active: this.isActive && !this.error,
'text-danger': this.error && this.error.type === 'fatal'
}
}
}
~~~
### [數組語法](https://cn.vuejs.org/v2/guide/class-and-style.html#數組語法 "數組語法")
我們可以把一個數組傳給 `v-bind:class`,以應用一個 class 列表:
~~~
<div v-bind:class="[activeClass, errorClass]"></div>
~~~
~~~
data: {
activeClass: 'active',
errorClass: 'text-danger'
}
~~~
渲染為:
~~~
<div class="active text-danger"></div>
~~~
如果你也想根據條件切換列表中的 class,可以用三元表達式:
~~~
<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
~~~
這樣寫將始終添加 `errorClass`,但是只有在 `isActive` 是 truthy[\[1\]](https://cn.vuejs.org/v2/guide/class-and-style.html#footnote-1) 時才添加 `activeClass`。
不過,當有多個條件 class 時這樣寫有些繁瑣。所以在數組語法中也可以使用對象語法:
~~~
<div v-bind:class="[{ active: isActive }, errorClass]"></div>
~~~
### [用在組件上](https://cn.vuejs.org/v2/guide/class-and-style.html#用在組件上 "用在組件上")
> 這個章節假設你已經對 [Vue 組件](https://cn.vuejs.org/v2/guide/components.html)有一定的了解。當然你也可以先跳過這里,稍后再回過頭來看。
當在一個自定義組件上使用 `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[\[1\]](https://cn.vuejs.org/v2/guide/class-and-style.html#footnote-1) 時,HTML 將被渲染成為:
~~~
<p class="foo bar active">Hi</p>
~~~
## [綁定內聯樣式](https://cn.vuejs.org/v2/guide/class-and-style.html#綁定內聯樣式 "綁定內聯樣式")
### [對象語法](https://cn.vuejs.org/v2/guide/class-and-style.html#對象語法-1 "對象語法")
`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'
}
}
~~~
同樣的,對象語法常常結合返回對象的計算屬性使用。
### [數組語法](https://cn.vuejs.org/v2/guide/class-and-style.html#數組語法-1 "數組語法")
`v-bind:style` 的數組語法可以將多個樣式對象應用到同一個元素上:
~~~
<div v-bind:style="[baseStyles, overridingStyles]"></div>
~~~
### [自動添加前綴](https://cn.vuejs.org/v2/guide/class-and-style.html#自動添加前綴 "自動添加前綴")
當 `v-bind:style` 使用需要添加[瀏覽器引擎前綴](https://developer.mozilla.org/zh-CN/docs/Glossary/Vendor_Prefix)的 CSS 屬性時,如 `transform`,Vue.js 會自動偵測并添加相應的前綴。
- 我們在做什么?
- 為什么是內存?
- 我們實際上在做什么
- HTML基礎
- Web原理和HTML簡介
- Web原理
- HTML概念
- HTML標簽
- 標簽
- HTML固定基本結構
- 第一個HTML頁面
- 工具的使用
- 標題
- <hr>和<p>標簽
- 路徑概念
- 超級鏈接
- 列表
- 表格
- 表單的設計與使用
- 表單域的原理
- 文本框和密碼框
- 單選框和復選框
- 下拉列表框
- 多行文本和上傳
- 提交按鈕和重置按鈕
- 為CODING COFFEE加入在線購買頁
- HTML5
- 定位服務
- CSS
- CSS的基礎使用
- CSS簡介
- CSS樣式規則和加載方式
- 選擇器
- 偽類
- CSS優先級和層疊
- CSS顏色
- 背景圖片
- 文本
- CSS列表
- DIV+CSS布局
- 內聯元素和區塊元素介紹
- Display屬性
- 盒子模型的邊距和邊框
- 浮動和清除浮動
- 用Position屬性進行定位
- 專題:居中和對齊
- flex布局
- CSS新特性
- CSS3邊框
- 動畫
- Javascript
- HelloWorld
- 語句與變量
- 一切皆對象
- 標識符、注釋和區塊
- 基本數據類型和引用數據類型
- 語句
- 條件語句
- 循環語句
- 標準庫
- Array對象
- Number對象
- String對象
- JSON對象
- Math對象
- Date對象
- 數據類型
- typeof運算符
- number
- 字符串
- 布爾類型
- 函數
- 數組
- Dom模型
- Dom和Dom節點
- 特征相關屬性
- 節點對象方法
- Element對象
- Attribute對象
- Text節點和CSS操作
- 事件模型
- WebStorage
- BOM模型
- window對象
- 計時事件
- jQuery基礎
- 認識jQuery
- jQuery對象和DOM對象
- jQuery選擇器
- jQuery Dom操作
- 查找節點和創建節點
- 插入節點和刪除節點
- 復制節點和替換節點
- 包裹節點和屬性操作
- 樣式操作
- 設置和獲取HTML、文本和值
- 遍歷節點和CSS操作
- jQuery 事件和動畫
- 事件綁定與冒泡處理
- jQuery動畫
- jQuery 插件
- validate 插件
- jQuery與Ajax的應用
- Ajax簡介
- jquery中的Ajax
- Vue.js基礎與實戰
- HelloWorld
- v-for、v-on、v-model
- 組件化編程
- 生命周期函數(鉤子)
- 計算屬性、偵聽器、方法
- class與style綁定
- 關于組件的一些問題
- 單項數據流和Prop驗證
- 項目環境搭建
- 關于git的一些情況
- JavaWeb教程
- 對象和類的概念
- 對象和類的介紹
- 對象和類的介紹2
- 類的繼承與權限控制
- Object類
- 多態的內容
- 容器
- 流
- Servlet
- Servlet練習
- Session和Cookie
- JSP
- 內置對象
- JSTL和EL
- JDBC
- 文件上傳和下載
- 過濾器
- 數據庫
- 數據庫介紹
- MySQL的安裝
- SQL
- 表基本操作
- 修改數據語句
- 數據檢索操作
- 多表數據操作
- 表結構設計
- 綜合應用
- 作業與練習
- Maven教程
- Maven安裝配置