文章

Class 與 Style 綁定

在 Vue 3 中,Class 與 Style 綁定 是用來動態設定元素的 CSS 類別(class)和樣式(style)的強大工具。這些綁定功能使我們能夠根據數據狀態來靈活改變視圖的外觀。

1. Class 綁定

Vue 提供了多種方式來綁定元素的 class 屬性,我們可以使用對象語法或數組語法,來根據條件動態添加或移除 CSS 類別。

對象語法

對象語法允許我們根據條件來動態添加或移除 CSS 類別。當對象的某個鍵值對中,值為 true 時,對應的鍵(class 名稱)會被應用到元素上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div id="app">
  <p :class="{ active: isActive, disabled: isDisabled }">這是一個段落</p>
  <button @click="toggleState">切換狀態</button>
</div>

<script>
const app = Vue.createApp({
  data() {
    return {
      isActive: true,
      isDisabled: false
    };
  },
  methods: {
    toggleState() {
      this.isActive = !this.isActive;
      this.isDisabled = !this.isDisabled;
    }
  }
});

app.mount('#app');
</script>

<style>
.active {
  color: green;
}
.disabled {
  text-decoration: line-through;
}
</style>

在這個範例中,當 isActivetrue 時,active 類會被應用到段落元素中,而 isDisabled 控制 disabled 類的應用。

數組語法

數組語法可以將多個 CSS 類別一起綁定。如果條件為 true,對應的類別就會被應用。

1
<p :class="[isActive ? 'active' : '', 'highlight']">這是一個段落</p>

在這裡,如果 isActivetrueactive 類會被應用。同時,highlight 類無條件被應用。

與 Computed 配合

我們可以使用 計算屬性(computed properties) 來更靈活地處理複雜的條件判斷:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div id="app">
  <p :class="classObject">這是一個段落</p>
</div>

<script>
const app = Vue.createApp({
  data() {
    return {
      isActive: true,
      isDisabled: false
    };
  },
  computed: {
    classObject() {
      return {
        active: this.isActive,
        disabled: this.isDisabled
      };
    }
  }
});

app.mount('#app');
</script>

2. Style 綁定

Style 綁定 可以通過對象語法或數組語法來動態設置內聯樣式。這讓我們可以根據數據狀態靈活地改變元素的樣式。

對象語法

對象語法允許我們動態設定 CSS 屬性值,鍵是 CSS 的屬性名,值是屬性值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<div id="app">
  <p :style="{ color: activeColor, fontSize: fontSize + 'px' }">這是一個段落</p>
  <button @click="changeStyle">改變樣式</button>
</div>

<script>
const app = Vue.createApp({
  data() {
    return {
      activeColor: 'blue',
      fontSize: 14
    };
  },
  methods: {
    changeStyle() {
      this.activeColor = this.activeColor === 'blue' ? 'red' : 'blue';
      this.fontSize += 2;
    }
  }
});

app.mount('#app');
</script>

在這裡,我們根據數據動態設置段落的 colorfont-size,並通過按鈕來改變樣式。

數組語法

數組語法允許我們應用多組樣式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<p :style="[baseStyles, additionalStyles]">這是一個段落</p>

<script>
const app = Vue.createApp({
  data() {
    return {
      baseStyles: {
        color: 'blue',
        fontSize: '14px'
      },
      additionalStyles: {
        backgroundColor: 'lightgray'
      }
    };
  }
});

app.mount('#app');
</script>

這樣,我們可以將多個樣式物件合併應用到一個元素上。

自動處理廠商前綴

Vue 會自動處理 CSS 屬性的 廠商前綴(如 -webkit--moz-),這樣我們可以放心使用標準屬性名稱,而不用擔心跨瀏覽器兼容性問題。

1
<p :style="{ transform: 'rotate(30deg)' }">旋轉文本</p>

3. Class 與 Style 綁定的混合使用

我們可以同時使用 :class:style 來綁定 CSS 類別和內聯樣式,根據不同的需求靈活調整元素的樣式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="app">
  <p :class="{ active: isActive }" :style="{ color: textColor }">這是一個段落</p>
</div>

<script>
const app = Vue.createApp({
  data() {
    return {
      isActive: true,
      textColor: 'green'
    };
  }
});

app.mount('#app');
</script>

在這個範例中,:class:style 都被應用,根據狀態動態改變元素的類別和樣式。


總結

  • Class 綁定:通過 :class 來根據條件動態添加或移除 CSS 類別。支持對象語法和數組語法,並且可以和計算屬性配合使用。
  • Style 綁定:通過 :style 動態設置內聯樣式。支持對象語法和數組語法,並且自動處理廠商前綴。

這些綁定功能讓我們能夠靈活、簡單地根據數據狀態控制元素的外觀,是 Vue 中非常常用且強大的功能。

本文章以 CC BY 4.0 授權