EP6 - 類別與風格綁定

閱讀時間約 1 分鐘
Class and Style Bindings 前端的框架,
看到這個標題還真的不知道會怎麼綁定?
有時候覺得處理Style覺得蠻麻煩的~到處都有重複內容www
不知道Class跟Style可以去翻翻 html ccs

資料綁定的一個常見需求是操作元素的 類別列表(class list)和內聯樣式(inline styles)。由於 class 和 style 都是屬性,我們可以使用 v-bind 來動態地賦予它們一個字串值,就像對其他屬性一樣。然而,嘗試使用字串串聯來生成這些值可能會讓人感到厭煩且容易出錯。因此,Vue 提供了當 v-bind 與 class 和 style 一起使用時的特殊增強功能。除了字串之外,這些表達式也可以評估為物件陣列

綁定 HTML 類別 - Binding HTML Classes

又來看片摟!

綁定至物件 - Binding to Objects

我們可以傳遞一個物件給 :class(即 v-bind:class 的縮寫)來動態切換類別:

<template>
<div :class="{ active: isActive }"></div>
</template>

上述語法表示 active 類別的存在將由資料屬性 isActive 的真假來決定。

你可以在物件中包含更多字段來切換多個類別。此外,:class 指令也可以與普通的 class 屬性共存。因此,給定以下狀態:

const isActive = ref(true)
const hasError = ref(false)

以及以下模板:

<template>
<div
class="static"
:class="{ active: isActive, 'text-danger': hasError }"
></div>
</template>

它將渲染為:

<template>
<div class="static active"></div>
</template>

isActivehasError 改變時,類別列表將相應更新。例如,如果 hasError 變為 true,類別列表將變為 "static active text-danger"

綁定的物件不必是內聯的(inline):

const classObject = reactive({
active: true,
'text-danger': false
})
<template>
<div :class="classObject"></div>
</template>

這將渲染為:

<template>
<div class="active"></div>
</template>

我們也可以綁定到返回物件的計算屬性上。這是一種常見且強大的模式:

const isActive = ref(true)
const error = ref(null)

const classObject = computed(() => ({
active: isActive.value && !error.value,
'text-danger': error.value && error.value.type === 'fatal'
}))
<template>
<div :class="classObject"></div>
</template>

綁定至陣列 - Binding to Arrays

我們可以將 :class 綁定到一個陣列,以應用一組類別:

const activeClass = ref('active')
const errorClass = ref('text-danger')
<template>
<div :class="[activeClass, errorClass]"></div>
</template>

這將渲染為:

<template>
<div class="active text-danger"></div>
</template>

如果你想在列表中有條件地切換類別,可以使用三元運算符來實現:

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

這樣將始終應用 errorClass,但只有當 isActive 為真值時才會應用 activeClass

然而,如果你有多個條件類別,這樣寫會顯得有點冗長。因此,我們也可以在陣列語法中使用物件語法:

<template>
<div :class="[{ [activeClass]: isActive }, errorClass]"></div>
</template>

與元件一起使用 - With Components

本節假設您已了解元件的知識。若不熟悉,可以跳過本節並稍後再回來。

當您在具有單一根元素的元件上使用 class 屬性時,這些類別會添加到元件的根元素,並與已存在的任何類別合併。

例如,如果我們有一個名為 MyComponent 的元件,其模板如下:

<!-- 子元件模板 -->
<p class="foo bar">Hi!</p>

然後在使用該元件時添加一些類別:

<!-- 使用元件時 -->
<MyComponent class="baz boo" />

渲染的 HTML 將是:

<p class="foo bar baz boo">Hi!</p>

類別綁定也是如此:

<MyComponent :class="{ active: isActive }" />

isActive 為真時,渲染的 HTML 將是:

<p class="foo bar active">Hi!</p>

如果您的元件具有多個根元素,則需要定義哪個元素會接收這些類別。您可以使用 $attrs 元件屬性來實現:

<!-- 使用 $attrs 的 MyComponent 模板 -->
<p :class="$attrs.class">Hi!</p>
<span>This is a child component</span>

這表示 MyComponent 有兩個根元素:<p><span>。在這個範例中,$attrs.class 會獲取從父組件傳遞下來的 class 屬性值,並應用到 <p> 元素上。<span> 元素則不會受到影響。

<MyComponent class="baz" />

class="baz" 會被傳遞給 MyComponent,並應用到 <p> 元素上。最終渲染的 HTML 會是:

將渲染為:

<p class="baz">Hi!</p>
<span>This is a child component</span>

在這個例子中,class="baz" 被應用到 <p> 元素,而 <span> 元素保持原樣,這樣您就能控制類別應用的位置,尤其是當元件有多個根元素時。

您可以在“Fallthrough Attributes”部分中了解更多有關元件屬性繼承的內容。

綁定內聯樣式 - Binding Inline Styles

綁定到物件 - Binding to Objects

:style 支援綁定到 JavaScript 物件值,它對應於 HTML 元素的 style 屬性

const activeColor = ref('red')
const fontSize = ref(30)

模板:

<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

雖然建議使用 camelCase 鍵,但 :style 也支援使用 kebab-case 的 CSS 屬性鍵(對應於實際 CSS 中的寫法),例如:

<div :style="{ 'font-size': fontSize + 'px' }"></div>

將樣式物件直接綁定通常是一個好主意,這樣模板會更清晰:

const styleObject = reactive({
color: 'red',
fontSize: '30px'
})

模板:

<div :style="styleObject"></div>

物件樣式綁定通常與返回物件的計算屬性一起使用。

綁定到陣列 - Binding to Arrays

:style 綁定到多個樣式物件的矩陣。這些物件將被合併並應用於同一元素:

<div :style="[baseStyles, overridingStyles]"></div>

自動前綴 - Auto-prefixing

當您在 :style 中使用需要供應商前綴的 CSS 屬性時,Vue 會自動添加適當的前綴。Vue 通過在運行時檢查當前瀏覽器支持的樣式屬性來完成這一點。如果瀏覽器不支持特定屬性,則會測試各種前綴變體,以嘗試找到一個被支持的變體。

在 Vue 中,當你使用需要供應商前綴的 CSS 屬性時,Vue 會自動添加這些前綴。供應商前綴(如 -webkit--moz--ms- 等)是用來確保 CSS 屬性在不同瀏覽器中能夠正常運行的。

多個值 - Multiple Values

您可以向樣式屬性提供多個(已前綴的)值的陣列,例如:

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

這將僅渲染瀏覽器支持的最後一個值。例如,這會在支持未前綴版本的 flexbox 的瀏覽器中渲染 display: flex

在這個例子中,display 屬性被設置為一個陣列,包含了三個不同的值:

  1. -webkit-box
  2. -ms-flexbox
  3. flex

瀏覽器會使用支持的最後一個值。在這個例子中,flex 是現代瀏覽器支持的標準屬性,因此 Vue 會將其應用到元素上。對於舊版本的瀏覽器,會根據支持情況選擇適當的前綴版本。

補充:前綴(Vendor Prefixes)

前綴(Vendor Prefixes)是一種用來確保新興或尚在實驗階段的 CSS 屬性在不同瀏覽器中能夠正常運行的技術。不同的瀏覽器廠商(如 Google、Mozilla、Apple、Microsoft)會在他們的瀏覽器中實現 CSS 標準,但在標準正式確定之前,這些實現通常需要使用前綴來區分實驗性功能。

常見的前綴

  1. -webkit-:由 Apple 和 Google 使用,主要應用於 WebKit 和 Blink 內核的瀏覽器,如 Safari 和 Chrome。
  2. -moz-:由 Mozilla 使用,主要應用於 Firefox 瀏覽器。
  3. -ms-:由 Microsoft 使用,主要應用於 Internet Explorer 和 Edge 瀏覽器。
  4. -o-:由 Opera 使用,但 Opera 現在已經基於 Blink 內核,這個前綴已經不常見了。

示例

假設你想使用 CSS3 的 flex 屬性來創建彈性佈局。在早期版本的瀏覽器中,flex 屬性可能需要使用前綴來支持:

/* 標準屬性 */
display: flex;

/* 前綴屬性 */
display: -webkit-flex; /* Safari 和早期版本的 Chrome */
display: -moz-flex; /* Firefox */
display: -ms-flex; /* Internet Explorer 10 */

在這個例子中,display: flex; 是標準屬性,而其他三個帶有前綴的屬性用來確保在不同瀏覽器中的兼容性。

為什麼需要前綴

  1. 實驗功能:瀏覽器中的新 CSS 功能可能尚未成為標準,瀏覽器製造商會使用前綴來測試和實驗這些功能。
  2. 兼容性:不同瀏覽器可能實現了不同的功能版本,使用前綴可以確保功能在不同環境中的一致性。
  3. 逐步支持:隨著 CSS 標準的演進,前綴屬性會被標準屬性取代,最終前綴會被移除。

現代做法

現在,許多現代瀏覽器已經支持標準 CSS 屬性,不再需要使用前綴。開發者可以通過工具(如 PostCSS 和 Autoprefixer)自動添加必要的前綴,簡化開發過程。

這章節蠻不錯的~原來可以這樣綁定Class跟Style
動態的切換這些類別跟style,
以前的寫法可能都要寫一大堆Javascript來做切換~
這框架似乎省去很多麻煩啊~ 還是要多來練習一下




avatar-img
2會員
70內容數
分享生活趣事~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
卡關的人生 的其他內容
本文介紹了計算屬性(Computed Properties)的基本概念及其在前端框架中的應用,特別是 Vue.js。計算屬性允許我們根據其他響應式數據進行計算並且自動跟蹤依賴,避免不必要的重複計算。本文還探討瞭如何使用可寫入的計算屬性,以及最佳實踐建議,以確保性能與代碼的可讀性。
本文深入探討 Vue.js 中的響應式原理,特別是 Composition API 中的 ref() 和 reactive() 使用。通過示例分析這些概念,並比較二者的優缺點,幫助開發者更清晰地理解響應式狀態的管理與最佳實踐。瞭解如何有效地聲明和管理響應式狀態,對於提升 Vue 開發的效率至關重要。
本文介紹了 Vue 的模板語法及虛擬 DOM 概念。學習如何使用 Vue 進行聲明式渲染,以及模板如何轉換為高效的 JavaScript 代碼。探討各種綁定方法、指令及安全注意事項,幫助開發者構建高效動態用戶界面並提升應用性能。文章深入淺出,適合想進一步瞭解 Vue 的開發者。
這篇文章將介紹如何創建和管理 Vue 應用程式的基本概念,包括根組件的概念、如何掛載應用程式及應用程式的配置選項。將探討多個應用實例的使用情境,並解釋如何在同一頁面上共存不同的 Vue 應用程式。透過範例和深入的說明,讀者將能夠理解 Vue 應用程式的組織結構和應用範圍內的資產管理。
隨著AI工具的快速發展,學習新的程式語言變得更為簡便。這篇文章帶你瞭解如何使用Vue.js來建立單頁應用(SPA),並提供環境建置的詳細步驟,包括Node.js的安裝、使用NPM管理套件以及如何透過CDN簡化Vue的應用設置。
Vue是一個前端框架,發音如View,幫助你有效率地開發任何複雜性的使用者介面 由前Google工程師 尤雨溪(Evan You) 邊工作邊開發出來的開源框架,好厲害! 還在耍廢嗎?一起來學習吧~ 期待有朝一日能應徵上遠端工作 www ~ 下面的範例是什麼? // main.js 或 main.
本文介紹了計算屬性(Computed Properties)的基本概念及其在前端框架中的應用,特別是 Vue.js。計算屬性允許我們根據其他響應式數據進行計算並且自動跟蹤依賴,避免不必要的重複計算。本文還探討瞭如何使用可寫入的計算屬性,以及最佳實踐建議,以確保性能與代碼的可讀性。
本文深入探討 Vue.js 中的響應式原理,特別是 Composition API 中的 ref() 和 reactive() 使用。通過示例分析這些概念,並比較二者的優缺點,幫助開發者更清晰地理解響應式狀態的管理與最佳實踐。瞭解如何有效地聲明和管理響應式狀態,對於提升 Vue 開發的效率至關重要。
本文介紹了 Vue 的模板語法及虛擬 DOM 概念。學習如何使用 Vue 進行聲明式渲染,以及模板如何轉換為高效的 JavaScript 代碼。探討各種綁定方法、指令及安全注意事項,幫助開發者構建高效動態用戶界面並提升應用性能。文章深入淺出,適合想進一步瞭解 Vue 的開發者。
這篇文章將介紹如何創建和管理 Vue 應用程式的基本概念,包括根組件的概念、如何掛載應用程式及應用程式的配置選項。將探討多個應用實例的使用情境,並解釋如何在同一頁面上共存不同的 Vue 應用程式。透過範例和深入的說明,讀者將能夠理解 Vue 應用程式的組織結構和應用範圍內的資產管理。
隨著AI工具的快速發展,學習新的程式語言變得更為簡便。這篇文章帶你瞭解如何使用Vue.js來建立單頁應用(SPA),並提供環境建置的詳細步驟,包括Node.js的安裝、使用NPM管理套件以及如何透過CDN簡化Vue的應用設置。
Vue是一個前端框架,發音如View,幫助你有效率地開發任何複雜性的使用者介面 由前Google工程師 尤雨溪(Evan You) 邊工作邊開發出來的開源框架,好厲害! 還在耍廢嗎?一起來學習吧~ 期待有朝一日能應徵上遠端工作 www ~ 下面的範例是什麼? // main.js 或 main.
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
切換頁面卡卡有很多種原因,這裡舉的例子只針對元件太大的情境。 除了想辦法拆分外,還有一個方法就是利用 Vue 的 Async Component。
Thumbnail
因為最近想嘗試編碼風格,於是就選了一套比較"不嚴格"的輔助工具來摸索。 編輯器 VS CODE 框架 VUE3 打包工具 VITE 編碼風格 Standard 環境 version { "nodejs":"v18.18.0", "npm":"9.8.1" }
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
如何透過 CSS 來美化和增強文本的可讀性,對於提升用戶體驗至關重要。本文將介紹如何使用 CSS 來處理網頁上的文本,包括字型設定、文本排列、裝飾等多方面。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
切換頁面卡卡有很多種原因,這裡舉的例子只針對元件太大的情境。 除了想辦法拆分外,還有一個方法就是利用 Vue 的 Async Component。
Thumbnail
因為最近想嘗試編碼風格,於是就選了一套比較"不嚴格"的輔助工具來摸索。 編輯器 VS CODE 框架 VUE3 打包工具 VITE 編碼風格 Standard 環境 version { "nodejs":"v18.18.0", "npm":"9.8.1" }
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
如何透過 CSS 來美化和增強文本的可讀性,對於提升用戶體驗至關重要。本文將介紹如何使用 CSS 來處理網頁上的文本,包括字型設定、文本排列、裝飾等多方面。