الدورة / الدروس
01

ما هو Tailwind CSS وليه بنستخدمه؟

مقدمة + الفلسفة الأساسية

الشرح بالتفصيل

خلينا نبدأ من الأول خالص. لما بتعمل موقع ويب عادي بـ CSS، بتكتب CSS منفصل عشان كل عنصر — زي كده:

Tailwind CSS هو Framework بيخليك تكتب الـ styling جوا الـ HTML نفسه عن طريق حاجة اسمها Utility Classes. بدل ما تكتب CSS منفصل، بتحط classes جاهزة على العناصر مباشرةً.

  • 🔴 مع الـ CSS العادي: button { background: blue; padding: 8px 16px; }
  • 🟢 مع Tailwind: class="bg-blue-500 px-4 py-2"

الـ Utility-First Philosophy: فكرة Tailwind إن كل class بتعمل حاجة واحدة بس. text-center = text-align:center. font-bold = font-weight:700. ببساطة — بدل ما تكتب CSS، بتجمع classes.

مقارنة Tailwind vs Bootstrap vs CSS عادي

المعيارCSS عاديBootstrapTailwind
سرعة الكتابةبطيءمتوسطسريع جداً
مرونة التخصيصكاملةمحدودةكاملة
حجم الـ Outputمتغيركبيرصغير جداً (Purge)
Design Systemماعندكشمحددمتخصص ومرن
02

التثبيت والإعداد

CDN vs NPM — أسرع طريقة تبدأ

الطريقة السريعة — CDN (للتعلم والتجريب)

أسهل طريقة إنك تضيف Tailwind لأي مشروع: بس ضيف لينك جوا الـ <head>.

HTML
<!-- ضيف الـ script ده جوا head -->
<script src="https://cdn.tailwindcss.com"></script>

<!-- وتقدر تضيف config مباشرةً -->
<script>
  tailwind.config = {
    theme: {
      extend: {
        colors: {
          primary: '#39ff14',
        }
      }
    }
  }
</script>

الطريقة الاحترافية — NPM (للمشاريع الحقيقية)

TERMINAL
# 1. تثبيت Tailwind
npm install -D tailwindcss
npx tailwindcss init

# 2. في tailwind.config.js حدد الـ files
# content: ["./src/**/*.{html,js}"]

# 3. في input.css
@tailwind base;
@tailwind components;
@tailwind utilities;

# 4. شغّل الـ build
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch

لو بتتعلم أو بتعمل projects بسيطة، الـ CDN كافي تماماً. للمشاريع الكبيرة استخدم NPM عشان تقدر تعمل purge للـ CSS وتخلي الـ file صغير.

03

Utility Classes — العقل التفكيري لـ Tailwind

ازاي تفكر بـ Tailwind صح

الفكرة الأساسية

كل property في الـ CSS ليها class مقابلة في Tailwind. القاعدة العامة هي:

  • كل class بتعمل حاجة واحدة
  • ممكن تجمع classes على عنصر واحد
  • الـ classes اتصممت تكون اسمها منطقي ومتذكره
HTML — مثال شامل
<!-- بطاقة بسيطة بـ Tailwind -->
<div class="bg-white rounded-2xl shadow-xl p-6 max-w-sm mx-auto">
  <img class="w-full h-48 object-cover rounded-xl mb-4"
       src="photo.jpg" alt="صورة"/>
  <h2 class="text-2xl font-bold text-gray-800 mb-2">العنوان</h2>
  <p class="text-gray-500 text-sm leading-relaxed">
    نص الوصف هنا...
  </p>
  <button class="mt-4 w-full bg-blue-500 hover:bg-blue-600
                text-white font-semibold py-2 px-4 rounded-lg
                transition duration-300">
    اعرف أكتر
  </button>
</div>

أهم الـ Classes وما يقابلها

ClassCSS المقابل
p-4padding: 1rem
m-automargin: auto
w-fullwidth: 100%
h-screenheight: 100vh
flexdisplay: flex
griddisplay: grid
hiddendisplay: none
text-centertext-align: center
font-boldfont-weight: 700
rounded-fullborder-radius: 9999px
shadow-lgbox-shadow: 0 10px 15px -3px rgb(0 0 0 / .1)
cursor-pointercursor: pointer

نظام الـ Spacing: Tailwind بيستخدم scale رقمي. p-1 = 4px، p-2 = 8px، p-4 = 16px، p-8 = 32px. القاعدة: الرقم × 4 = عدد الـ pixels.

04

الألوان والخلفيات

Color Palette + Gradients

نظام الألوان في Tailwind

Tailwind عنده Palette جاهز من 22 لون × 11 درجة (100 لـ 950). الاسم: اسم-اللون-درجة

مثال: text-blue-500، bg-red-700، border-green-300

HTML — ألوان وخلفيات
<!-- لون النص -->
<p class="text-blue-500">أزرق</p>
<p class="text-gray-400">رمادي فاتح</p>
<p class="text-emerald-600">أخضر</p>

<!-- لون الخلفية -->
<div class="bg-slate-900">خلفية داكنة</div>
<div class="bg-yellow-400">أصفر</div>

<!-- Gradient -->
<div class="bg-gradient-to-r from-purple-500 to-pink-500 p-8 text-white">
  Gradient رائع!
</div>

<!-- Gradient الـ diagonal -->
<div class="bg-gradient-to-br from-cyan-400 via-blue-500 to-purple-600">
  Gradient بـ 3 ألوان
</div>

<!-- Opacity -->
<div class="bg-blue-500 bg-opacity-50">شبه شفاف</div>
<!-- أو الطريقة الجديدة -->
<div class="bg-blue-500/50">50% opacity</div>
PREVIEW
from-purple to-pink
Gradient 3 ألوان
bg-blue/50

لو محتاج لون مش موجود في الـ palette، استخدم: bg-[#39ff14] — الـ square brackets بيخليك تحط أي قيمة CSS عادية.

05

Typography — النصوص بالتفصيل

Fonts, Sizes, Weights, Spacing
HTML — Typography Classes
<!-- أحجام الخط (text-xs → text-9xl) -->
<p class="text-xs">12px</p>
<p class="text-sm">14px</p>
<p class="text-base">16px (الافتراضي)</p>
<p class="text-lg">18px</p>
<p class="text-xl">20px</p>
<p class="text-2xl">24px</p>
<p class="text-4xl font-bold">عنوان كبير</p>
<p class="text-8xl font-black">HERO</p>

<!-- وزن الخط -->
<p class="font-thin">100</p>     <!-- 100 -->
<p class="font-normal">عادي</p>  <!-- 400 -->
<p class="font-semibold">متوسط</p><!-- 600 -->
<p class="font-bold">سميك</p>    <!-- 700 -->
<p class="font-black">أسمك</p>   <!-- 900 -->

<!-- تنسيق النص -->
<p class="uppercase tracking-widest">PHINEX</p>
<p class="italic line-through">محذوف</p>
<p class="underline decoration-2 decoration-blue-400">بخط تحته</p>
<p class="leading-loose">مسافة بين السطور كبيرة</p>

<!-- Text Gradient -->
<h1 class="text-4xl font-black bg-gradient-to-r from-cyan-400
            to-purple-400 bg-clip-text text-transparent">
  نص ملوّن بـ Gradient!
</h1>

الـ bg-clip-text text-transparent ده magic — بيخليك تعمل Gradient على النص نفسه. استخدمه في الـ headings والـ logos!

06

التباعد والأبعاد — Spacing & Sizing

Padding, Margin, Width, Height

نظام الـ Spacing بالكامل

الـ Spacing System في Tailwind بيشتغل بـ scale من 0 لـ 96. كل رقم = الرقم × 4px.

Classقيمة CSSبالـ px
p-0padding: 00px
p-1padding: 0.25rem4px
p-2padding: 0.5rem8px
p-4padding: 1rem16px
p-6padding: 1.5rem24px
p-8padding: 2rem32px
p-12padding: 3rem48px
p-16padding: 4rem64px
HTML — Spacing Shortcuts
<!-- px = padding horizontal (left + right) -->
<div class="px-8 py-4">padding أفقي وعمودي</div>

<!-- pt, pb, pr, pl = top, bottom, right, left -->
<div class="pt-8 pb-4 pr-6 pl-2">padding منفصل</div>

<!-- mx-auto = margin auto (توسيط أفقي) -->
<div class="max-w-4xl mx-auto px-6">
  Container مركزي
</div>

<!-- Width -->
<div class="w-1/2">50%</div>
<div class="w-full">100%</div>
<div class="w-screen">100vw</div>
<div class="w-48">192px</div>
<div class="min-w-0 max-w-7xl">min و max</div>

<!-- Height -->
<div class="h-screen">100vh</div>
<div class="h-64">256px</div>
<div class="min-h-screen">min-height: 100vh</div>

<!-- Arbitrary values -->
<div class="w-[350px] h-[200px]">قيم مخصصة</div>
07

Flexbox في Tailwind

ترتيب العناصر بسهولة تامة

ازاي تستخدم Flexbox في Tailwind

الـ Flexbox في Tailwind أسهل بكتير من CSS العادي. كل اللي محتاجه هو إنك تحط flex على الـ parent وبعدين تتحكم في الـ children بـ classes.

HTML — Flexbox الشامل
<!-- ── الاتجاه (flex-direction) ── -->
<div class="flex">أفقي (الافتراضي)</div>
<div class="flex flex-col">عمودي</div>
<div class="flex flex-row-reverse">عكسي</div>

<!-- ── المحاذاة الأفقية (justify-content) ── -->
<div class="flex justify-start">يسار</div>
<div class="flex justify-center">وسط</div>
<div class="flex justify-end">يمين</div>
<div class="flex justify-between">مسافات بالطرفين</div>
<div class="flex justify-around">مسافات متساوية</div>

<!-- ── المحاذاة العمودية (align-items) ── -->
<div class="flex items-start">أعلى</div>
<div class="flex items-center">وسط</div>
<div class="flex items-end">أسفل</div>

<!-- ── التوسيط الكامل ── -->
<div class="flex items-center justify-center h-screen">
  وسط الشاشة تماماً! 🎯
</div>

<!-- ── Gap (المسافة بين العناصر) ── -->
<div class="flex gap-4">
  <div>عنصر 1</div>
  <div>عنصر 2</div>
  <div>عنصر 3</div>
</div>

<!-- ── Flex children classes ── -->
<div class="flex">
  <div class="flex-1">بياخد باقي المساحة</div>
  <div class="flex-none w-32">ثابت 128px</div>
  <div class="self-end">هو بيتحاذى لوحده تحت</div>
</div>

<!-- ── Flex Wrap ── -->
<div class="flex flex-wrap gap-3">
  <!-- العناصر هتنزل لسطر جديد لو ضاقت المساحة -->
</div>
08

CSS Grid في Tailwind

شبكات احترافية بكود بسيط
HTML — Grid System
<!-- Grid بـ 3 أعمدة -->
<div class="grid grid-cols-3 gap-6">
  <div>عمود 1</div>
  <div>عمود 2</div>
  <div>عمود 3</div>
</div>

<!-- Grid بأعمدة Responsive -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
  <!-- موبايل: عمود / تابلت: عمودين / لاب: 4 أعمدة -->
</div>

<!-- عنصر بياخد عمودين -->
<div class="grid grid-cols-4 gap-4">
  <div class="col-span-2">بياخد نصف الشبكة</div>
  <div class="col-span-1">ربع</div>
  <div class="col-span-1">ربع</div>
</div>

<!-- Grid auto-fit (زي masonry) -->
<div class="grid grid-cols-[repeat(auto-fill,minmax(250px,1fr))] gap-6">
  <!-- Columns بتتعمل أوتوماتيك حسب المساحة -->
</div>

<!-- Grid Template Areas (Arbitrary) -->
<div class="grid grid-rows-3 grid-cols-3">
  <div class="col-start-1 col-end-3 row-start-1">Header</div>
</div>
09

Responsive Design — التصميم المتجاوب

Mobile-First بـ Breakpoints ذكية

الـ Breakpoints في Tailwind

Tailwind بيشتغل بـ Mobile-First — يعني بتكتب الـ style للموبايل الأول، وبعدين تضيف classes للشاشات الأكبر.

PrefixالشاشةMin Width
(بدون prefix)كل الشاشات0px
sm:Small (موبايل كبير)640px
md:Medium (تابلت)768px
lg:Large (لابتوب)1024px
xl:Extra Large1280px
2xl:2X Large1536px
HTML — Responsive Classes
<!-- نص صغير على الموبايل، كبير على اللاب -->
<h1 class="text-2xl md:text-4xl lg:text-6xl font-bold">
  عنوان Responsive
</h1>

<!-- Grid Responsive -->
<div class="grid
  grid-cols-1
  sm:grid-cols-2
  lg:grid-cols-3
  xl:grid-cols-4
  gap-4">
  <!-- موبايل: 1 عمود → sm: 2 → lg: 3 → xl: 4 -->
</div>

<!-- إخفاء/إظهار حسب الشاشة -->
<div class="hidden md:block">مش بان على الموبايل</div>
<div class="block md:hidden">مش بان على الديسكتوب</div>

<!-- Responsive flex direction -->
<div class="flex flex-col md:flex-row gap-6">
  <!-- موبايل: عمودي، تابلت: أفقي -->
</div>

<!-- Responsive padding/margin -->
<div class="p-4 md:p-8 lg:p-16">
  Padding بيكبر مع الشاشة
</div>

مهم جداً: Tailwind بيشتغل Mobile-First — يعني md:text-4xl معناها "من الـ 768px فأكبر". مش "على الـ tablet بس".

10

Borders, Shadows & Effects

الحدود والظلال والتأثيرات البصرية
HTML — Borders & Shadows
<!-- ── Borders ── -->
<div class="border">حد عادي 1px</div>
<div class="border-2 border-blue-500">حد أزرق 2px</div>
<div class="border-t-4 border-green-400">حد فوق بس</div>
<div class="border border-dashed border-gray-400">منقط</div>

<!-- Rounded Corners -->
<div class="rounded">4px</div>
<div class="rounded-lg">8px</div>
<div class="rounded-2xl">16px</div>
<div class="rounded-full">دائرة / capsule</div>
<div class="rounded-tl-3xl rounded-br-3xl">زوايا محددة</div>

<!-- ── Shadows ── -->
<div class="shadow-sm">ظل صغير</div>
<div class="shadow-md">ظل متوسط</div>
<div class="shadow-xl">ظل كبير</div>
<div class="shadow-2xl">ظل ضخم</div>

<!-- Colored Shadow (Tailwind v3+) -->
<div class="shadow-lg shadow-blue-500/50">ظل أزرق</div>
<div class="shadow-xl shadow-purple-500/40">ظل بنفسجي</div>

<!-- Ring (border بـ box-shadow) -->
<button class="ring-2 ring-blue-500 ring-offset-2 focus:ring-4">
  Ring Effect
</button>

<!-- Blur Effects -->
<div class="blur-sm">blur صغير</div>
<div class="backdrop-blur-lg bg-white/10">Glass Effect!</div>

الـ backdrop-blur-lg bg-white/10 ده سر الـ Glassmorphism effect — خلفية زجاجية شفافة زي iOS. استخدمها في الـ cards والـ modals!

11

Transitions & Animations

اعمل الموقع يتحرك بـ Tailwind

Transitions — التغيير السلس

الـ Transition بيعمل التغيير في الـ CSS بيحصل بشكل سلس بدل ما يبقى مفاجئ. لازم يبقى عندك:

  • 1. الـ transition class — زي transition أو transition-all
  • 2. المدة — زي duration-300 (300 milliseconds)
  • 3. الـ easing — زي ease-in-out
  • 4. الـ hover state — اللي هيتغير
HTML — Transitions
<!-- زر بـ hover animation -->
<button class="
  bg-blue-500 text-white px-6 py-3 rounded-xl
  transition-all duration-300 ease-in-out
  hover:bg-blue-700 hover:scale-105 hover:shadow-lg
  active:scale-95
">اضغطني</button>

<!-- بطاقة بـ hover كامل -->
<div class="
  bg-gray-800 rounded-2xl p-6
  transition-all duration-500 ease-out
  hover:-translate-y-3
  hover:shadow-2xl hover:shadow-blue-500/30
  cursor-pointer group
">
  <h3 class="text-white font-bold
    transition-colors duration-300
    group-hover:text-blue-400">
    العنوان بيتلوّن على hover الـ parent!
  </h3>
</div>

<!-- Transition على property محددة -->
<div class="transition-colors duration-200">لون بس</div>
<div class="transition-transform duration-500">حركة بس</div>
<div class="transition-opacity duration-700">opacity بس</div>

الـ Animations الجاهزة في Tailwind

Tailwind عنده animations جاهزة تقدر تستخدمهم فوراً:

Classالتأثير
animate-spinدوران مستمر (Loading spinners)
animate-pingنبضة (Notification badge)
animate-pulseخفوت وظهور (Skeleton loading)
animate-bounceقفز لأسفل ولأعلى
HTML — Built-in Animations
<!-- Loading Spinner -->
<div class="w-8 h-8 border-4 border-blue-500 border-t-transparent
            rounded-full animate-spin"></div>

<!-- Notification Ping -->
<span class="relative">
  <span class="absolute -top-1 -right-1 w-3 h-3 bg-red-500 rounded-full animate-ping"></span>
  🔔
</span>

<!-- Skeleton Loading -->
<div class="space-y-3">
  <div class="h-4 bg-gray-700 rounded animate-pulse"></div>
  <div class="h-4 bg-gray-700 rounded animate-pulse w-5/6"></div>
  <div class="h-4 bg-gray-700 rounded animate-pulse w-3/4"></div>
</div>

<!-- Custom Animation بـ tailwind.config -->
<!-- في tailwind.config.js: -->
// extend: {
//   keyframes: {
//     wiggle: {
//       '0%, 100%': { transform: 'rotate(-3deg)' },
//       '50%': { transform: 'rotate(3deg)' },
//     },
//     fadeIn: {
//       '0%': { opacity: '0', transform: 'translateY(20px)' },
//       '100%': { opacity: '1', transform: 'translateY(0)' },
//     }
//   },
//   animation: {
//     wiggle: 'wiggle 1s ease-in-out infinite',
//     fadeIn: 'fadeIn 0.5s ease-out both',
//   }
// }
<div class="animate-wiggle">يتمايل</div>
<div class="animate-fadeIn">يظهر بسلاسة</div>
12

🌟 3D Transforms — الأنيميشن ثلاثي الأبعاد

أقوى درس في الدورة — Perspective, rotateX/Y, transform-style

ازاي بيشتغل الـ 3D في المتصفح؟

قبل ما نتكلم عن Tailwind، لازم تفهم الفكرة الأساسية. المتصفح بيشتغل على محورين (X أفقي وY عمودي). علشان تعمل تأثير ثلاثي الأبعاد محتاج 3 حاجات:

  • 1. Perspective — زي "بُعد العين" عن الشاشة. كلما كانت أصغر كلما كان التأثير أوضح.
  • 2. rotateX / rotateY / rotateZ — الدوران على المحاور
  • 3. transform-style: preserve-3d — علشان الـ children تتأثر بالـ 3D
CSS المفاهيم الأساسية
/* perspective: كلما قل الرقم كلما زاد التأثير */
perspective: 1000px;    /* بعيد - تأثير خفيف */
perspective: 400px;     /* قريب - تأثير قوي */

/* دوران على محور X (أعلى/أسفل) */
transform: rotateX(45deg);

/* دوران على محور Y (يمين/شمال) */
transform: rotateY(45deg);

/* preserve-3d = خلي الـ children تحافظ على الـ 3D */
transform-style: preserve-3d;

/* backface-visibility = إخفاء الوجه الخلفي */
backface-visibility: hidden;

Card Flip Effect — أشهر تأثير 3D

أشهر استخدام للـ 3D هو الـ Card Flip — بطاقة بوجهين تتقلب عند الـ hover. الفكرة:

  • الـ wrapper يكون له perspective
  • الـ card نفسها يكون ليها transform-style: preserve-3d وـ transition
  • الـ back side يكون مقلوب بـ rotateY(180deg) من الأول
  • عند الـ hover، الـ card تتقلب rotateY(180deg)
HTML + CSS — Card Flip 3D
<!-- CDN لازم يكون في الـ head -->
<script src="https://cdn.tailwindcss.com"></script>
<style>
  .flip-card { perspective: 1000px; }
  .flip-inner {
    transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
    transform-style: preserve-3d;
  }
  .flip-card:hover .flip-inner {
    transform: rotateY(180deg);
  }
  .flip-front, .flip-back {
    backface-visibility: hidden;
    position: absolute;
    inset: 0;
  }
  .flip-back {
    transform: rotateY(180deg);
  }
</style>

<div class="flip-card w-64 h-64 cursor-pointer">
  <div class="flip-inner relative w-full h-full">

    <!-- الوجه الأمامي -->
    <div class="flip-front bg-gradient-to-br from-blue-500 to-purple-600
                  rounded-2xl flex items-center justify-center text-white text-2xl">
      🎴 الأمام
    </div>

    <!-- الوجه الخلفي -->
    <div class="flip-back bg-gradient-to-br from-orange-400 to-pink-600
                  rounded-2xl flex items-center justify-center text-white text-2xl">
      ✨ الخلف
    </div>

  </div>
</div>

Cube 3D — صندوق ثلاثي الأبعاد كامل

مكعب كامل بـ 6 وجوه في CSS — ده اللي بيثبت إنك وصلت مستوى expert في الـ CSS 3D:

HTML + CSS — 3D Rotating Cube
<style>
  .scene {
    width: 120px;
    height: 120px;
    perspective: 400px;
  }
  .cube {
    width: 100%; height: 100%;
    position: relative;
    transform-style: preserve-3d;
    animation: rotateCube 8s linear infinite;
  }
  @keyframes rotateCube {
    from { transform: rotateX(0) rotateY(0); }
    to   { transform: rotateX(360deg) rotateY(360deg); }
  }
  .cube-face {
    position: absolute;
    width: 120px; height: 120px;
    border: 2px solid rgba(56,189,248,0.5);
    background: rgba(56,189,248,0.1);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 2rem;
  }
  .front  { transform: translateZ(60px); }
  .back   { transform: rotateY(180deg) translateZ(60px); }
  .right  { transform: rotateY(90deg) translateZ(60px); }
  .left   { transform: rotateY(-90deg) translateZ(60px); }
  .top    { transform: rotateX(90deg) translateZ(60px); }
  .bottom { transform: rotateX(-90deg) translateZ(60px); }
</style>

<div class="scene">
  <div class="cube">
    <div class="cube-face front">🌐</div>
    <div class="cube-face back"></div>
    <div class="cube-face right">🎨</div>
    <div class="cube-face left">🔥</div>
    <div class="cube-face top"></div>
    <div class="cube-face bottom">💎</div>
  </div>
</div>
HTML — Tilt/Parallax على hover
<!-- بطاقة بتتميل مع الماوس بـ JavaScript -->
<div id="tilt-card" class="
  w-72 h-48 bg-gradient-to-br from-blue-600 to-purple-700
  rounded-2xl flex items-center justify-center text-white text-2xl
  cursor-pointer select-none"
  style="transform-style:preserve-3d;perspective:800px;transition:transform 0.1s"
>
  🎴 حرّك الماوس فوقي!
</div>

<script>
  const card = document.getElementById('tilt-card');
  card.addEventListener('mousemove', (e) => {
    const rect = card.getBoundingClientRect();
    // نحسب موقع الماوس بالنسبة لمركز البطاقة
    const x = (e.clientX - rect.left - rect.width / 2) / (rect.width / 2);
    const y = (e.clientY - rect.top - rect.height / 2) / (rect.height / 2);
    // نطبق الـ rotation
    card.style.transform = `
      perspective(800px)
      rotateY(${x * 20}deg)
      rotateX(${-y * 20}deg)
      scale(1.05)
    `;
  });
  card.addEventListener('mouseleave', () => {
    card.style.transform = 'perspective(800px) rotateY(0) rotateX(0) scale(1)';
  });
</script>

مفاهيم متقدمة: الـ 3D في CSS بيعتمد على إن المتصفح يعمل "Camera" وهمية. الـ perspective هي مسافة الـ Camera من العنصر. الـ transform-style: preserve-3d بيخلي الـ children شايفين نفس الـ Camera. بدونه كل عنصر بيتعامل زي إنه flat.

13

Dark Mode

الوضع المظلم بـ كلاس واحدة
HTML — Dark Mode
<!-- في tailwind.config -->
// darkMode: 'class'  // أو 'media'

<!-- استخدام Dark Mode -->
<div class="bg-white dark:bg-gray-900">
  <p class="text-gray-800 dark:text-gray-100">نص</p>
  <button class="bg-blue-500 dark:bg-blue-800">زر</button>
</div>

<!-- Toggle Dark Mode بـ JavaScript -->
<button onclick="document.documentElement.classList.toggle('dark')">
  تبديل الوضع المظلم
</button>
14

Custom Configuration — tailwind.config.js

اعمل Design System خاص بيك
JS — tailwind.config.js كامل
/** @type {import('tailwindcss').Config} */ module.exports = { content: ["./src/**/*.{html,js,jsx,ts,tsx}"], darkMode: 'class', theme: { extend: { // ألوان مخصصة colors: { 'neon-green': '#39ff14', 'void': '#050508', 'phinex': { 100: '#cdffa3', 500: '#39ff14', 900: '#1a7a00', } }, // خطوط مخصصة fontFamily: { 'display': ['Orbitron', 'sans-serif'], 'arabic': ['Cairo', 'sans-serif'], 'code': ['Fira Code', 'monospace'], }, // حجم شاشات مخصص screens: { 'xs': '475px', '3xl': '1920px', }, // animations مخصصة keyframes: { 'fade-in-up': { '0%': { opacity: '0', transform: 'translateY(30px)' }, '100%': { opacity: '1', transform: 'translateY(0)' }, }, 'glow-pulse': { '0%, 100%': { boxShadow: '0 0 5px #39ff14' }, '50%': { boxShadow: '0 0 30px #39ff14, 0 0 60px #39ff14' }, }, 'float': { '0%, 100%': { transform: 'translateY(0)' }, '50%': { transform: 'translateY(-20px)' }, } }, animation: { 'fade-in-up': 'fade-in-up 0.6s ease-out both', 'glow-pulse': 'glow-pulse 2s ease-in-out infinite', 'float': 'float 3s ease-in-out infinite', }, // Box Shadows مخصصة boxShadow: { 'neon': '0 0 20px rgba(57,255,20,0.5)', 'neon-lg': '0 0 40px rgba(57,255,20,0.7)', 'glass': '0 8px 32px 0 rgba(31,38,135,0.37)', } }, }, plugins: [], }

بعد ما تضيف الـ animations في الـ config، تقدر تستخدمها مباشرة: class="animate-float animate-glow-pulse". ده بيعمل تأثير عنصر يطفو وبيضوي.

15

Plugins & JIT Mode

توسيع قدرات Tailwind للـ ∞

الـ JIT (Just-In-Time) Mode

الـ JIT هو المحرك اللي بيولد الـ CSS بشكل فوري وأوتوماتيك. بدل ما Tailwind يولد كل الـ classes ممكنة (ملايين)، بيولد بس اللي بتستخدمه فعلاً. النتيجة:

  • ✅ ملف CSS أصغر بكتير
  • ✅ Arbitrary values بدون أي config: w-[337px]، bg-[#ff6b35]
  • ✅ تقدر تستخدم أي قيمة CSS مباشرة
HTML — JIT Arbitrary Values
<!-- أي قيمة بين [] بتشتغل مباشرة! -->
<div class="w-[337px]">عرض مخصص</div>
<div class="bg-[#ff6b35]">لون مخصص</div>
<div class="top-[117px]">موضع محدد</div>
<div class="grid-cols-[1fr_2fr_1fr]">Grid مخصص</div>
<div class="[clip-path:polygon(0_0,100%_0,85%_100%,0_100%)]">
  أي CSS property!
</div>

<!-- Plugin مثال: Typography plugin -->
// npm install @tailwindcss/typography
<article class="prose prose-lg dark:prose-invert">
  <!-- نص HTML عادي بيتنسق أوتوماتيك بشكل جميل -->
  <h1>مقالة</h1>
  <p>محتوى المقالة هنا...</p>
</article>

<!-- Plugin مثال: Forms plugin -->
// npm install @tailwindcss/forms
<input type="text" class="form-input"/>
<select class="form-select"></select>

🎉 وصلت نهاية الدروس! دلوقتي اتفرج على الورش العملية علشان تطبق اللي اتعلمته على مشاريع حقيقية.

الورش العملية المراجعة اختبر نفسك