Vue.js: ربط Class و Style
آخر تحديث: 2026-10-20
:classe و:style هما أكثر أشكال الربط استخدامًا في Vue — فهما يتيحان لك التبديل ديناميكيًا بين أسماء فئات CSS والأنماط المضمنة بناءً على البيانات. وفي الأساس، هما شكلان خاصان من أشكال v-bind؛ ونظرًا لاستخدامهما المتكرر، فقد تم تطبيقهما باعتبارهما «تسهيلات لغوية».
يكفي إتقان أنماط الكتابة الخمسة هذه لتغطية 95% من الحالات: بناء جملة «object»، وبناء جملة «array»، والمشغلات الثلاثية، والخصائص المحسوبة، وتسلسل «سلسلة».
1. ما ستتعلمه
:classeبناء جملة الكائنات: التبديل بين الفئة الواحدة والفئات المتعددة بناءً على الشروط:classeصيغة المصفوفات: تطبيق فئات متعددة في آن واحد- المزج بين المصفوفات والكائنات: تركيبات معقدة لأسماء الفئات
:styleبناء الجملة للكائنات: الأنماط المضمنة الديناميكية:styleصيغة المصفوفات: دمج عدة كائنات أنماط- ربط متغيرات CSS (موصى به لـ Vue 3)
2. تحدي في التصميم يتعلق بملصق status الطلب
(1) المشكلة: 5 حالات، 5 عبارات "if"
كانت أليس بحاجة إلى عرض 5 حالات للطلبات في لوحة الإدارة بألوان مختلفة:
<!-- ❌ The "Broken" Version: 5 v-if with class -->
<span v-if="status === 'pending'" class="badge yellow">Pending</span>
<span v-else-if="status === 'paid'" class="badge green">Paid</span>
<span v-else-if="status === 'shipped'" class="badge blue">Shipped</span>
<span v-else-if="status === 'delivered'" class="badge gray">Delivered</span>
<span v-else class="badge red">Cancelled</span>
مدير المنتج تشارلي:
«أليس، هذا مظهره سيئ. ماذا لو أضفنا 3 حالات أخرى الشهر المقبل؟ لا يمكنك الاكتفاء بالنسخ واللصق. نحن بحاجة إلى نهج ديناميكي منظم.»
(2) Vue :class الحل: التعامل مع 5 حالات في سطر واحد فقط
(3) الإيرادات
- تقليص كود HTML: 5 أسطر من if-else → سطر واحد من :class
- قابلية الصيانة: لإضافة status جديدة، ما عليك سوى تعديل الخاصية
computed؛ بينما يظل القالب دون تغيير. - سهولة القراءة: يتم تجميع تعيينات فئات الstatus في مكان واحد، مع اتباع منطق واضح
3. 5 طرق لكتابة :class
(1) قواعد بناء الجمل النصية
(2) بناء الجملة باستخدام الكائنات (الأكثر شيوعًا)
(3) صيغة المصفوفات
(4) التعايش مع الفئات الثابتة
(5) دروس حول المكونات
▶ مثال: 5 طرق لكتابة :class
▶ جرّب الكودالإخراج:
String → class=badge
Object → class=active
Array → class=active error
Computed → class=active بعد دمج الشروط
4. 5 طرق لكتابة :style
(1) قواعد بناء الجملة الخاصة بالكائنات
(2) تحويل أسماء خصائص CSS
يقوم Vue تلقائيًا بتحويل قواعد تسمية JavaScript إلى قواعد تسمية CSS:
(3) صيغة المصفوفات (دمج كائنات متعددة)
(4) إضافة البادئة تلقائيًا
يضيف Vue 3 تلقائيًا بادئات المتصفح إلى خصائص CSS (بناءً على محرك المتصفح):
// Write:
{ transform: 'rotate(45deg)' }
// Vue Auto-add:
{
-webkit-transform: 'rotate(45deg)',
transform: 'rotate(45deg)'
}
(5) متغيرات CSS (موصى بها لـ Vue 3)
▶ مثال: 5 طرق لكتابة :style
▶ جرّب الكودالإخراج:
Object → color: red; font-size: 16px
Multi → background: #42b883; padding: 20px
Array → دمج baseStyles مع themeStyles
CSS Var → --theme-color: #35495e
5. تمرين شامل: شارة حالة الطلب الديناميكية
▶ مثال: شارة status الطلب
▶ جرّب الكودالإخراج:
status = pending → شارة صفراء Pending
status = paid → شارة خضراء Paid
status = cancelled → شارة حمراء Cancelled
(1) 📊 4. 5 أخطاء شائعة
| الخطأ | الأعراض | الحل |
|---|---|---|
| فئة String لا تستجيب | الفئة مبرمجة بشكل ثابت ولا يمكن تغييرها | تم ربطها باستخدام :class |
| فئة array بها أخطاء إملائية | وجود عدة فئات تحمل الاسم نفسه تتداخل مع بعضها البعض | استخدام صيغة الكائنات |
| وحدة النمط مفقودة | يتم تفسير الرقم 16 على أنه 16px ويتم تجاهله | يتم كتابة السلسلة '16px' |
| اسم خاصية CSS غير صحيح | font-size يجب أن يكون fontSize |
استخدم أسلوب كتابة camelCase أو علامات الاقتباس |
| :تعارض الفئات | تضارب بين الأسماء الثابتة والديناميكية | تقوم Vue بدمجها تلقائيًا، لا بأس |
(2) 📊 5. 5 مقارنات الأداء
| التنفيذ | ناتج التجميع | الأداء | قابلية التطبيق |
|---|---|---|---|
| سلسلة | التسلسل المباشر للسلاسل | ⭐⭐⭐⭐⭐ | بسيط |
| الكائن | التحليل الثابت | ⭐⭐⭐⭐ | معتدل |
| المصفوفات | ربط السلاسل | ⭐⭐⭐⭐ | فئات متعددة |
| المصفوفات + الكائنات | المعالجة المختلطة | ⭐⭐⭐ | معقدة |
| الخاصية المحسوبة | القيمة المخزنة مؤقتًا | ⭐⭐⭐⭐⭐ | منطق معقد |
(3) 📊 6. الاختلافات الخمسة الرئيسية بين «الفئة» و«الأسلوب»
| الجانب | الفئة | النمط |
|---|---|---|
| التقييم | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| قابلية إعادة استخدام CSS | سهل (إعادة استخدام أسماء الفئات) | صعب (أنماط متناثرة) |
| الأداء | أعلى (تحسين المتصفح) | أقل قليلاً |
| الأولوية | تعتمد على المحدد | مضمنة (الأعلى) |
| تبديل القوالب | سهل (تغيير الفئة) | سهل (تغيير متغير CSS) |
❓ أسئلة شائعة
class="x" الثابت و:class="{active: y}" الديناميكي تلقائيًا (مما ينتج عنه إما class="x active" أو "x").style ككائن؟ ألا يمكنني استخدام سلسلة CSS فحسب؟<div style="color: red"> هي صيغة HTML الأصلية، و<div :style="'color: red'"> هي أيضًا طريقة تعتمد على السلسلة. ومع ذلك، فإن استخدام كائن :style="{ color: 'red' }" يتيح لك ربط المتغيرات ديناميكيًا. نوصي باستخدام كائن.{'--my-var': value} في :style وvar(--my-var) في CSS. يوصي Vue 3 باستخدام متغيرات CSS لتبديل السمات، حيث إنها أكثر كفاءة من ربط الأنماط مباشرةً (فكل ما عليك هو تحديث متغير واحد، ولن يتكرر ترتيب العناصر في DOM).class تلقائيًا (السلوك الافتراضي في Vue 3). أما المكونات متعددة الجذور فتستخدم $attrs.class للربط صراحةً بعنصر معين.<div v-if="show" :class="{ active: isActive }"> عندما تكون قيمة show=false، لا يتم عرض العنصر بأكمله، ولا يكون لـ isActive أي تأثير.:style="{ '--primary': theme.primary }" على جميع العناصر color: var(--primary). يتطلب التبديل بين السمات تغيير متغير واحد فقط، وهو ما يعد أكثر كفاءة من تبديل 100 فئة.📖 ملخص
:classو:styleهما صيغتان مبسطتان لـ v-bind؛ وهما الأكثر استخدامًا، ولذلك تم تبسيطهما.- :class — 5 طرق لتعريفه: سلسلة، كائن، array، array + كائن، خاصية محسوبة
- :style — 5 طرق لكتابته: كائن، array، array + كائن، متغيرات CSS، الخصائص المحسوبة
- الدمج التلقائي للفئات الثابتة و
:classالديناميكية - يضيف Vue 3 بادئات CSS الخاصة بالمتصفحات تلقائيًا
- تُعد متغيرات CSS الحل الموصى به لتبديل السمات في Vue 3 (وهي أكثر كفاءة من تبديل الأنماط)
- الأداء: الخصائص الكائنية/المحسوبة > المصفوفات > السلاسل
📝 تمارين
-
أسئلة أساسية (مستوى الصعوبة: ⭐)
استخدم محدد :class لتنفيذ ثلاث حالات للأزرار:
- الأساسي: نص أبيض على خلفية زرقاء
- النجاح: نص أبيض على خلفية خضراء
- خطر: نص أبيض على خلفية حمراء
البيانات:
const variant = ref('primary') -
مسائل متقدمة (مستوى الصعوبة: ⭐⭐)
قم بتنفيذ قائمة الطلبات بحيث يعرض كل صف شارة بلون مختلف بناءً على status الطلب:
- 5 حالات (قيد الانتظار/مدفوعة/مشحونة/مسلّمة/ملغاة)
- إرجاع كائن
classباستخدام خاصية محسوبة - :style إضافة لون الرمز المطابق للstatus
-
مسألة التحدي (مستوى الصعوبة: ⭐⭐⭐)
تنفيذ نظام كامل لتبديل السمات:
- 3 أنماط (فاتح/داكن/عالي التباين)
- استخدم متغيرات CSS لربط ألوان السمة (الأساسية/الثانوية/الخلفية/النص)
- :class — تغيير اسم فئة السمة
- استخدم localStorage لتخزين اختيار المستخدم
- لا يؤدي تغيير السمات إلى تحديث الصفحة (يتم تحديث التصميم المتجاوب تلقائيًا)