5382 words
27 minutes
How To Build Your Own Css Framework

زهقت من استخدام نفس مكتبات CSS اللي كل الناس بتستخدمها؟ عايز تتحكم أكتر في تصميم مشاريعك؟ في المقال ده، هنتعلم إزاي تبني فريمورك CSS بتاعك من الصفر، مظبوط على مقاسك ومناسب لاحتياجاتك.

1. التخطيط والتحضير: حط الأساس صح#

1.1 حدد أهداف المكتبة وفلسفتها#

قبل ما تكتب أي سطر كود، لازم يكون عندك فكرة واضحة. جاوب على الأسئلة دي:

السؤالالاختيارات المتاحةتأثير اختيارك
عايز مكتبة قد إيه؟
  • مكتبة كبيرة وشاملة (زي Bootstrap)
  • مكتبة متوسطة (زي Bulma)
  • مكتبة خفيفة (زي Skeleton)
هيحدد عدد المكونات وتعقيدها
هتمشي على أي نظام تصميم؟
  • Material Design
  • Flat Design
  • Neumorphism
  • أسلوب خاص بيك
هيحدد الشكل العام والتفاعلات
مين اللي هيستخدم المكتبة دي؟
  • مبرمجين
  • مصممين
  • مبتدئين
  • محترفين
هيأثر على طريقة الشرح وسهولة الاستخدام
إيه أهم حاجة عندك؟
  • سرعة التحميل
  • سهولة التعديل
  • دعم المتصفحات القديمة
  • تجربة مستخدم حلوة
هيأثر على القرارات التقنية

نصيحة عملية: اكتب ورقة صغيرة (صفحة أو اتنين) تحط فيها أهدافك ورؤيتك. هتلاقيها مفيدة جداً لما تقف قدام قرارات صعبة وانت بتطور.

1.2 دراسة المكتبات الموجودة: اتعلم من الأحسن#

متبتديش من الصفر خالص. استفاد من تجارب اللي قبلك:

مقارنة بين أشهر مكتبات CSS:#

المكتبةالحجمالمنهجيةنقاط القوةنقاط الضعف
Bootstrap144KB (مضغوط)Component-basedنظام شبكة جامد، documentation ممتازتقيلة، المواقع بتبقى شبه بعض
Tailwind27KB (مضغوط)Utility-firstمرونة عالية، سهل تظبطهبتاخد وقت عشان تتعلمه، HTML بيبقى طويل
Bulma88KB (مضغوط)Modularسهلة التعلم، شكلها حلومكوناتها أقل من Bootstrap
Foundation119KB (مضغوط)Component-basedمتقدمة تقنيًا، مرنةمعقدة، documentation مش أوي

اللي لازم تدرسه في كل مكتبة:#

  1. هيكل الملفات: شوف بيرتبوا الكود إزاي (مثال: هيكل Bootstrap)
  2. أسلوب البرمجة: بيكتبوا CSS/SCSS إزاي؟ إيه القواعد اللي ماشيين عليها؟
  3. API التخصيص: بيسمحوا للمستخدمين يعدلوا في المكتبة إزاي؟
  4. الـdocumentation: بيشرحوا استخدام المكتبة بطريقة واضحة إزاي؟

تمرين عملي: نزل الكود بتاع 2-3 مكتبات وحللهم. دور على الحاجات المشتركة والحلول الذكية.

1.3 اختيار منهجية CSS: النظام هو اللي بيعمل الفرق#

اختيار طريقة تنظيم كويسة هيوفرلك ساعات من الصداع بعدين:

BEM (Block Element Modifier)#

/* Block: حاجة مستقلة */
.card { }

/* Element: جزء من Block مينفعش تستخدمه لوحده */
.card__title { }
.card__image { }

/* Modifier: حاجة بتغير الشكل أو السلوك */
.card--featured { }
.card--dark { }
مميزات BEM:#
  • قواعد تسمية واضحة وثابتة
  • سهل تفهم العلاقات بين العناصر
  • بيمنع تداخل الكلاسات وتعارض الـstyles

SMACSS (Scalable and Modular Architecture for CSS)#

بيقسم CSS لخمس حاجات:

  1. Base: القواعد الأساسية (reset، typography)
  2. Layout: تقسيم الصفحة لأجزاء
  3. Module: المكونات اللي ممكن تستخدمها كذا مرة
  4. State: حالات العناصر (active, hover)
  5. Theme: قواعد الشكل والألوان

OOCSS (Object Oriented CSS)#

بيعتمد على فكرتين أساسيين:

  1. فصل الشكل عن المضمون
/* المضمون */
.btn { display: inline-block; padding: 0.5em 1em; }

/* الشكل */
.btn-primary { background: blue; color: white; }
  1. فصل الـcontainer عن المحتوى
/* ممكن تستخدم نفس ستايل المحتوى في حاويات مختلفة */
.header-title, .sidebar-title { font-size: 2em; font-weight: bold; }

Atomic CSS#

بيستخدم كلاسات صغيرة جداً كل واحدة ليها وظيفة واحدة بس:

.m-0 { margin: 0; }
.p-1 { padding: 0.25rem; }
.text-center { text-align: center; }
.flex { display: flex; }

مثال HTML باستخدام Atomic CSS:

<div class="flex p-2 bg-white shadow rounded">
  <img class="w-16 h-16 rounded-full mr-4" src="avatar.jpg">
  <div>
    <h3 class="text-lg font-bold">عنوان البطاقة</h3>
    <p class="text-gray-600">وصف البطاقة</p>
  </div>
</div>

اختبار سريع: أنهي منهجية تناسب مشروعك؟

  • لو بتحب القواعد الواضحة والثابتة: BEM
  • لو بتبني مشروع كبير ومعقد: SMACSS
  • لو عايز تستخدم الكود بكفاءة أكتر: OOCSS
  • لو عايز مرونة كبيرة وتطوير سريع: Atomic CSS

1.4 تحديد استراتيجية التوافق مع البراوزرات#

قبل ما تبدأ، حدد البراوزرات والإصدارات اللي هتدعمها:

  • الدعم الكامل: أحدث إصدارات Chrome، Firefox، Safari، Edge
  • الدعم الجزئي: IE11، إصدارات أقدم من البراوزرات الرئيسية
  • من غير دعم: IE10 وأقدم القرار ده هيأثر على:
  • استخدامك لخصائص CSS الجديدة
  • احتياجك لـ polyfills
  • طريقة اختبارك للكود نصيحة محترفين: استخدم Can I Use عشان تتأكد إن البراوزرات بتدعم الخصائص اللي ناوي تستخدمها.

2. إعداد هيكل المشروع: نظم شغلك من الأول#

2.1 عمل بنية الملفات: كل حاجة في مكانها#

عشان تبقى منظم من البداية، لازم تعمل هيكل ملفات كويس للمكتبة بتاعتك:

css-library/
├── src/                  👈 هنا هتكتب الكود بتاعك
│   ├── base/             👈 الأساسيات
│   │   ├── _reset.scss   👈 عشان تصفر إعدادات البراوزر
│   │   ├── _typography.scss
│   │   ├── _variables.scss
│   │   └── _mixins.scss
│   ├── components/       👈 المكونات الجاهزة
│   │   ├── _buttons.scss
│   │   ├── _cards.scss
│   │   ├── _forms.scss
│   │   └── _navbars.scss
│   ├── layouts/          👈 أنظمة التخطيط
│   │   ├── _grid.scss
│   │   ├── _header.scss
│   │   └── _footer.scss
│   ├── utilities/        👈 كلاسات مساعدة
│   │   ├── _spacing.scss
│   │   ├── _colors.scss
│   │   └── _display.scss
│   └── main.scss         👈 الملف الرئيسي اللي بيجمع كل حاجة
├── dist/                 👈 الملفات النهائية بعد البناء
│   ├── css-library.css
│   └── css-library.min.css
├── docs/                 👈 توثيق المكتبة
├── examples/             👈 أمثلة على استخدام المكتبة
├── package.json
└── README.md

VI Note: الـ underscore (_) قبل اسم ملفات SCSS معناها إنها ملفات جزئية مش هتتحول لملفات CSS مستقلة، دي هتتجمع في الملف الرئيسي بس.

2.2 إعداد SASS: خلي حياتك أسهل#

SASS هيخلي كتابة CSS أسهل بكتير. هتقدر تستخدم متغيرات ودوال وتقسم الكود بطريقة منظمة:

# هنعمل مشروع جديد ونضيف SASS
npm init -y
npm install sass --save-dev

وبعدين نضيف الأوامر دي في ملف package.json :

"scripts": {
  "build": "sass src/main.scss dist/css-library.css --style=compressed",
  "dev": "sass --watch src/main.scss dist/css-library.css"
}

كدة هتقدر تشغل المشروع بأمر بسيط:

# عشان تطور وتشوف التغييرات على طول
npm run dev

# عشان تبني النسخة النهائية
npm run build

2.3 إعداد أدوات البناء: أتمتة الشغل المملل#

عشان متضيعش وقت في الحاجات المتكررة، هنستخدم Gulp عشان يعمل:

  • تجميع كل الملفات في ملف واحد
  • إضافة البادئات للمتصفحات المختلفة (autoprefixer)
  • ضغط الكود وتصغير حجمه
  • تحويل الصور وتصغيرها أول حاجة، نثبت Gulp والإضافات اللي محتاجينها:
npm install --save-dev gulp gulp-sass gulp-autoprefixer gulp-clean-css gulp-rename browser-sync

وبعدين نعمل ملف gulpfile.js بسيط:

const gulp = require('gulp');
const sass = require('gulp-sass')(require('sass'));
const autoprefixer = require('gulp-autoprefixer');
const cleancss = require('gulp-clean-css');
const rename = require('gulp-rename');
const browserSync = require('browser-sync').create();

// بيحول SCSS لـ CSS
gulp.task('styles', function() {
  return gulp.src('src/main.scss')
    .pipe(sass().on('error', sass.logError))
    .pipe(autoprefixer()) // بيضيف البادئات للمتصفحات القديمة
    .pipe(gulp.dest('dist'))
    .pipe(cleancss()) // بيضغط الكود
    .pipe(rename({ suffix: '.min' }))
    .pipe(gulp.dest('dist'))
    .pipe(browserSync.stream()); // بيحدث البراوزر تلقائي
});

// بيراقب التغييرات ويحدث على طول
gulp.task('watch', function() {
  browserSync.init({
    server: {
      baseDir: './'
    }
  });
  
  gulp.watch('src/**/*.scss', gulp.series('styles'));
  gulp.watch('examples/**/*.html').on('change', browserSync.reload);
});

// الأمر الافتراضي
gulp.task('default', gulp.series('styles', 'watch'));

كدة هتقدر تشغل المشروع بأمر واحد بس:

npx gulp

3. بناء الأساسيات: نبدأ نبني بجد#

3.1 عمل ملف الـReset: نبدأ من نقطة نظيفة#

أول حاجة لازم تعملها هي ملف الـreset عشان تتخلص من الإعدادات الافتراضية للبراوزرات وتبدأ من الصفر:

// _reset.scss
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box; // عشان الـwidth والـheight يشملوا الـpadding والـborder
}

html {
  font-size: 16px; // حجم الخط الأساسي
  -webkit-text-size-adjust: 100%; // يمنع تغيير حجم الخط تلقائي في الموبايل
}

body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; // خطوط حلوة متوفرة في كل الأجهزة
  line-height: 1.5; // مسافة بين السطور مناسبة للقراءة
  color: #333; // لون خط مريح للعين
}

img, picture, video, canvas, svg {
  display: block;
  max-width: 100%; // الصور متطلعش برا الحاوية بتاعتها
  height: auto; // تحافظ على النسبة الأصلية
}

button, input, select, textarea {
  font: inherit; // تورث خصائص الخط من الأب
  color: inherit; // تورث اللون من الأب
  outline: none; // شيل الحدود اللي بتظهر لما تدوس
}

a {
  text-decoration: none; // شيل الخط اللي تحت اللينكات
  color: inherit; // تورث اللون من الأب
}

ul, ol {
  list-style: none; // شيل النقط والأرقام من القوائم
}

VI Note : ممكن تستخدم مكتبات جاهزة زي Normalize.css أو modern-normalize بدل ما تكتب الـreset من الصفر.

3.2 تحديد المتغيرات: اللي هيوفرلك وقت كتير بعدين#

المتغيرات هي أساس أي مكتبة CSS محترمة. هتساعدك تحافظ على الشكل متناسق وتعدل بسهولة:

// _variables.scss

// الألوان الأساسية 🎨
$primary: #3f51b5; // أزرق غامق
$secondary: #ff4081; // وردي فاتح
$success: #4caf50; // أخضر
$danger: #f44336; // أحمر
$warning: #ff9800; // برتقالي
$info: #2196f3; // أزرق فاتح
$light: #f5f5f5; // رمادي فاتح
$dark: #212121; // رمادي غامق

// درجات الألوان (عشان تستخدمها في الـhover والـactive)
$primary-light: lighten($primary, 15%);
$primary-dark: darken($primary, 15%);
$secondary-light: lighten($secondary, 15%);
$secondary-dark: darken($secondary, 15%);

// ألوان النص
$text-dark: #212121;
$text-medium: #666666;
$text-light: #9e9e9e;
$text-white: #ffffff;

// أحجام الخطوط 📏
$font-size-base: 1rem; // 16px
$font-size-xs: $font-size-base * 0.75; // 12px
$font-size-sm: $font-size-base * 0.875; // 14px
$font-size-lg: $font-size-base * 1.25; // 20px
$font-size-xl: $font-size-base * 1.5; // 24px
$font-size-xxl: $font-size-base * 2; // 32px
$font-size-xxxl: $font-size-base * 3; // 48px

// المسافات (للـmargin والـpadding) 📐
$spacing-0: 0;
$spacing-1: 0.25rem; // 4px
$spacing-2: 0.5rem; // 8px
$spacing-3: 1rem; // 16px
$spacing-4: 1.5rem; // 24px
$spacing-5: 2rem; // 32px
$spacing-6: 3rem; // 48px
$spacing-7: 4rem; // 64px
$spacing-8: 6rem; // 96px

// نقاط الكسر (للـresponsive) 📱
$breakpoint-xs: 0;
$breakpoint-sm: 576px; // موبايل كبير
$breakpoint-md: 768px; // تابلت
$breakpoint-lg: 992px; // لابتوب
$breakpoint-xl: 1200px; // شاشة كبيرة
$breakpoint-xxl: 1400px; // شاشة كبيرة جداً

// الحدود 🔲
$border-radius-sm: 0.125rem; // 2px
$border-radius: 0.25rem; // 4px
$border-radius-lg: 0.5rem; // 8px
$border-radius-xl: 1rem; // 16px
$border-radius-pill: 50rem; // شكل حباية
$border-radius-circle: 50%; // دائرة

$border-width: 1px;
$border-width-lg: 2px;
$border-color: #e0e0e0;

// الظلال 🌑
$shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
$shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
$shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
$shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);

// الطبقات (z-index) 📚
$z-index-dropdown: 1000;
$z-index-sticky: 1020;
$z-index-fixed: 1030;
$z-index-modal-backdrop: 1040;
$z-index-modal: 1050;
$z-index-popover: 1060;
$z-index-tooltip: 1070;

// التحولات (transitions) ⏱️
$transition-base: all 0.2s ease-in-out;
$transition-slow: all 0.3s ease-in-out;
$transition-fast: all 0.1s ease-in-out;

3.3 عمل Mixins وFunctions: اختصارات هتوفرلك كود كتير#

الـmixins والـfunctions هتساعدك تكتب كود أقل وتستخدم نفس الأنماط في أماكن مختلفة:

// _mixins.scss

// Mixins للـmedia queries (للـresponsive) 📱
@mixin xs-only {
  @media (max-width: #{$breakpoint-sm - 1}) { @content; }
}

@mixin sm-up {
  @media (min-width: $breakpoint-sm) { @content; }
}

@mixin md-up {
  @media (min-width: $breakpoint-md) { @content; }
}

@mixin lg-up {
  @media (min-width: $breakpoint-lg) { @content; }
}

@mixin xl-up {
  @media (min-width: $breakpoint-xl) { @content; }
}

// Mixins للـflexbox (أسهل من كتابة كل الخصائص كل مرة) 💪
@mixin flex($direction: row, $justify: flex-start, $align: stretch, $wrap: nowrap) {
  display: flex;
  flex-direction: $direction;
  justify-content: $justify;
  align-items: $align;
  flex-wrap: $wrap;
}

@mixin flex-center {
  display: flex;
  align-items: center;
  justify-content: center;
}

@mixin flex-between {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

@mixin flex-column {
  display: flex;
  flex-direction: column;
}

// Mixins للـposition (عشان تظبط موضع العناصر بسهولة) 📍
@mixin absolute-center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

@mixin absolute-fill {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
}

// Mixins للـtypography (عشان تظبط شكل النصوص) 📝
@mixin truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@mixin multi-line-truncate($lines: 2) {
  display: -webkit-box;
  -webkit-line-clamp: $lines;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

// Functions للألوان (عشان تعدل الألوان بسهولة) 🎨
@function tint($color, $percentage) {
  @return mix(white, $color, $percentage);
}

@function shade($color, $percentage) {
  @return mix(black, $color, $percentage);
}

// Mixin للـbuttons (عشان تعمل أزرار بألوان مختلفة بسهولة) 🔘
@mixin button-variant($bg-color, $text-color: white) {
  background-color: $bg-color;
  color: $text-color;
  
  &:hover, &:focus {
    background-color: darken($bg-color, 7.5%);
  }
  
  &:active {
    background-color: darken($bg-color, 10%);
  }
}

// Mixin للـgradients (عشان تعمل تدرجات لونية بسهولة) 
@mixin gradient($start-color, $end-color, $direction: to right) {
  background-image: linear-gradient($direction, $start-color, $end-color);
}

نصيحة للمحترفين : اعمل mixins للحاجات اللي بتكررها كتير، بس متبالغش عشان الكود ميبقاش معقد.

3.4 ملف الـTypography: عشان النصوص تبقى شكلها حلو#

النصوص هي جزء أساسي من أي موقع، فلازم تهتم بيها:

// _typography.scss
body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
  font-size: $font-size-base;
  line-height: 1.5;
  color: $text-dark;
}

// العناوين
h1, .h1 {
  font-size: $font-size-xxxl;
  font-weight: 700;
  line-height: 1.2;
  margin-bottom: $spacing-4;
}

h2, .h2 {
  font-size: $font-size-xxl;
  font-weight: 700;
  line-height: 1.3;
  margin-bottom: $spacing-3;
}

h3, .h3 {
  font-size: $font-size-xl;
  font-weight: 600;
  line-height: 1.4;
  margin-bottom: $spacing-3;
}

h4, .h4 {
  font-size: $font-size-lg;
  font-weight: 600;
  line-height: 1.4;
  margin-bottom: $spacing-2;
}

h5, .h5 {
  font-size: $font-size-base;
  font-weight: 600;
  line-height: 1.5;
  margin-bottom: $spacing-2;
}

h6, .h6 {
  font-size: $font-size-sm;
  font-weight: 600;
  line-height: 1.5;
  margin-bottom: $spacing-2;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

// الفقرات
p {
  margin-bottom: $spacing-3;
  
  &:last-child {
    margin-bottom: 0;
  }
}

// اللينكات
a {
  color: $primary;
  text-decoration: none;
  transition: $transition-base;
  
  &:hover, &:focus {
    color: $primary-dark;
    text-decoration: underline;
  }
}

// كلاسات مساعدة للنصوص
.text-xs { font-size: $font-size-xs; }
.text-sm { font-size: $font-size-sm; }
.text-base { font-size: $font-size-base; }
.text-lg { font-size: $font-size-lg; }
.text-xl { font-size: $font-size-xl; }

.text-center { text-align: center; }
.text-right { text-align: right; }
.text-left { text-align: left; }

.text-bold { font-weight: 700; }
.text-semibold { font-weight: 600; }
.text-normal { font-weight: 400; }
.text-light { font-weight: 300; }

.text-primary { color: $primary; }
.text-secondary { color: $secondary; }
.text-success { color: $success; }
.text-danger { color: $danger; }
.text-warning { color: $warning; }
.text-info { color: $info; }
.text-dark { color: $text-dark; }
.text-medium { color: $text-medium; }
.text-muted { color: $text-light; }
.text-white { color: $text-white;

4. بناء نظام الـGrid: العمود الفقري لأي موقع 🏗️#

4.1 تصميم grid متجاوبة: عشان موقعك يبقى شكله حلو على كل الشاشات#

الـGrid System هو أساس أي مكتبة CSS محترمة. هنعمل نظام grid مرن باستخدام Flexbox (اللي هو أحدث وأسهل من الطرق القديمة):

// _grid.scss - نظام الشبكة بتاعنا

// الـcontainer: بيحدد عرض المحتوى في الصفحة
.container {
  width: 100%;
  padding-right: $spacing-3;
  padding-left: $spacing-3;
  margin-right: auto; // بيخلي المحتوى في النص
  margin-left: auto;
  
  // بنحدد عرض مختلف لكل مقاس شاشة
  @include sm-up {
    max-width: 540px; // موبايل كبير
  }
  
  @include md-up {
    max-width: 720px; // تابلت
  }
  
  @include lg-up {
    max-width: 960px; // لابتوب
  }
  
  @include xl-up {
    max-width: 1140px; // شاشة كبيرة
  }
}

// الـcontainer-fluid: بياخد عرض الشاشة كلها
.container-fluid {
  width: 100%;
  padding-right: $spacing-3;
  padding-left: $spacing-3;
  margin-right: auto;
  margin-left: auto;
}

// الـrow: بيقسم الصفحة لصفوف
.row {
  display: flex; // بنستخدم flexbox
  flex-wrap: wrap; // بيلف العناصر لو مفيش مكان
  margin-right: -$spacing-2; // بيعوض الـpadding بتاع الأعمدة
  margin-left: -$spacing-2;
}

// الأعمدة العادية (للموبايل)
@for $i from 1 through 12 {
  .col-#{$i} {
    flex: 0 0 percentage($i / 12); // مثلاً col-6 هتاخد 50% من العرض
    max-width: percentage($i / 12);
    padding-right: $spacing-2;
    padding-left: $spacing-2;
  }
}

// الأعمدة المتجاوبة (للشاشات المختلفة)
// يعني col-md-6 هتاخد 50% من العرض بس على الشاشات المتوسطة وأكبر
@each $size, $breakpoint in (
  sm: $breakpoint-sm,
  md: $breakpoint-md,
  lg: $breakpoint-lg,
  xl: $breakpoint-xl
) {
  @media (min-width: $breakpoint) {
    @for $i from 1 through 12 {
      .col-#{$size}-#{$i} {
        flex: 0 0 percentage($i / 12);
        max-width: percentage($i / 12);
        padding-right: $spacing-2;
        padding-left: $spacing-2;
      }
    }
  }
}

// كلاسات للتحكم في الأعمدة
.no-gutters {
  margin-right: 0;
  margin-left: 0;
  
  > .col,
  > [class*="col-"] {
    padding-right: 0;
    padding-left: 0;
  }
}

VI Note لو عايز تفهم الـGrid بتاعك، ارسم مخطط بسيط على ورقة وقسمها لـ12 عمود، وشوف إزاي الأعمدة بتتجمع مع بعض.

4.2 مثال عملي: إزاي تستخدم الـGrid#

خلينا نشوف مثال بسيط لاستخدام نظام الـGrid:

<div class="container">
  <!-- صف فيه 2 عمود متساويين -->
  <div class="row">
    <div class="col-md-6">
      <h2>العمود الأول</h2>
      <p>دا بياخد نص الشاشة على التابلت وأكبر، وبياخد الشاشة كلها على الموبايل</p>
    </div>
    <div class="col-md-6">
      <h2>العمود التاني</h2>
      <p>دا كمان بياخد نص الشاشة على التابلت وأكبر، وبياخد الشاشة كلها على الموبايل</p>
    </div>
  </div>
  
  <!-- صف فيه 3 أعمدة مش متساوية -->
  <div class="row">
    <div class="col-lg-3 col-md-6">
      <!-- 25% على اللابتوب، 50% على التابلت، 100% على الموبايل -->
      <div class="card">محتوى 1</div>
    </div>
    <div class="col-lg-6 col-md-6">
      <!-- 50% على اللابتوب، 50% على التابلت، 100% على الموبايل -->
      <div class="card">محتوى 2</div>
    </div>
    <div class="col-lg-3 col-md-12">
      <!-- 25% على اللابتوب، 100% على التابلت والموبايل -->
      <div class="card">محتوى 3</div>
    </div>
  </div>
</div>

4.3 كلاسات مساعدة للتخطيط: عشان تظبط شكل العناصر بسهولة#

دي كلاسات هتساعدك تتحكم في شكل وترتيب العناصر بسهولة:

// _layout-utilities.scss
// كلاسات للـdisplay
.d-none { display: none !important; } // بتخفي العنصر
.d-block { display: block !important; } // بيظهر العنصر كـblock
.d-inline { display: inline !important; } // بيظهر العنصر كـinline
.d-inline-block { display: inline-block !important; } // بيظهر العنصر كـinline-block
.d-flex { display: flex !important; } // بيظهر العنصر كـflex container
.d-grid { display: grid !important; } // بيظهر العنصر كـgrid container

// كلاسات للـflexbox
.flex-row { flex-direction: row !important; } // العناصر جنب بعض أفقي
.flex-column { flex-direction: column !important; } // العناصر فوق بعض رأسي
.flex-wrap { flex-wrap: wrap !important; } // العناصر تلف لو مفيش مكان
.flex-nowrap { flex-wrap: nowrap !important; } // العناصر متلفش حتى لو مفيش مكان

// كلاسات لمحاذاة العناصر أفقياً
.justify-content-start { justify-content: flex-start !important; } // من الشمال
.justify-content-center { justify-content: center !important; } // في النص
.justify-content-end { justify-content: flex-end !important; } // من اليمين
.justify-content-between { justify-content: space-between !important; } // موزعة بالتساوي مع مسافات بينها
.justify-content-around { justify-content: space-around !important; } // موزعة بالتساوي مع مسافات متساوية

// كلاسات لمحاذاة العناصر رأسياً
.align-items-start { align-items: flex-start !important; } // من فوق
.align-items-center { align-items: center !important; } // في النص
.align-items-end { align-items: flex-end !important; } // من تحت

نصيحة للمبتدئين : لو لسه بتتعلم Flexbox، اعمل صفحة تجريبية وجرب الكلاسات دي واحدة واحدة عشان تفهم تأثيرها.

4.4 كلاسات متجاوبة: عشان تتحكم في الشكل على كل الشاشات#

كلاسات بتظهر وتخفي العناصر حسب حجم الشاشة:

// كلاسات للإخفاء على أحجام شاشة معينة
@each $size, $breakpoint in (
  sm: $breakpoint-sm,
  md: $breakpoint-md,
  lg: $breakpoint-lg,
  xl: $breakpoint-xl
) {
  // يخفي على الشاشات الأصغر من $size
  .d-#{$size}-none {
    @media (max-width: $breakpoint - 1px) {
      display: none !important;
    }
  }
  
  // يظهر على الشاشات الأكبر من أو تساوي $size
  .d-#{$size}-block {
    @media (min-width: $breakpoint) {
      display: block !important;
    }
  }
  
  // يظهر كـflex على الشاشات الأكبر من أو تساوي $size
  .d-#{$size}-flex {
    @media (min-width: $breakpoint) {
      display: flex !important;
    }
  }
}

مثال على استخدام الكلاسات المتجاوبة:

<!-- هيظهر بس على الموبايل -->
<div class="d-block d-md-none">قائمة للموبايل</div>

<!-- هيظهر بس على الشاشات الكبيرة -->
<div class="d-none d-md-block">قائمة للشاشات الكبيرة</div>

<!-- هيبقى عمودي على الموبايل وأفقي على الشاشات الكبيرة -->
<div class="d-flex flex-column flex-md-row">
  <div>العنصر الأول</div>
  <div>العنصر التاني</div>
</div>

5. بناء المكونات: الحاجات اللي هتستخدمها كل شوية 🧩#

5.1 الأزرار: عشان الناس تضغط عليها 🔘#

الأزرار من أهم حاجة في أي موقع، لازم تبقى شكلها حلو وسهل تعرفها:

// _buttons.scss - ملف الأزرار بتاعنا
.btn {
  display: inline-block;
  font-weight: 500; // خط أتخن شوية عشان يبان
  text-align: center;
  white-space: nowrap; // النص ميتكسرش
  vertical-align: middle;
  user-select: none; // ميتعملوش select
  border: $border-width solid transparent;
  padding: $spacing-2 $spacing-3; // مساحة جوا الزرار
  font-size: $font-size-base;
  line-height: 1.5;
  border-radius: $border-radius;
  transition: $transition-base; // حركة سلسة
  cursor: pointer; // المؤشر يبقى إيد
  
  &:focus, &:hover {
    text-decoration: none;
    outline: 0;
    transform: translateY(-1px); // الزرار يطلع فوق شوية لما تحط الماوس عليه
    box-shadow: $shadow-sm; // يجيله ظل خفيف
  }
  
  &:active {
    transform: translateY(1px); // الزرار ينزل تحت شوية لما تدوس عليه
  }
  
  &:disabled {
    opacity: 0.65;
    cursor: not-allowed;
    pointer-events: none; // ميحصلش أي تأثير لما تدوس عليه
  }
}

// أنواع الأزرار المختلفة
.btn-primary {
  @include button-variant($primary, $text-white);
  // بنستخدم الـmixin اللي عملناه قبل كده
}

.btn-secondary {
  @include button-variant($secondary, $text-white);
}

.btn-success {
  @include button-variant($success, $text-white);
}

.btn-danger {
  @include button-variant($danger, $text-white);
}

.btn-warning {
  @include button-variant($warning, $text-dark);
}

.btn-info {
  @include button-variant($info, $text-white);
}

.btn-light {
  @include button-variant($light, $text-dark);
}

.btn-dark {
  @include button-variant($dark, $text-white);
}

// أزرار بحدود بس (مش ملونة من جوا)
.btn-outline-primary {
  color: $primary;
  border-color: $primary;
  background-color: transparent;
  
  &:hover, &:focus {
    color: white;
    background-color: $primary;
  }
}

// أحجام الأزرار
.btn-sm {
  padding: $spacing-1 $spacing-2;
  font-size: $font-size-sm;
  border-radius: $border-radius-sm;
}

.btn-lg {
  padding: $spacing-3 $spacing-4;
  font-size: $font-size-lg;
  border-radius: $border-radius-lg;
}

// زرار بياخد العرض كله
.btn-block {
  display: block;
  width: 100%;
}

// مجموعة أزرار جنب بعض
.btn-group {
  display: inline-flex;
  
  .btn {
    border-radius: 0;
    
    &:first-child {
      border-top-left-radius: $border-radius;
      border-bottom-left-radius: $border-radius;
    }
    
    &:last-child {
      border-top-right-radius: $border-radius;
      border-bottom-right-radius: $border-radius;
    }
    
    &:not(:last-child) {
      border-right-width: 0;
    }
  }
}

نصيحة للمبتدئين : لما تعمل أزرار، خلي الـpadding أكبر من الجنب عن فوق وتحت، وخلي فيه فرق واضح بين الألوان المختلفة.

5.2 الـForms : عشان تاخد بيانات من المستخدمين 📝#

الفورمات مهمة جداً في أي موقع، لازم تبقى سهلة الاستخدام وواضحة:

// _forms.scss - ملف الفورمات بتاعنا
.form-group {
  margin-bottom: $spacing-4; // مسافة بين كل حقل والتاني
  position: relative; // عشان نحط رسايل الخطأ تحت الحقل
}

.form-label {
  display: block; // كل ليبل في سطر لوحده
  margin-bottom: $spacing-1;
  font-weight: 500; // خط أتخن شوية
  color: $text-dark;
}

.form-control {
  display: block;
  width: 100%;
  padding: $spacing-2 $spacing-3;
  font-size: $font-size-base;
  line-height: 1.5;
  color: $text-dark;
  background-color: white;
  border: $border-width solid $border-color;
  border-radius: $border-radius;
  transition: $transition-base;
  
  &:focus {
    border-color: $primary;
    box-shadow: 0 0 0 3px rgba($primary, 0.15); // هالة زرقا خفيفة
    outline: none;
  }
  
  &::placeholder {
    color: $text-light;
    opacity: 0.7;
  }
  
  &:disabled {
    background-color: $light;
    opacity: 0.8;
    cursor: not-allowed;
  }
}

// حقول بأحجام مختلفة
.form-control-sm {
  padding: $spacing-1 $spacing-2;
  font-size: $font-size-sm;
}

.form-control-lg {
  padding: $spacing-3 $spacing-4;
  font-size: $font-size-lg;
}

// الـcheckbox والـradio
.form-check {
  display: flex;
  align-items: center;
  margin-bottom: $spacing-2;
  cursor: pointer;
  
  input[type="checkbox"],
  input[type="radio"] {
    margin-right: $spacing-2;
    cursor: pointer;
  }
}

// حالات التحقق (validation)
.is-valid {
  border-color: $success !important;
  
  &:focus {
    box-shadow: 0 0 0 3px rgba($success, 0.15);
  }
}

.is-invalid {
  border-color: $danger !important;
  
  &:focus {
    box-shadow: 0 0 0 3px rgba($danger, 0.15);
  }
}

.invalid-feedback {
  display: block;
  color: $danger;
  font-size: $font-size-sm;
  margin-top: $spacing-1;
}

// فورم كامل مع مثال
.form-row {
  display: flex;
  flex-wrap: wrap;
  margin-right: -$spacing-2;
  margin-left: -$spacing-2;
  
  > .form-group {
    padding-right: $spacing-2;
    padding-left: $spacing-2;
    flex: 1;
  }
}

نصيحة عملية : اهتم بحالة الـfocus وخليها واضحة، عشان المستخدم يعرف هو فين في الفورم.

5.3 Cards الكروت (البطاقات): عشان تعرض المحتوى بشكل أنيق 🃏#

الكروت من أكتر المكونات استخداماً في المواقع الحديثة:

// _cards.scss - ملف الكروت بتاعنا
.card {
  position: relative;
  display: flex;
  flex-direction: column;
  background-color: white;
  border-radius: $border-radius;
  border: $border-width solid $border-color;
  overflow: hidden; // عشان الصور متطلعش برا الكارد
  transition: $transition-base;
  box-shadow: $shadow-sm; // ظل خفيف
  
  &:hover {
    transform: translateY(-3px); // الكارد يطلع فوق شوية
    box-shadow: $shadow; // ظل أكبر
  }
  
  // الجزء الرئيسي في الكارد
  &-body {
    padding: $spacing-3;
    flex: 1 1 auto; // يمدد عشان يملا المساحة
  }
  
  // عنوان الكارد
  &-title {
    font-size: $font-size-lg;
    font-weight: 600;
    margin-bottom: $spacing-2;
    color: $text-dark;
  }
  
  // عنوان فرعي
  &-subtitle {
    font-size: $font-size-base;
    color: $text-medium;
    margin-top: -$spacing-1;
    margin-bottom: $spacing-2;
  }
  
  // نص الكارد
  &-text {
    color: $text-medium;
    margin-bottom: $spacing-3;
    
    &:last-child {
      margin-bottom: 0;
    }
  }
  
  // صورة في أول الكارد
  &-img-top {
    width: 100%;
    height: auto;
    object-fit: cover; // الصورة تغطي المساحة كلها
  }
  
  // رأس الكارد
  &-header {
    padding: $spacing-2 $spacing-3;
    background-color: rgba(0, 0, 0, 0.03);
    border-bottom: $border-width solid $border-color;
    font-weight: 500;
  }
  
  // قاع الكارد
  &-footer {
    padding: $spacing-2 $spacing-3;
    background-color: rgba(0, 0, 0, 0.03);
    border-top: $border-width solid $border-color;
    display: flex;
    justify-content: space-between;
    align-items: center;
  }
}

// أنواع مختلفة من الكروت
.card-primary {
  border-top: 3px solid $primary;
}

.card-success {
  border-top: 3px solid $success;
}

.card-danger {
  border-top: 3px solid $danger;
}

// كروت بدون حدود
.card-borderless {
  border: none;
  box-shadow: $shadow;
}

مثال على استخدام الكروت:

<div class="card">
  <img src="صورة.jpg" class="card-img-top" alt="وصف الصورة">
  <div class="card-body">
    <h5 class="card-title">عنوان البطاقة</h5>
    <h6 class="card-subtitle">عنوان فرعي</h6>
    <p class="card-text">محتوى البطاقة يظهر هنا، ممكن يكون أي حاجة زي وصف منتج أو مقالة صغيرة.</p>
    <a href="#" class="btn btn-primary">زرار للتفاصيل</a>
  </div>
  <div class="card-footer">
    <small class="text-muted">آخر تحديث من 3 دقائق</small>
  </div>
</div>

5.4 Navbar النافبار (شريط التنقل): عشان الناس تتنقل في موقعك 🧭#

شريط التنقل من أهم العناصر في أي موقع:

// _navbar.scss - ملف النافبار بتاعنا
.navbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  padding: $spacing-2 $spacing-3;
  width: 100%;
  
  // اللوجو أو اسم الموقع
  &-brand {
    font-size: $font-size-lg;
    font-weight: 700;
    color: inherit;
    text-decoration: none;
    display: flex;
    align-items: center;
    
    img {
      max-height: 40px;
      margin-right: $spacing-2;
    }
  }
  
  // قائمة اللينكات
  &-nav {
    display: flex;
    flex-wrap: wrap;
    padding-left: 0;
    margin: 0;
    list-style: none;
    
    @include xs-only {
      flex-direction: column;
      width: 100%;
      padding-top: $spacing-2;
      display: none; // بنخفيها في الموبايل لحد ما نضغط على الزرار
      
      &.show {
        display: flex;
      }
    }
  }
  
  // كل عنصر في القائمة
  &-item {
    margin: 0 $spacing-1;
    
    @include xs-only {
      margin: $spacing-1 0;
    }
  }
  
  // اللينك نفسه
  &-link {
    color: $text-medium;
    padding: $spacing-1 $spacing-2;
    text-decoration: none;
    font-weight: 500;
    transition: $transition-base;
    border-radius: $border-radius;
    
    &:hover, &:focus {
      color: $primary;
      background-color: rgba($primary, 0.1);
    }
    
    &.active {
      color: $primary;
      font-weight: 600;
    }
  }
  
  // زرار فتح القائمة في الموبايل
  &-toggler {
    display: none;
    border: none;
    background: transparent;
    cursor: pointer;
    padding: $spacing-1;
    
    @include xs-only {
      display: block;
    }
    
       .bar {
      display: block;
      width: 22px;
      height: 2px;
      background-color: $text-dark;
      margin: 4px 0;
      transition: $transition-base;
    }
    
    &.active {
      .bar:nth-child(1) {
        transform: rotate(-45deg) translate(-5px, 5px);
      }
      
      .bar:nth-child(2) {
        opacity: 0;
      }
      
      .bar:nth-child(3) {
        transform: rotate(45deg) translate(-5px, -5px);
      }
    }
  }
  
  // ألوان مختلفة للنافبار
  &-light {
    background-color: white;
    box-shadow: $shadow-sm;
  }
  
  &-dark {
    background-color: $dark;
    color: white;
    
    .navbar-link {
      color: rgba(255, 255, 255, 0.7);
      
      &:hover, &:focus {
        color: white;
        background-color: rgba(255, 255, 255, 0.1);
      }
      
      &.active {
        color: white;
      }
    }
  }
  
  &-primary {
    background-color: $primary;
    color: white;
    
    .navbar-link {
      color: rgba(255, 255, 255, 0.8);
      
      &:hover, &:focus {
        color: white;
        background-color: rgba(255, 255, 255, 0.15);
      }
    }
  }
}

نصيحة للمبتدئين : لازم تختبر النافبار على كل أحجام الشاشات، وتتأكد إن القائمة بتظهر وتختفي صح في الموبايل.

6. الكلاسات المساعدة (Utilities): الحاجات الصغيرة اللي بتفرق كتير 🛠️#

6.1 كلاسات المسافات: عشان تظبط المسافات بين العناصر بسهولة#

// _spacing.scss - كلاسات للـmargin والـpadding
// بنعمل كلاسات لكل الاتجاهات والقيم

// m = margin, p = padding
// t = top, r = right, b = bottom, l = left, x = left+right, y = top+bottom

// كلاسات للـmargin
.m-0 { margin: 0 !important; }
.m-1 { margin: $spacing-1 !important; }
.m-2 { margin: $spacing-2 !important; }
.m-3 { margin: $spacing-3 !important; }
.m-4 { margin: $spacing-4 !important; }
.m-5 { margin: $spacing-5 !important; }

.mt-0 { margin-top: 0 !important; }
.mt-1 { margin-top: $spacing-1 !important; }
.mt-2 { margin-top: $spacing-2 !important; }
.mt-3 { margin-top: $spacing-3 !important; }
.mt-4 { margin-top: $spacing-4 !important; }
.mt-5 { margin-top: $spacing-5 !important; }

.mb-0 { margin-bottom: 0 !important; }
.mb-1 { margin-bottom: $spacing-1 !important; }
.mb-2 { margin-bottom: $spacing-2 !important; }
.mb-3 { margin-bottom: $spacing-3 !important; }
.mb-4 { margin-bottom: $spacing-4 !important; }
.mb-5 { margin-bottom: $spacing-5 !important; }

// كلاسات للـpadding (بنفس الطريقة)
.p-0 { padding: 0 !important; }
.p-1 { padding: $spacing-1 !important; }
.p-2 { padding: $spacing-2 !important; }
.p-3 { padding: $spacing-3 !important; }
.p-4 { padding: $spacing-4 !important; }
.p-5 { padding: $spacing-5 !important; }

// وهكذا لباقي الاتجاهات...

// طريقة أسهل باستخدام الـloops
@each $prop, $abbrev in (margin: m, padding: p) {
  @each $size, $value in (
    0: 0,
    1: $spacing-1,
    2: $spacing-2,
    3: $spacing-3,
    4: $spacing-4,
    5: $spacing-5
  ) {
    // كلاس للاتجاهات كلها
    .#{$abbrev}-#{$size} { #{$prop}: $value !important; }
    
    // كلاسات لكل اتجاه
    .#{$abbrev}t-#{$size} { #{$prop}-top: $value !important; }
    .#{$abbrev}r-#{$size} { #{$prop}-right: $value !important; }
    .#{$abbrev}b-#{$size} { #{$prop}-bottom: $value !important; }
    .#{$abbrev}l-#{$size} { #{$prop}-left: $value !important; }
    
    // كلاسات للمحاور
    .#{$abbrev}x-#{$size} {
      #{$prop}-left: $value !important;
      #{$prop}-right: $value !important;
    }
    
    .#{$abbrev}y-#{$size} {
      #{$prop}-top: $value !important;
      #{$prop}-bottom: $value !important;
    }
  }
}

// كلاسات للـmargin التلقائي
.m-auto { margin: auto !important; }
.mt-auto { margin-top: auto !important; }
.mr-auto { margin-right: auto !important; }
.mb-auto { margin-bottom: auto !important; }
.ml-auto { margin-left: auto !important; }
.mx-auto {
  margin-left: auto !important;
  margin-right: auto !important;
}

6.2 كلاسات الألوان: عشان تلون العناصر بسهولة 🎨#

// _colors.scss - كلاسات للألوان
// كلاسات لخلفية العناصر
.bg-primary { background-color: $primary !important; }
.bg-secondary { background-color: $secondary !important; }
.bg-success { background-color: $success !important; }
.bg-danger { background-color: $danger !important; }
.bg-warning { background-color: $warning !important; }
.bg-info { background-color: $info !important; }
.bg-light { background-color: $light !important; }
.bg-dark { background-color: $dark !important; }
.bg-white { background-color: white !important; }
.bg-transparent { background-color: transparent !important; }

// كلاسات لألوان النصوص
.text-primary { color: $primary !important; }
.text-secondary { color: $secondary !important; }
.text-success { color: $success !important; }
.text-danger { color: $danger !important; }
.text-warning { color: $warning !important; }
.text-info { color: $info !important; }
.text-light { color: $light !important; }
.text-dark { color: $text-dark !important; }
.text-muted { color: $text-light !important; }
.text-white { color: white !important; }

// كلاسات للحدود
.border { border: $border-width solid $border-color !important; }
.border-top { border-top: $border-width solid $border-color !important; }
.border-right { border-right: $border-width solid $border-color !important; }
.border-bottom { border-bottom: $border-width solid $border-color !important; }
.border-left { border-left: $border-width solid $border-color !important; }

.border-primary { border-color: $primary !important; }
.border-secondary { border-color: $secondary !important; }
.border-success { border-color: $success !important; }
.border-danger { border-color: $danger !important; }
.border-warning { border-color: $warning !important; }
.border-info { border-color: $info !important; }
.border-light { border-color: $light !important; }
.border-dark { border-color: $dark !important; }

6.3 كلاسات متنوعة: حاجات صغيرة بس مهمة#

// _utilities.scss - كلاسات متنوعة
// كلاسات للـborder-radius
.rounded { border-radius: $border-radius !important; }
.rounded-sm { border-radius: $border-radius-sm !important; }
.rounded-lg { border-radius: $border-radius-lg !important; }
.rounded-circle { border-radius: 50% !important; }
.rounded-pill { border-radius: $border-radius-pill !important; }
.rounded-0 { border-radius: 0 !important; }

// كلاسات للـshadow
.shadow-none { box-shadow: none !important; }
.shadow-sm { box-shadow: $shadow-sm !important; }
.shadow { box-shadow: $shadow !important; }
.shadow-lg { box-shadow: $shadow-lg !important; }

// كلاسات للـposition
.position-static { position: static !important; }
.position-relative { position: relative !important; }
.position-absolute { position: absolute !important; }
.position-fixed { position: fixed !important; }
.position-sticky { position: sticky !important; }

.fixed-top {
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  z-index: $z-index-fixed;
}

.fixed-bottom {
  position: fixed;
  bottom: 0;
  right: 0;
  left: 0;
  z-index: $z-index-fixed;
}

// كلاسات للـoverflow
.overflow-auto { overflow: auto !important; }
.overflow-hidden { overflow: hidden !important; }
.overflow-visible { overflow: visible !important; }
.overflow-scroll { overflow: scroll !important; }

// كلاسات للـwidth و height
.w-25 { width: 25% !important; }
.w-50 { width: 50% !important; }
.w-75 { width: 75% !important; }
.w-100 { width: 100% !important; }
.w-auto { width: auto !important; }

.h-25 { height: 25% !important; }
.h-50 { height: 50% !important; }
.h-75 { height: 75% !important; }
.h-100 { height: 100% !important; }
.h-auto { height: auto !important; }

7. تجميع المكتبة وتوثيقها: عشان الناس تعرف تستخدمها 📚#

7.1 تجميع كل الملفات: الملف الرئيسي#

بعد ما خلصنا كل الأجزاء، لازم نجمعهم في ملف واحد:

// main.scss - الملف الرئيسي
// 1. المتغيرات والـmixins (لازم تيجي الأول)
@import 'base/variables';
@import 'base/mixins';

// 2. الـreset والأساسيات
@import 'base/reset';
@import 'base/typography';

// 3. المكونات
@import 'components/buttons';
@import 'components/cards';
@import 'components/forms';
@import 'components/navbars';
// أضف باقي المكونات هنا...

// 4. التخطيط والـgrid
@import 'layouts/grid';
// أضف باقي ملفات التخطيط هنا...

// 5. الكلاسات المساعدة (لازم تيجي في الآخر عشان تقدر تعمل override)
@import 'utilities/spacing';
@import 'utilities/colors';
@import 'utilities/utilities';

7.2 عمل documentation للمكتبة: عشان الناس تعرف تستخدمها#

الdocumentation مهم جداً عشان الناس تعرف تستخدم المكتبة بتاعتك. اعمل صفحة HTML بسيطة توضح كل المكونات والكلاسات:

<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>توثيق مكتبة CSS</title>
  <link rel="stylesheet" href="dist/css-library.css">
  <style>
    .example {
      padding: 1.5rem;
      margin-bottom: 1rem;
      border: 1px solid #e0e0e0;
      border-radius: 0.25rem;
    }
    
    .code {
      background-color: #f5f5f5;
      padding: 1rem;
      border-radius: 0.25rem;
      margin-bottom: 1.5rem;
      font-family: monospace;
      white-space: pre-wrap;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1 class="mt-4">توثيق مكتبة CSS</h1>
    <p class="text-muted mb-5">دليل استخدام المكتبة وكل المكونات والكلاسات المتاحة</p>
    
    <section id="buttons" class="mb-5">
      <h2>الأزرار</h2>
      <div class="example">
        <button class="btn btn-primary">زر أساسي</button>
        <button class="btn btn-secondary">زر ثانوي</button>
        <button class="btn btn-success">زر نجاح</button>
        <button class="btn btn-danger">زر خطر</button>
      </div>
      <div class="code">
          &lt;button class="btn btn-primary"&gt;زر أساسي&lt;/button&gt;
          &lt;button class="btn btn-secondary"&gt;زر ثانوي&lt;/button&gt;
          &lt;button class="btn btn-success"&gt;زر نجاح&lt;/button&gt;
          &lt;button class="btn btn-danger"&gt;زر خطر&lt;/button&gt;
      </div>
    </section>
    
    <section id="grid" class="mb-5">
      <h2>نظام الـGrid</h2>
      <div class="example">
        <div class="row">
          <div class="col-md-6" style="background-color: #e9ecef; padding: 1rem;">
            عمود 6/12
          </div>
          <div class="col-md-6" style="background-color: #dee2e6; padding: 1rem;">
            عمود 6/12
          </div>
        </div>
        <div class="row mt-2">
          <div class="col-md-4" style="background-color: #e9ecef; padding: 1rem;">
            عمود 4/12
          </div>
          <div class="col-md-4" style="background-color: #dee2e6; padding: 1rem;">
            عمود 4/12
          </div>
          <div class="col-md-4" style="background-color: #e9ecef; padding: 1rem;">
            عمود 4/12
          </div>
        </div>
      </div>
      <div class="code">
          &lt;div class="row"&gt;
            &lt;div class="col-md-6"&gt;عمود 6/12&lt;/div&gt;
            &lt;div class="col-md-6"&gt;عمود 6/12&lt;/div&gt;
          &lt;/div&gt;
      </div>
    </section>
    
    <!-- وهكذا لباقي المكونات -->
  </div>
</body>
</html>

8. نصائح أخيرة وخطوات قادمة: عشان تطور مكتبتك 🚀#

8.1 إزاي تنشر مكتبتك: خليها متاحة للناس#

بعد ما خلصت المكتبة، لازم تنشرها عشان الناس تقدر تستخدمها:

  1. حطها على GitHub : دا أهم حاجة، عشان الناس تقدر تشوف الكود وتساهم فيه
git init
git add .
git commit -m "النسخة الأولى من مكتبة CSS"
git remote add origin https://github.com/username/css-library.git
git push -u origin main
  1. انشرها على npm : عشان الناس تقدر تستخدمها في مشاريعهم بسهولة
npm login
npm publish
  1. اعمل موقع للdocumentation : حط فيه شرح لكل المكونات وأمثلة عليها، ممكن تستخدم GitHub Pages

8.2 إزاي تطور مكتبتك: خليها أحسن مع الوقت#

المكتبة مش بتخلص أبداً، لازم تطورها باستمرار:

المكتبة مش بتخلص أبداً، لازم تطورها باستمرار:

  1. اسمع آراء المستخدمين : خد الفيدباك بجدية واعمل تحسينات بناءً عليها
  2. تابع الترندات الجديدة : CSS بيتطور كل يوم، تابع الخصائص الجديدة وأضفها للمكتبة
  3. اختبر على كل المتصفحات : تأكد إن المكتبة بتشتغل على كل المتصفحات، مش بس اللي بتستخدمه
  4. قلل حجم المكتبة : حاول تقلل حجم الـCSS النهائي عشان المواقع تحمل أسرع
  5. أضف مكونات جديدة : زي الـmodals والـtooltips والـdropdowns وغيرها

8.3 أفكار للتطوير المستقبلي: حاجات ممكن تضيفها#

فيه حاجات كتير ممكن تضيفها للمكتبة في المستقبل:

  1. نظام ألوان متكامل : مش بس ألوان أساسية، لكن درجات مختلفة من كل لون
  2. دعم الـdark mode : إضافة نسخة داكنة من المكتبة
  3. مكونات متقدمة : زي الـcarousels والـtabs والـaccordions
  4. دعم الـRTL : عشان المواقع العربية والفارسية وغيرها
  5. تحسين الأداء : استخدام CSS variables بدل SCSS للتخصيص في وقت التشغيل
  6. إضافة animations : حركات بسيطة تخلي الموقع أكثر تفاعلية

9. الخلاصة: أهم النقاط اللي اتكلمنا عنها 📋#

عملنا مكتبة CSS كاملة من الصفر، وتعلمنا:

  • إزاي نخطط للمكتبة ونحدد المتطلبات
  • إزاي نعمل هيكل للمشروع ونستخدم SCSS
  • إزاي نعمل نظام متغيرات وmixins
  • إزاي نبني نظام grid متجاوب
  • إزاي نعمل مكونات أساسية زي الأزرار والفورمات والكروت
  • إزاي نعمل كلاسات مساعدة للتنسيق السريع
  • إزاي نوثق المكتبة ونشرها للناس المكتبات زي Bootstrap وTailwind CSS بدأت بنفس الخطوات دي، وبالصبر والتطوير المستمر قدرت توصل للشهرة والانتشار. إنت كمان ممكن تعمل مكتبة ناجحة لو استمريت في تطويرها وتحسينها.

أتمنى المقال دا يكون ساعدك تفهم إزاي تبني مكتبة CSS خاصة بيك، ولو عندك أي أسئلة أو استفسارات، اكتبها في التعليقات وهنرد عليك.

مش لازم تستخدم كل الكود اللي كتبناه، ممكن تاخد الأجزاء اللي محتاجها بس وتعدل عليها على حسب احتياجاتك. المهم إنك تفهم المبادئ الأساسية وتطبقها بالطريقة اللي تناسبك.

Join our whatsapp group here
My Channel here