شرح كود الشبكة التكيفية (Adaptive Grid) باستخدام CSS
هذا الكود يُنشئ شبكة تكيفية (responsive grid) تلقائية تعيد ترتيب العناصر حسب حجم الشاشة. إليك الشرح التفصيلي:
HTML (هيكل الصفحة)
<ul class="avtosetka">
<li>Блок 1</li>
<li>Блок 2</li>
<!-- ... -->
<li>Блок 12</li>
</ul>
- نستخدم قائمة غير مرتبة (
<ul>
) مع صنفavtosetka
لإنشاء حاوية الشبكة - كل عنصر في القائمة (
<li>
) يمثل بلوك/خلية في الشبكة - يوجد 12 بلوك كمثال
CSS (التنسيقات)
تنسيقات الشبكة الأساسية:
.avtosetka {
--auto-grid-min-size: 16rem;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(var(--auto-grid-min-size), 1fr));
grid-gap: 1rem;
}
--auto-grid-min-size: 16rem
: نحدد متغير CSS يحتوي على الحد الأدنى لعرض العمود (16rem)display: grid
: نحول العنصر إلى حاوية شبكةgrid-template-columns
: نحدد كيفية توزيع الأعمدة:repeat(auto-fill, ...)
: تملأ الصفوف تلقائياً بعدد الأعمدة المناسبminmax(var(--auto-grid-min-size), 1fr)
: كل عمود سيكون عرضه على الأقل 16rem، وإذا توفر مساحة أكبر سيتم توزيعها بالتساوي (1fr
)
grid-gap: 1rem
: مسافة 1rem بين الخلايا
تنسيقات التقديم/العرض:
body {
background: #efefef;
padding: 1rem;
line-height: 1.4;
font-family: sans-serif;
}
تنسيقات عامة للصفحة: لون خلفية رمادي، حواف داخلية، نوع خط، إلخ.
تنسيقات عناصر الشبكة:
li {
padding: 4rem 1.4rem;
text-align: center;
font-size: 1.2rem;
background: #af302e;
color: #efe8e8;
}
كل عنصر <li>
(خلية الشبكة) له:
- حواف داخلية: 4rem أعلى/أسفل و1.4rem يمين/يسار
- نص في المنتصف
- حجم خط 1.2rem
- لون خلفية أحمر داكن (
#af302
) - لون نص فاتح (
#efe8e8
)
كيف تعمل هذه الشبكة؟
- عند عرض الصفحة على شاشة كبيرة:
- ستعرض أكبر عدد ممكن من الأعمدة بعرض 16rem أو أكثر
- المساحة الزائدة يتم توزيعها بالتساوي بين الأعمدة
- عند تصغير الشاشة:
- عندما لا يتسع صف كامل لأعمدة بعرض 16rem، سينتقل العمود الأخير لصف جديد
- تستمر هذه العملية حتى يصبح عمود واحد في كل صف على الشاشات الصغيرة جداً
- المسافات (
grid-gap
) تبقى ثابتة (1rem
) بين جميع الخلايا
مميزات هذا النهج:
- تجاوبي تلقائي: لا حاجة لكتابة media queries متعددة
- مرن: يمكن تغيير الحد الأدنى للعرض بسهولة بتعديل المتغير
- متوافق: يعمل في جميع المتصفحات الحديثة
- نظيف: لا حاجة لاستخدام
float
أوinline-block
يمكن استخدام هذه الشبكة لعرض منتجات، بطاقات، صور، أو أي محتوى آخر يحتاج إلى تخطيط متجاوب.
الكود كاملا
<ul class="avtosetka">
<li>Блок 1</li>
<li>Блок 2</li>
<li>Блок 3</li>
<li>Блок 4</li>
<li>Блок 5</li>
<li>Блок 6</li>
<li>Блок 7</li>
<li>Блок 8</li>
<li>Блок 9</li>
<li>Блок 10</li>
<li>Блок 11</li>
<li>Блок 12</li>
</ul>
<ul class="avtosetka">
<li>Блок 1</li>
<li>Блок 2</li>
<li>Блок 3</li>
<li>Блок 4</li>
<li>Блок 5</li>
<li>Блок 6</li>
<li>Блок 7</li>
<li>Блок 8</li>
<li>Блок 9</li>
<li>Блок 10</li>
<li>Блок 11</li>
<li>Блок 12</li>
</ul>
.avtosetka {
--auto-grid-min-size: 16rem;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(var(--auto-grid-min-size), 1fr));
grid-gap: 1rem;
}
/* Презентационные стили*/
body {
background: #efefef;
padding: 1rem;
line-height: 1.4;
font-family: sans-serif;
}
li {
padding: 4rem 1.4rem;
text-align: center;
font-size: 1.2rem;
background: #af302e;
color: #efe8e8;
}