آموزش کامل CSS Grid پیشرفته | ساخت هر نوع چیدمانی با ۲۰+ مثال عملی
خلاصه مطلب
CSS Grid قدرتمندترین ابزار چیدمان دو بعدی در وب است. در این مقاله جامع، از مفاهیم پایه تا تکنیکهای پیشرفته Grid مانند template areas، auto-fit، minmax، و چیدمانهای پیچیده مجلهای و داشبورد را یاد میگیرید. همراه با ۲۰+ مثال واقعی و کدهای آماده.
مقدمه: CSS Grid چیست و چرا از Flexbox قدرتمندتر است؟
CSS Grid یک سیستم چیدمان دو بعدی است که به شما امکان میدهد هم سطرها (rows) و هم ستونها (columns) را به طور همزمان کنترل کنید. در حالی که Flexbox فقط در یک جهت (ردیف یا ستون) کار میکند، Grid برای طراحی کل صفحات، داشبوردهای پیچیده، گالریها و چیدمانهای مجلهای ایدهآل است.
مزایای اصلی CSS Grid نسبت به Flexbox:
-
کنترل همزمان سطر و ستون
-
امکان نامگذاری نواحی (grid-template-areas)
-
چیدمانهای نامنظم و آوانگارد
-
ریسپانسیو کردن بدون Media Queries (با auto-fit و minmax)
-
همپوشانی المانها (مانند position اما سادهتر)
مفاهیم پایه Grid (مرور سریع)
| ویژگی | مقدارهای رایج | کاربرد |
|---|---|---|
| display: grid | grid, inline-grid | فعال کردن Grid |
| grid-template-columns | 100px 1fr 2fr, repeat(3, 1fr) | تعریف ستونها |
| grid-template-rows | auto 200px 1fr | تعریف سطرها |
| gap | 20px, 1rem | فاصله بین سلولها |
| grid-column | 1 / 3, span 2 | ادغام ستونها |
| grid-row | 1 / 4, span 3 | ادغام سطرها |
| grid-template-areas | "header header" "sidebar main" | نامگذاری نواحی |
| minmax() | minmax(200px, 1fr) | محدوده اندازه |
| auto-fit / auto-fill | repeat(auto-fit, 250px) | تعداد خودکار ستونها |
۲۰+ مثال کاربردی CSS Grid (از پایه تا پیشرفته)
مثال ۱: سادهترین Grid (۳ ستون مساوی)
یک گالری ساده با ۳ ستون مساوی و فاصله ۲۰ پیکسل.
.basic-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px; } .grid-item { background: #3498db; padding: 40px; text-align: center; color: white; border-radius: 8px; }
<div class="basic-grid"> <div class="grid-item">۱</div> <div class="grid-item">۲</div> <div class="grid-item">۳</div> <div class="grid-item">۴</div> <div class="grid-item">۵</div> <div class="grid-item">۶</div> </div>
مثال ۲: ستونهای با اندازه متفاوت (fr در مقابل px)
ترکیب واحدهای مختلف: ۲۰۰ پیکسل، سپس ۲ برابر فضای باقیمانده، سپس ۱ برابر.
.unequal-grid { display: grid; grid-template-columns: 200px 2fr 1fr; gap: 15px; height: 200px; }
مثال ۳: استفاده از repeat() برای تکرار
معادل 1fr 1fr 1fr 1fr را با repeat(4, 1fr) بنویسید.
.repeat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; }
مثال ۴: ادغام سلولها با grid-column و grid-row
یک المان بزرگ که چندین ستون و سطر را اشغال میکند.
.merged-grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 100px); gap: 10px; } .item-large { grid-column: 1 / 3; /* از ستون ۱ تا ۳ (یعنی ۲ ستون) */ grid-row: 1 / 3; /* از سطر ۱ تا ۳ (یعنی ۲ سطر) */ background: #e74c3c; } .item-normal { background: #3498db; }
<div class="merged-grid"> <div class="item-large">بزرگ</div> <div class="item-normal">۲</div> <div class="item-normal">۳</div> <div class="item-normal">۴</div> <div class="item-normal">۵</div> <div class="item-normal">۶</div> </div>
مثال ۵: grid-template-areas (نامگذاری نواحی) – چیدمان صفحه کلاسیک
معروفترین کاربرد Grid: ساخت هدر، سایدبار، محتوا و فوتر.
.page-layout { display: grid; grid-template-areas: "header header header" "sidebar main main" "sidebar main main" "footer footer footer"; grid-template-columns: 250px 1fr 1fr; grid-template-rows: auto 1fr 1fr auto; gap: 15px; min-height: 100vh; } .header { grid-area: header; background: #2c3e50; padding: 20px; color: white; } .sidebar { grid-area: sidebar; background: #e67e22; padding: 20px; } .main { grid-area: main; background: #ecf0f1; padding: 20px; } .footer { grid-area: footer; background: #34495e; padding: 20px; color: white; }
مثال ۶: چیدمان مجلهای (Magazine Layout)
یک چیدمان جذاب شبیه مجلههای آنلاین با نواحی نامنظم.
.magazine { display: grid; grid-template-areas: "featured featured news" "featured featured article1" "card1 card2 card3"; grid-template-columns: 2fr 1fr 1fr; gap: 20px; } .featured { grid-area: featured; background: linear-gradient(135deg, #667eea, #764ba2); padding: 50px; color: white; border-radius: 15px; } .news { grid-area: news; background: #f39c12; padding: 20px; border-radius: 15px; } .article1 { grid-area: article1; background: #3498db; padding: 20px; border-radius: 15px; } .card1 { grid-area: card1; background: #e74c3c; padding: 30px; border-radius: 15px; } .card2 { grid-area: card2; background: #2ecc71; padding: 30px; border-radius: 15px; } .card3 { grid-area: card3; background: #9b59b6; padding: 30px; border-radius: 15px; }
مثال ۷: Grid ریسپانسیو با auto-fit و minmax (مهم!)
بدون Media Queries، تعداد ستونها بر اساس عرض صفحه تنظیم میشود.
.responsive-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; } .responsive-item { background: #3498db; padding: 40px; text-align: center; border-radius: 10px; }
توضیح: تا جایی که جا دارد ستونهای ۲۵۰ پیکسلی قرار میدهد، و اگر فضا بیشتر بود، ستونها کشیده میشوند.
مثال ۸: فرق auto-fit و auto-fill
auto-fit ستونهای خالی را حذف میکند، auto-fill آنها را حفظ میکند.
.auto-fit { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); } .auto-fill { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
مثال ۹: داشبورد مدیریتی پیشرفته
یک داشبورد کامل با کارتهای آمار، نمودار و جدول.
.dashboard { display: grid; grid-template-areas: "sidebar header header" "sidebar stats stats" "sidebar chart table" "sidebar recent recent"; grid-template-columns: 260px 1fr 1fr; grid-template-rows: auto auto 1fr auto; gap: 20px; min-height: 100vh; background: #f5f6fa; } .sidebar { grid-area: sidebar; background: #2c3e50; } .header { grid-area: header; background: white; padding: 20px; border-radius: 10px; } .stats { grid-area: stats; display: grid; grid-template-columns: repeat(3, 1fr); gap: 15px; } .chart { grid-area: chart; background: white; border-radius: 10px; padding: 20px; } .table { grid-area: table; background: white; border-radius: 10px; padding: 20px; } .recent { grid-area: recent; background: white; border-radius: 10px; padding: 20px; }
مثال ۱۰: گالری تصاویر با ارتفاع خودکار (Masonry-style)
ایجاد گالری شبیه Pinterest بدون جاوااسکریپت.
.masonry-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; } .masonry-item { background: #ecf0f1; border-radius: 15px; overflow: hidden; } .masonry-item img { width: 100%; height: auto; display: block; } .masonry-item:nth-child(odd) { transform: translateY(-10px); }
مثال ۱۱: چیدمان فرم چندستونی
یک فرم ثبتنام با ورودیهای مرتب در چند ستون.
.form-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; } .form-full { grid-column: 1 / -1; /* تمام عرض را بگیر */ } .form-grid input, .form-grid select { padding: 12px; border: 1px solid #ddd; border-radius: 8px; }
<div class="form-grid"> <input type="text" placeholder="نام"> <input type="text" placeholder="نام خانوادگی"> <input type="email" placeholder="ایمیل" class="form-full"> <input type="password" placeholder="رمز عبور" class="form-full"> <button class="form-full">ثبت نام</button> </div>
مثال ۱۲: چیدمان هرمی (Pyramid Layout)
یک چیدمان خلاقانه با سلولهای نامنظم.
.pyramid { display: grid; grid-template-columns: 1fr 2fr 1fr; gap: 10px; } .pyramid-item { background: #e67e22; padding: 30px; text-align: center; } .pyramid-item:first-child { grid-column: 2 / 3; } .pyramid-item:nth-child(2), .pyramid-item:nth-child(3) { grid-column: span 1; } .pyramid-item:last-child { grid-column: 1 / -1; }
مثال ۱۳: هدر چسبنده با Grid (Sticky Header)
ساخت یک هدر که هنگام اسکرول بالای صفحه بماند.
.sticky-grid { display: grid; grid-template-rows: auto 1fr auto; min-height: 100vh; } .sticky-header { position: sticky; top: 0; background: #2c3e50; padding: 20px; color: white; z-index: 100; } .main-content { background: #ecf0f1; padding: 40px; } .sticky-footer { background: #34495e; padding: 20px; color: white; }
مثال ۱۴: همپوشانی المانها با Grid (مثل position absolute)
قرار دادن یک متن روی تصویر بدون نیاز به position.
.overlay-grid { display: grid; grid-template-columns: 1fr; grid-template-rows: 1fr; } .overlay-grid img { grid-column: 1 / 2; grid-row: 1 / 2; width: 100%; height: 400px; object-fit: cover; } .overlay-text { grid-column: 1 / 2; grid-row: 1 / 2; z-index: 1; background: rgba(0,0,0,0.5); color: white; display: flex; align-items: center; justify-content: center; font-size: 2rem; }
مثال ۱۵: منوی کشویی سمت راست (Off-canvas menu)
یک چیدمان که منو در کنار صفحه پنهان میشود.
.offcanvas { display: grid; grid-template-columns: 0fr 1fr; transition: 0.3s; } .offcanvas.open { grid-template-columns: 250px 1fr; } .menu { overflow: hidden; background: #2c3e50; color: white; padding: 20px; } .content { background: #ecf0f1; padding: 20px; min-height: 100vh; }
مثال ۱۶: جدول مقایسه محصولات با Grid
یک جدول مقایسه زیبا برای فروشگاهها.
.comparison-grid { display: grid; grid-template-columns: 200px repeat(3, 1fr); gap: 1px; background: #ddd; } .comparison-item { background: white; padding: 15px; text-align: center; } .comparison-item:first-child { background: #f8f9fa; font-weight: bold; }
مثال ۱۷: چیدمان تایملاین (Timeline)
یک تایملاین عمودی با تاریخ و رویدادها.
.timeline { display: grid; grid-template-columns: 100px 1fr; gap: 20px; } .timeline-date { background: #3498db; color: white; padding: 10px; border-radius: 8px; text-align: center; font-weight: bold; } .timeline-event { background: #ecf0f1; padding: 15px; border-radius: 8px; margin-bottom: 15px; }
مثال ۱۸: چیدمان کارتهای خبری با تصویر و متن
هر کارت شامل تصویر (چپ) و متن (راست).
.news-card { display: grid; grid-template-columns: 120px 1fr; gap: 15px; background: white; padding: 15px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } .news-image { background: #3498db; height: 80px; border-radius: 8px; } .news-title { font-weight: bold; margin-bottom: 8px; } .news-summary { color: #666; font-size: 0.9rem; }
مثال ۱۹: Grid تو در تو (Nested Grid)
ترکیب Grid داخل Grid برای چیدمانهای پیچیده.
.outer-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px; } .inner-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; background: #ecf0f1; padding: 20px; border-radius: 10px; }
مثال ۲۰: چیدمان پشت سر هم (Zigzag Layout)
یک چیدمان جذاب برای وبلاگها.
.zigzag { display: grid; gap: 30px; } .zigzag-item { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; align-items: center; } .zigzag-item:nth-child(even) .zigzag-text { order: 2; } .zigzag-item:nth-child(even) .zigzag-image { order: 1; } .zigzag-image { background: #3498db; height: 200px; border-radius: 15px; } .zigzag-text { padding: 20px; }
مثال ۲۱: چیدمان هدر و فوتر با ارتفاع ثابت و محتوای متغیر (مهم!)
ساخت صفحاتی که محتوا در وسط کشیده میشود.
.sticky-footer-layout { display: grid; grid-template-rows: auto 1fr auto; min-height: 100vh; } header { background: #2c3e50; padding: 20px; color: white; } main { background: #ecf0f1; padding: 40px; } footer { background: #34495e; padding: 20px; color: white; }
11. ویژگیها و بخشهای مختلف
-
✅ ۲۱ مثال کامل از ساده تا پیشرفته
-
✅ پوشش تمام مفاهیم کلیدی: template areas، auto-fit، minmax، ادغام سلولها
-
✅ چیدمانهای واقعی: داشبورد، مجله، فرم، گالری، تایملاین، جدول مقایسه
-
✅ کدهای آماده و قابل کپی برای هر مثال
-
✅ بدون نیاز به Media Queries در بسیاری از موارد (با auto-fit)
-
✅ مناسب برای پروژههای حرفهای
-
✅ جدول مرجع سریع در ابتدا
جدول مرجع پیشرفته Grid:
| تکنیک | کد | کاربرد |
|---|---|---|
| ستونهای ریسپانسیو | repeat(auto-fit, minmax(250px, 1fr)) | گالری خودکار |
| نامگذاری نواحی | grid-template-areas | چیدمان خوانا |
| ادغام سلولها | grid-column: 1 / 3 | المان بزرگ |
| محدوده اندازه | minmax(200px, 1fr) | جلوگیری از خرد شدن |
| کل عرض را بگیر | grid-column: 1 / -1 | فرم تمام عرض |
| همپوشانی | grid-column: 1 / 2 (تکرار) | متن روی تصویر |
۱۴. بخش تمرین عملی (چالش نهایی)
💡 چالش نهایی (پروژه محور):
با استفاده از CSS Grid، یک صفحه شخصی (پورتفولیو) کامل طراحی کنید که شامل:
هدر با نام و شغل (grid-template-areas)
سایدبار شامل مهارتها و اطلاعات تماس
بخش اصلی شامل ۶ پروژه در قالب گالری ریسپانسیو (auto-fit)
بخش پایین شامل ۳ دلیل برای همکاری (کارتهای مساوی)
فوتر با لینکهای شبکههای اجتماعی
کدهای خود را در بخش نظرات به اشتراک بگذارید. بهترین طرحها را در مقاله بعدی معرفی میکنیم.
کلمات کلیدی:
CSS Grid پیشرفته,آموزش Grid,چیدمان با Grid,grid template areas,auto-fit minmax,responsive grid,چیدمان مجلهای,داشبورد با Grid
نظرات (0)