Vue.js: ربط Class و Style

آخر تحديث: 2026-10-20

:classe و:style هما أكثر أشكال الربط استخدامًا في Vue — فهما يتيحان لك التبديل ديناميكيًا بين أسماء فئات CSS والأنماط المضمنة بناءً على البيانات. وفي الأساس، هما شكلان خاصان من أشكال v-bind؛ ونظرًا لاستخدامهما المتكرر، فقد تم تطبيقهما باعتبارهما «تسهيلات لغوية».

يكفي إتقان أنماط الكتابة الخمسة هذه لتغطية 95% من الحالات: بناء جملة «object»، وبناء جملة «array»، والمشغلات الثلاثية، والخصائص المحسوبة، وتسلسل «سلسلة».

1. ما ستتعلمه


2. تحدي في التصميم يتعلق بملصق status الطلب

(1) المشكلة: 5 حالات، 5 عبارات "if"

كانت أليس بحاجة إلى عرض 5 حالات للطلبات في لوحة الإدارة بألوان مختلفة:

HTML
<!-- ❌ 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) الإيرادات


3. 5 طرق لكتابة :class

(1) قواعد بناء الجمل النصية

(2) بناء الجملة باستخدام الكائنات (الأكثر شيوعًا)

(3) صيغة المصفوفات

(4) التعايش مع الفئات الثابتة

(5) دروس حول المكونات

▶ مثال: 5 طرق لكتابة :class

▶ جرّب الكود

الإخراج:

TEXT
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 (بناءً على محرك المتصفح):

JS
// Write:
{ transform: 'rotate(45deg)' }

// Vue Auto-add:
{
  -webkit-transform: 'rotate(45deg)',
  transform: 'rotate(45deg)'
}

(5) متغيرات CSS (موصى بها لـ Vue 3)

▶ مثال: 5 طرق لكتابة :style

▶ جرّب الكود

الإخراج:

TEXT
Object → color: red; font-size: 16px
Multi → background: #42b883; padding: 20px
Array → دمج baseStyles مع themeStyles
CSS Var → --theme-color: #35495e

5. تمرين شامل: شارة حالة الطلب الديناميكية

▶ مثال: شارة status الطلب

▶ جرّب الكود

الإخراج:

TEXT
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' }" يتيح لك ربط المتغيرات ديناميكيًا. نوصي باستخدام كائن.
س كيف تُستخدم متغيرات CSS؟
ج استخدم {'--my-var': value} في :style وvar(--my-var) في CSS. يوصي Vue 3 باستخدام متغيرات CSS لتبديل السمات، حيث إنها أكثر كفاءة من ربط الأنماط مباشرةً (فكل ما عليك هو تحديث متغير واحد، ولن يتكرر ترتيب العناصر في DOM).
س كيف تستقبل المكونات الفئات الخارجية؟
ج ترث المكونات أحادية الجذر السمة class تلقائيًا (السلوك الافتراضي في Vue 3). أما المكونات متعددة الجذور فتستخدم $attrs.class للربط صراحةً بعنصر معين.
س ما هو ترتيب الفئات في صيغة الarray؟
ج يتم ربطها بالترتيب الذي تظهر به في الarray، لكن هذا الترتيب لا يؤثر على خصوصية CSS (التي تتحدد حسب خصوصية محددات CSS).
س هل يمكن استخدام :class مع v-if؟
ج نعم. <div v-if="show" :class="{ active: isActive }"> عندما تكون قيمة show=false، لا يتم عرض العنصر بأكمله، ولا يكون لـ isActive أي تأثير.
س كيف يمكنني التبديل بين السمات ديناميكيًا؟
ج نوصي باستخدام متغيرات CSS. ينطبق :style="{ '--primary': theme.primary }" على جميع العناصر color: var(--primary). يتطلب التبديل بين السمات تغيير متغير واحد فقط، وهو ما يعد أكثر كفاءة من تبديل 100 فئة.

📖 ملخص


📝 تمارين

  1. أسئلة أساسية (مستوى الصعوبة: ⭐)

    استخدم محدد :class لتنفيذ ثلاث حالات للأزرار:

    • الأساسي: نص أبيض على خلفية زرقاء
    • النجاح: نص أبيض على خلفية خضراء
    • خطر: نص أبيض على خلفية حمراء

    البيانات: const variant = ref('primary')

  2. مسائل متقدمة (مستوى الصعوبة: ⭐⭐)

    قم بتنفيذ قائمة الطلبات بحيث يعرض كل صف شارة بلون مختلف بناءً على status الطلب:

    • 5 حالات (قيد الانتظار/مدفوعة/مشحونة/مسلّمة/ملغاة)
    • إرجاع كائن class باستخدام خاصية محسوبة
    • :style إضافة لون الرمز المطابق للstatus
  3. مسألة التحدي (مستوى الصعوبة: ⭐⭐⭐)

    تنفيذ نظام كامل لتبديل السمات:

    1. 3 أنماط (فاتح/داكن/عالي التباين)
    2. استخدم متغيرات CSS لربط ألوان السمة (الأساسية/الثانوية/الخلفية/النص)
    3. :class — تغيير اسم فئة السمة
    4. استخدم localStorage لتخزين اختيار المستخدم
    5. لا يؤدي تغيير السمات إلى تحديث الصفحة (يتم تحديث التصميم المتجاوب تلقائيًا)
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%