Display وأنماط العرض في CSS: دليل شامل للتحكم في سلوك العناصر

CSS

Display وأنماط العرض في CSS: دليل شامل للتحكم في سلوك العناصر
إتقان خصائص Display في CSS - فهم block، inline، flex، grid والمزيد. تعلم كيفية التحكم في سلوك العناصر وتخطيط الصفحات بمهارة.
#CSS#Display#Layout#Block#Inline#Flex#Grid#Web Design#Frontend

Display وأنماط العرض في CSS: دليل شامل للتحكم في سلوك العناصر

دليل تخصصي من علاء عامر – مطور ومصمم مواقع وتطبيقات محترف

فهم خصائص Display أساسي لإتقان تخطيط الصفحات. تعلم كيفية التحكم في سلوك العناصر وإنشاء تصاميم مرنة ومتطورة.


1️⃣ مفهوم Display الأساسي

أنماط العرض الرئيسية

القيمةالسلوكالاستخدام
blockيأخذ كامل العرضالعناوين، الفقرات
inlineيتدفق مع النصالروابط، التأكيد
inline-blockهجين بين الاثنينالأزرار، البطاقات الصغيرة
flexحاوي مرنالتخطيط المرن
gridشبكة ثنائية الأبعادالتخطيطات المعقدة
noneمخفي تماماًإخفاء العناصر
/* أمثلة أساسية على أنماط العرض */
.display-examples {
  /* عنصر كتلة - يأخذ كامل العرض */
  display: block;
  width: 100%;
  height: 50px;
  background: #007bff;
  margin-bottom: 10px;
}

.display-inline {
  /* عنصر سطري - يتدفق مع النص */
  display: inline;
  background: #28a745;
  padding: 5px 10px;
  /* ملاحظة: width وheight لا يعملان مع inline */
}

.display-inline-block {
  /* هجين - يتدفق لكن يقبل الأبعاد */
  display: inline-block;
  width: 150px;
  height: 50px;
  background: #dc3545;
  margin: 5px;
  text-align: center;
  line-height: 50px;
}

.display-none {
  /* مخفي تماماً - لا يأخذ مساحة */
  display: none;
}

.visibility-hidden {
  /* مخفي لكن يأخذ مساحة */
  visibility: hidden;
}

2️⃣ العناصر الكتلية (Block Elements)

خصائص العناصر الكتلية

/* سلوك العناصر الكتلية الافتراضي */
.block-elements {
  /* عناصر كتلية افتراضية */
  /* div, p, h1-h6, section, article, header, footer, main, nav */
}

/* تحويل عنصر إلى كتلة */
.make-block {
  display: block;

  /* خصائص العناصر الكتلية */
  width: 100%; /* يأخذ كامل العرض المتاح */
  margin: 10px 0; /* يمكن تطبيق جميع أنواع الهوامش */
  padding: 20px; /* يمكن تطبيق جميع أنواع الحشو */
  border: 2px solid #333; /* يمكن تطبيق الحدود */

  /* يبدأ في سطر جديد */
  /* العنصر التالي يبدأ في سطر جديد أيضاً */
}

/* أمثلة عملية للعناصر الكتلية */
.card-block {
  display: block;
  width: 300px;
  padding: 20px;
  margin: 20px auto;
  background: white;
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}

.header-block {
  display: block;
  width: 100%;
  padding: 15px 20px;
  background: #007bff;
  color: white;
  text-align: center;
  font-weight: bold;
}

.content-block {
  display: block;
  max-width: 800px;
  margin: 0 auto;
  padding: 40px 20px;
  line-height: 1.6;
}

تخصيص العناصر الكتلية

/* تخصيص عرض العناصر الكتلية */
.custom-widths {
  display: block;

  /* عروض مختلفة */
  width: 50%; /* نصف العرض */
  width: 300px; /* عرض ثابت */
  width: auto; /* عرض تلقائي */
  width: fit-content; /* عرض المحتوى */
  width: min-content; /* أصغر عرض ممكن */
  width: max-content; /* أكبر عرض للمحتوى */
}

/* توسيط العناصر الكتلية */
.centered-blocks {
  display: block;
  width: 60%;
  margin: 0 auto; /* توسيط أفقي */

  /* أو باستخدام flex للحاوي الأب */
}

.center-container {
  display: flex;
  justify-content: center;
}

.center-container .centered-child {
  display: block;
  width: 300px;
}

3️⃣ العناصر السطرية (Inline Elements)

خصائص العناصر السطرية

/* العناصر السطرية الافتراضية */
/* span, a, strong, em, img, input, button */

.inline-elements {
  display: inline;

  /* خصائص العناصر السطرية */
  /* width وheight لا يعملان */
  /* width: 200px;  ← لن يعمل */
  /* height: 50px;  ← لن يعمل */

  /* الهوامش العمودية لا تعمل بشكل طبيعي */
  margin: 0 10px; /* أفقي يعمل، عمودي لا يعمل */

  /* الحشو يعمل لكن قد يتداخل */
  padding: 5px 10px; /* يعمل لكن بحذر */

  /* الحدود تعمل */
  border: 1px solid #333;

  background: #f8f9fa;
  color: #333;
}

/* أمثلة عملية للعناصر السطرية */
.inline-link {
  display: inline;
  color: #007bff;
  text-decoration: none;
  padding: 2px 4px;
  border-radius: 3px;
  transition: background-color 0.3s ease;
}

.inline-link:hover {
  background-color: rgba(0, 123, 255, 0.1);
}

.inline-badge {
  display: inline;
  background: #28a745;
  color: white;
  padding: 3px 8px;
  border-radius: 12px;
  font-size: 0.75rem;
  font-weight: 600;
}

.inline-code {
  display: inline;
  background: #f8f9fa;
  color: #e83e8c;
  padding: 2px 6px;
  border-radius: 4px;
  font-family: "Courier New", monospace;
  font-size: 0.9em;
  border: 1px solid #e9ecef;
}

تنسيق النص السطري

/* تنسيق متقدم للعناصر السطرية */
.advanced-inline {
  display: inline;

  /* تباعد الأحرف والكلمات */
  letter-spacing: 1px;
  word-spacing: 2px;

  /* تحويل النص */
  text-transform: uppercase;

  /* ظل النص */
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);

  /* تدرج الخلفية */
  background: linear-gradient(135deg, #ff6b6b, #4ecdc4);
  color: white;
  padding: 4px 8px;
  border-radius: 4px;
}

/* عناصر سطرية مع أيقونات */
.icon-text {
  display: inline;
  vertical-align: middle;
}

.icon-text::before {
  content: "📧";
  margin-left: 5px;
}

/* تأثيرات تفاعلية للعناصر السطرية */
.interactive-inline {
  display: inline;
  position: relative;
  padding: 2px 0;
  color: #007bff;
  text-decoration: none;
  transition: color 0.3s ease;
}

.interactive-inline::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: 0;
  width: 0;
  height: 2px;
  background: #007bff;
  transition: width 0.3s ease;
}

.interactive-inline:hover::after {
  width: 100%;
}

4️⃣ Inline-Block: الأفضل من العالمين

مفهوم Inline-Block

/* Inline-block يجمع مزايا النوعين */
.inline-block-demo {
  display: inline-block;

  /* يقبل الأبعاد مثل block */
  width: 200px;
  height: 100px;

  /* يتدفق أفقياً مثل inline */
  margin: 10px;

  /* يقبل كامل التنسيق */
  padding: 20px;
  border: 2px solid #007bff;
  border-radius: 8px;
  background: #f8f9fa;
  text-align: center;
  vertical-align: top; /* تحكم في المحاذاة العمودية */
}

/* استخدامات عملية لـ inline-block */

/* شبكة بطاقات بسيطة */
.card-grid {
  text-align: center; /* لتوسيط البطاقات */
}

.card-item {
  display: inline-block;
  width: 250px;
  margin: 15px;
  padding: 20px;
  background: white;
  border-radius: 12px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  text-align: right; /* إعادة تعيين النص */
  vertical-align: top; /* محاذاة من الأعلى */
  transition: transform 0.3s ease;
}

.card-item:hover {
  transform: translateY(-5px);
}

/* أزرار متجاورة */
.button-group {
  text-align: center;
}

.btn-inline-block {
  display: inline-block;
  padding: 12px 24px;
  margin: 0 5px;
  background: #007bff;
  color: white;
  text-decoration: none;
  border-radius: 6px;
  border: none;
  cursor: pointer;
  transition: all 0.3s ease;
}

.btn-inline-block:hover {
  background: #0056b3;
  transform: translateY(-2px);
}

/* قائمة تنقل أفقية */
.nav-horizontal {
  background: #f8f9fa;
  padding: 15px;
  text-align: center;
  border-radius: 8px;
}

.nav-item-inline {
  display: inline-block;
  margin: 0 10px;
}

.nav-link-inline {
  display: inline-block;
  padding: 10px 15px;
  color: #333;
  text-decoration: none;
  border-radius: 6px;
  transition: all 0.3s ease;
}

.nav-link-inline:hover {
  background: #007bff;
  color: white;
}

حل مشكلة المسافات البيضاء

/* مشكلة المسافات البيضاء مع inline-block */
.spacing-problem {
  /* HTML يضع مسافات بين العناصر inline-block */
}

/* الحلول المختلفة */

/* الحل الأول: إزالة المسافات من HTML */
/* <div class="item">1</div><div class="item">2</div> */

/* الحل الثاني: font-size على الحاوي */
.container-fix {
  font-size: 0; /* إزالة المسافات */
}

.container-fix .item {
  display: inline-block;
  font-size: 16px; /* إعادة تعيين الخط */
}

/* الحل الثالث: استخدام flexbox (الأفضل) */
.flex-solution {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.flex-solution .item {
  /* لا حاجة لـ inline-block */
  flex: 0 1 auto;
}

/* الحل الرابع: float (قديم) */
.float-solution .item {
  float: right;
  margin-left: 10px;
}

.float-solution::after {
  content: "";
  display: table;
  clear: both;
}

5️⃣ مقدمة سريعة لـ Flex و Grid

Flexbox الأساسي

/* Flexbox للتخطيط المرن */
.flex-container {
  display: flex;

  /* اتجاه العناصر */
  flex-direction: row; /* أفقي (افتراضي) */
  flex-direction: column; /* عمودي */
  flex-direction: row-reverse; /* أفقي معكوس */
  flex-direction: column-reverse; /* عمودي معكوس */

  /* التفاف العناصر */
  flex-wrap: nowrap; /* عدم التفاف (افتراضي) */
  flex-wrap: wrap; /* التفاف */
  flex-wrap: wrap-reverse; /* التفاف معكوس */

  /* محاذاة أفقية (المحور الرئيسي) */
  justify-content: flex-start; /* البداية */
  justify-content: flex-end; /* النهاية */
  justify-content: center; /* الوسط */
  justify-content: space-between; /* مسافات متساوية */
  justify-content: space-around; /* مسافات حول العناصر */
  justify-content: space-evenly; /* مسافات متساوية تماماً */

  /* محاذاة عمودية (المحور المتقاطع) */
  align-items: stretch; /* تمدد (افتراضي) */
  align-items: flex-start; /* الأعلى */
  align-items: flex-end; /* الأسفل */
  align-items: center; /* الوسط */
  align-items: baseline; /* خط القاعدة */
}

/* عناصر Flexbox */
.flex-item {
  /* نمو العنصر */
  flex-grow: 1; /* ينمو ليملأ المساحة */
  flex-grow: 0; /* لا ينمو */
  flex-grow: 2; /* ينمو بضعف السرعة */

  /* تقلص العنصر */
  flex-shrink: 1; /* يتقلص عند الحاجة */
  flex-shrink: 0; /* لا يتقلص */

  /* الحجم الأساسي */
  flex-basis: auto; /* تلقائي */
  flex-basis: 200px; /* حجم ثابت */
  flex-basis: 30%; /* نسبة */

  /* اختصار شامل */
  flex: 1; /* flex: 1 1 0% */
  flex: 0 1 auto; /* القيم الافتراضية */
  flex: none; /* flex: 0 0 auto */
}

/* مثال عملي لتخطيط Flexbox */
.layout-flex {
  display: flex;
  min-height: 100vh;
}

.sidebar {
  flex: 0 0 250px; /* عرض ثابت */
  background: #f8f9fa;
  padding: 20px;
}

.main-content {
  flex: 1; /* يأخذ باقي المساحة */
  padding: 20px;
}

.footer-flex {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px;
  background: #333;
  color: white;
}

CSS Grid الأساسي

/* Grid للتخطيط الشبكي */
.grid-container {
  display: grid;

  /* تعريف الأعمدة */
  grid-template-columns: 200px 1fr 100px; /* ثابت، مرن، ثابت */
  grid-template-columns: repeat(3, 1fr); /* 3 أعمدة متساوية */
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); /* متجاوب */

  /* تعريف الصفوف */
  grid-template-rows: auto 1fr auto; /* رأس، محتوى، ذيل */
  grid-template-rows: repeat(4, 100px); /* 4 صفوف ثابتة */

  /* المسافات بين العناصر */
  gap: 20px; /* مسافة شاملة */
  grid-gap: 10px 20px; /* صفوف، أعمدة */
  row-gap: 10px; /* مسافة الصفوف */
  column-gap: 20px; /* مسافة الأعمدة */

  /* محاذاة الشبكة */
  justify-content: center; /* محاذاة أفقية */
  align-content: center; /* محاذاة عمودية */

  /* محاذاة العناصر داخل الخلايا */
  justify-items: center; /* محاذاة أفقية للعناصر */
  align-items: center; /* محاذاة عمودية للعناصر */
}

/* عناصر Grid */
.grid-item {
  /* تحديد موضع العنصر */
  grid-column: 1 / 3; /* من العمود 1 إلى 3 */
  grid-row: 2 / 4; /* من الصف 2 إلى 4 */

  /* اختصارات */
  grid-column: span 2; /* يمتد عبر عمودين */
  grid-row: span 3; /* يمتد عبر 3 صفوف */

  /* تحديد المنطقة */
  grid-area: header; /* منطقة محددة مسبقاً */

  /* محاذاة العنصر الفردي */
  justify-self: start; /* محاذاة أفقية */
  align-self: end; /* محاذاة عمودية */
}

/* مثال عملي لتخطيط Grid */
.layout-grid {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar main aside"
    "footer footer footer";
  grid-template-rows: auto 1fr auto;
  grid-template-columns: 200px 1fr 150px;
  gap: 20px;
  min-height: 100vh;
}

.header {
  grid-area: header;
}
.sidebar {
  grid-area: sidebar;
}
.main {
  grid-area: main;
}
.aside {
  grid-area: aside;
}
.footer {
  grid-area: footer;
}

6️⃣ مشروع عملي: نظام تخطيط متعدد الأنماط

<!DOCTYPE html>
<html lang="ar" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>نظام التخطيط المتعدد</title>
    <link rel="stylesheet" href="layout-system.css" />
  </head>
  <body>
    <!-- نظام التبويب لعرض أنماط مختلفة -->
    <div class="layout-tabs">
      <button class="tab-btn active" data-layout="block">Block Layout</button>
      <button class="tab-btn" data-layout="inline">Inline Layout</button>
      <button class="tab-btn" data-layout="inline-block">Inline-Block</button>
      <button class="tab-btn" data-layout="flex">Flex Layout</button>
      <button class="tab-btn" data-layout="grid">Grid Layout</button>
    </div>

    <!-- تخطيط Block -->
    <div class="layout-demo" id="block-layout">
      <div class="demo-title">Block Layout Demo</div>
      <div class="block-container">
        <div class="block-item">عنصر كتلة 1</div>
        <div class="block-item">عنصر كتلة 2</div>
        <div class="block-item">عنصر كتلة 3</div>
      </div>
      <div class="demo-description">
        العناصر الكتلية تأخذ كامل العرض وتبدأ في أسطر جديدة
      </div>
    </div>

    <!-- تخطيط Inline -->
    <div class="layout-demo" id="inline-layout" style="display: none;">
      <div class="demo-title">Inline Layout Demo</div>
      <div class="inline-container">
        هذا نص عادي مع
        <span class="inline-item">عنصر سطري 1</span>
        و
        <span class="inline-item">عنصر سطري 2</span>
        و
        <span class="inline-item">عنصر سطري 3</span>
        في نفس السطر.
      </div>
      <div class="demo-description">
        العناصر السطرية تتدفق مع النص ولا تبدأ أسطراً جديدة
      </div>
    </div>

    <!-- تخطيط Inline-Block -->
    <div class="layout-demo" id="inline-block-layout" style="display: none;">
      <div class="demo-title">Inline-Block Layout Demo</div>
      <div class="inline-block-container">
        <div class="inline-block-item">بطاقة 1</div>
        <div class="inline-block-item">بطاقة 2</div>
        <div class="inline-block-item">بطاقة 3</div>
        <div class="inline-block-item">بطاقة 4</div>
      </div>
      <div class="demo-description">
        Inline-block يجمع مزايا النوعين - يتدفق أفقياً ويقبل الأبعاد
      </div>
    </div>

    <!-- تخطيط Flex -->
    <div class="layout-demo" id="flex-layout" style="display: none;">
      <div class="demo-title">Flex Layout Demo</div>
      <div class="flex-container">
        <div class="flex-item">عنصر مرن 1</div>
        <div class="flex-item">عنصر مرن 2</div>
        <div class="flex-item">عنصر مرن 3</div>
      </div>
      <div class="flex-controls">
        <button class="control-btn" data-flex="row">صف</button>
        <button class="control-btn" data-flex="column">عمود</button>
        <button class="control-btn" data-flex="center">توسيط</button>
        <button class="control-btn" data-flex="space-between">توزيع</button>
      </div>
      <div class="demo-description">
        Flexbox يوفر تحكماً مرناً في التخطيط والمحاذاة
      </div>
    </div>

    <!-- تخطيط Grid -->
    <div class="layout-demo" id="grid-layout" style="display: none;">
      <div class="demo-title">Grid Layout Demo</div>
      <div class="grid-container">
        <div class="grid-item header">الرأس</div>
        <div class="grid-item sidebar">الشريط الجانبي</div>
        <div class="grid-item main">المحتوى الرئيسي</div>
        <div class="grid-item aside">الشريط الجانبي الثانوي</div>
        <div class="grid-item footer">الذيل</div>
      </div>
      <div class="demo-description">
        CSS Grid يوفر تحكماً دقيقاً في التخطيط ثنائي الأبعاد
      </div>
    </div>

    <!-- معلومات إضافية -->
    <div class="info-panel">
      <h3>معلومات مفيدة:</h3>
      <ul>
        <li><strong>Block:</strong> مثالي للعناصر الرئيسية والمحتوى</li>
        <li><strong>Inline:</strong> مثالي للنص والعناصر الصغيرة</li>
        <li><strong>Inline-Block:</strong> مثالي للأزرار والبطاقات الصغيرة</li>
        <li><strong>Flex:</strong> مثالي للتخطيط المرن والمحاذاة</li>
        <li><strong>Grid:</strong> مثالي للتخطيطات المعقدة والشبكية</li>
      </ul>
    </div>

    <script src="layout-demo.js"></script>
  </body>
</html>
/* layout-system.css */
:root {
  --primary: #007bff;
  --secondary: #6c757d;
  --success: #28a745;
  --danger: #dc3545;
  --warning: #ffc107;
  --info: #17a2b8;
  --light: #f8f9fa;
  --dark: #343a40;
  --white: #ffffff;

  --border-radius: 8px;
  --box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  --transition: all 0.3s ease;
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  font-family: "Cairo", Arial, sans-serif;
  background: linear-gradient(135deg, var(--light), #e3f2fd);
  padding: 20px;
  color: var(--dark);
}

/* أزرار التبويب */
.layout-tabs {
  display: flex;
  justify-content: center;
  margin-bottom: 30px;
  background: var(--white);
  border-radius: var(--border-radius);
  padding: 10px;
  box-shadow: var(--box-shadow);
  flex-wrap: wrap;
  gap: 10px;
}

.tab-btn {
  padding: 12px 20px;
  border: none;
  background: transparent;
  color: var(--secondary);
  border-radius: var(--border-radius);
  cursor: pointer;
  font-weight: 500;
  transition: var(--transition);
  font-family: inherit;
}

.tab-btn:hover {
  background: var(--light);
}

.tab-btn.active {
  background: var(--primary);
  color: var(--white);
}

/* حاوي العرض التوضيحي */
.layout-demo {
  max-width: 1000px;
  margin: 0 auto;
  background: var(--white);
  border-radius: var(--border-radius);
  padding: 30px;
  box-shadow: var(--box-shadow);
  margin-bottom: 20px;
}

.demo-title {
  font-size: 1.5rem;
  font-weight: 600;
  color: var(--primary);
  margin-bottom: 20px;
  text-align: center;
}

.demo-description {
  margin-top: 20px;
  padding: 15px;
  background: var(--light);
  border-radius: var(--border-radius);
  color: var(--secondary);
  text-align: center;
  font-style: italic;
}

/* تخطيط Block */
.block-container {
  margin: 20px 0;
}

.block-item {
  display: block;
  width: 100%;
  padding: 15px;
  margin-bottom: 10px;
  background: linear-gradient(135deg, var(--primary), #0056b3);
  color: var(--white);
  border-radius: var(--border-radius);
  text-align: center;
  font-weight: 500;
  transition: var(--transition);
}

.block-item:hover {
  transform: translateX(10px);
}

/* تخطيط Inline */
.inline-container {
  margin: 20px 0;
  padding: 20px;
  background: var(--light);
  border-radius: var(--border-radius);
  line-height: 2;
  font-size: 1.1rem;
}

.inline-item {
  display: inline;
  background: var(--success);
  color: var(--white);
  padding: 5px 10px;
  border-radius: 4px;
  font-weight: 500;
  margin: 0 3px;
}

/* تخطيط Inline-Block */
.inline-block-container {
  text-align: center;
  margin: 20px 0;
}

.inline-block-item {
  display: inline-block;
  width: 150px;
  height: 100px;
  margin: 10px;
  padding: 15px;
  background: linear-gradient(135deg, var(--warning), #e6a000);
  color: var(--dark);
  border-radius: var(--border-radius);
  text-align: center;
  line-height: 70px;
  font-weight: 600;
  transition: var(--transition);
  vertical-align: top;
}

.inline-block-item:hover {
  transform: translateY(-5px) rotate(2deg);
}

/* تخطيط Flex */
.flex-container {
  display: flex;
  margin: 20px 0;
  gap: 15px;
  min-height: 100px;
}

.flex-item {
  flex: 1;
  background: linear-gradient(135deg, var(--info), #138496);
  color: var(--white);
  padding: 20px;
  border-radius: var(--border-radius);
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 500;
  transition: var(--transition);
}

.flex-item:hover {
  flex: 1.2;
  transform: scale(1.05);
}

.flex-controls {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin: 20px 0;
}

.control-btn {
  padding: 8px 15px;
  border: 2px solid var(--primary);
  background: transparent;
  color: var(--primary);
  border-radius: var(--border-radius);
  cursor: pointer;
  font-weight: 500;
  transition: var(--transition);
  font-family: inherit;
}

.control-btn:hover {
  background: var(--primary);
  color: var(--white);
}

/* تخطيط Grid */
.grid-container {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar main aside"
    "footer footer footer";
  grid-template-rows: auto 200px auto;
  grid-template-columns: 1fr 2fr 1fr;
  gap: 15px;
  margin: 20px 0;
}

.grid-item {
  padding: 20px;
  border-radius: var(--border-radius);
  color: var(--white);
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
  transition: var(--transition);
}

.grid-item:hover {
  transform: scale(1.02);
}

.grid-item.header {
  grid-area: header;
  background: linear-gradient(135deg, var(--primary), #0056b3);
}

.grid-item.sidebar {
  grid-area: sidebar;
  background: linear-gradient(135deg, var(--success), #1e7e34);
}

.grid-item.main {
  grid-area: main;
  background: linear-gradient(135deg, var(--danger), #bd2130);
}

.grid-item.aside {
  grid-area: aside;
  background: linear-gradient(135deg, var(--warning), #e6a000);
  color: var(--dark);
}

.grid-item.footer {
  grid-area: footer;
  background: linear-gradient(135deg, var(--secondary), #545b62);
}

/* لوحة المعلومات */
.info-panel {
  max-width: 1000px;
  margin: 0 auto;
  background: var(--white);
  border-radius: var(--border-radius);
  padding: 30px;
  box-shadow: var(--box-shadow);
}

.info-panel h3 {
  color: var(--primary);
  margin-bottom: 15px;
}

.info-panel ul {
  list-style: none;
  padding: 0;
}

.info-panel li {
  padding: 8px 0;
  border-bottom: 1px solid var(--light);
  color: var(--dark);
}

.info-panel li:last-child {
  border-bottom: none;
}

/* التصميم المتجاوب */
@media (max-width: 768px) {
  .layout-tabs {
    flex-direction: column;
  }

  .grid-container {
    grid-template-areas:
      "header"
      "sidebar"
      "main"
      "aside"
      "footer";
    grid-template-columns: 1fr;
    grid-template-rows: auto auto auto auto auto;
  }

  .inline-block-item {
    width: 120px;
    height: 80px;
    line-height: 50px;
    margin: 5px;
  }

  .flex-container {
    flex-direction: column;
  }
}
// layout-demo.js
document.addEventListener("DOMContentLoaded", function () {
  // التبديل بين التخطيطات
  const tabBtns = document.querySelectorAll(".tab-btn");
  const layouts = document.querySelectorAll(".layout-demo");

  tabBtns.forEach((btn) => {
    btn.addEventListener("click", function () {
      const layout = this.getAttribute("data-layout");

      // إزالة الفئة النشطة من جميع الأزرار
      tabBtns.forEach((b) => b.classList.remove("active"));
      this.classList.add("active");

      // إخفاء جميع التخطيطات
      layouts.forEach((l) => (l.style.display = "none"));

      // عرض التخطيط المحدد
      document.getElementById(layout + "-layout").style.display = "block";
    });
  });

  // التحكم في Flexbox
  const controlBtns = document.querySelectorAll(".control-btn");
  const flexContainer = document.querySelector(".flex-container");

  controlBtns.forEach((btn) => {
    btn.addEventListener("click", function () {
      const flexType = this.getAttribute("data-flex");

      switch (flexType) {
        case "row":
          flexContainer.style.flexDirection = "row";
          flexContainer.style.justifyContent = "flex-start";
          break;
        case "column":
          flexContainer.style.flexDirection = "column";
          flexContainer.style.justifyContent = "flex-start";
          break;
        case "center":
          flexContainer.style.flexDirection = "row";
          flexContainer.style.justifyContent = "center";
          flexContainer.style.alignItems = "center";
          break;
        case "space-between":
          flexContainer.style.flexDirection = "row";
          flexContainer.style.justifyContent = "space-between";
          flexContainer.style.alignItems = "stretch";
          break;
      }

      // إظهار التأثير البصري
      controlBtns.forEach((b) => (b.style.background = "transparent"));
      controlBtns.forEach((b) => (b.style.color = "var(--primary)"));

      this.style.background = "var(--primary)";
      this.style.color = "var(--white)";
    });
  });
});

الخلاصة

في هذا الدرس تعلمنا:

مفهوم Display وأنماط العرض الأساسيةالعناصر الكتلية (Block) وخصائصها
العناصر السطرية (Inline) وقيودهاInline-Block كحل هجين مرنمقدمة سريعة لـ Flexbox و Gridمشروع تفاعلي يوضح جميع الأنماط

في الدرس القادم سندرس Flexbox بالتفصيل لإتقان التخطيط المرن والمحاذاة المتطورة.

📩 هل تحتاج مساعدة في Display؟

aboutservicesprojectsBlogscontact