Flexbox یا Grid؟ کِی از کدام در CSS استفاده کنیم
آموزش

Flexbox یا Grid؟ کِی از کدام در CSS استفاده کنیم

هر دو چیدمان می‌سازند؛ فلکس‌باکس فقط یک ردیف یا یک ستون را می‌فهمد و گرید کل جدول را یک‌جا می‌بیند. ببینید هر کدام کجا به کارتان می‌آید.

تحریریه‌ی دینا کد
نویسنده
۳ دقیقه مطالعه۱ بازدید
اشتراک گذاری۱
فهرست مطالب
  1. ۱فلکس‌باکس داخل یک ردیف چیدمان می‌کند
  2. ۲در گرید همه‌ی ردیف‌ها یک جدول‌اند
  3. ۳minmax، همان چیزی است که «ریسپانسیو بدون media query» را می‌سازد
  4. ۴این دو رقیب هم نیستند
  5. ۵قانون عملی
  6. ۶وسط‌چین‌کردن، جایی که فرقشان کمتر به چشم می‌آید

برای یک ردیف یا یک ستون از آیتم‌ها، مثلاً نوار دکمه یا منوی افقی، flexbox بگیرید. وقتی هم‌زمان ردیف و ستون مهم است، مثلاً گرید کارت یا صفحه‌ای با هدر، سایدبار و محتوا، grid انتخاب درست‌تری است. فلکس‌باکس یک‌بعدی فکر می‌کند و گرید دوبعدی؛ همین یک جمله جهت کلی را مشخص می‌کند.

فلکس‌باکس داخل یک ردیف چیدمان می‌کند

css.row { display: flex; flex-wrap: wrap; gap: 8px; }

با پنج آیتم با عرض‌های ۱۲۰، ۲۰۰، ۱۵۰، ۱۰۰ و ۱۸۰ پیکسل، flex-wrap: wrap وقتی جا کم بیاید به ردیف بعد می‌رود، ولی هیچ تضمینی نیست آیتم‌های ردیف دوم زیر همان نقطه‌ی آیتم‌های ردیف اول بایستند. فلکس‌باکس فقط داخل یک ردیف چیدمان می‌کند و ردیف‌ها از دید هم بی‌خبرند.

در گرید همه‌ی ردیف‌ها یک جدول‌اند

css.grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }

با همان پنج آیتم، grid-template-columns از قبل سه ستون تعریف می‌کند و هر آیتم فقط داخل ستون خودش می‌نشیند؛ هیچ آیتمی به ستون همسایه سرریز نمی‌شود. یک نکته‌ی ظریف هم هست؛ ستون 1fr تا حد محتوای آیتمش پهن می‌شود و آیتم ۲۰۰ پیکسلی ستونش را از حدود ۱۶۱ پیکسل به ۲۰۰ می‌رساند، پس هم‌عرضی سه ستون به هم می‌خورد. وعده‌ی اصلی اما سر جایش است؛ ردیف دوم زیر ردیف اول، ستون‌به‌ستون هم‌تراز است، چیزی که فلکس‌باکس اصلاً بلد نیست بدهد.

minmax، همان چیزی است که «ریسپانسیو بدون media query» را می‌سازد

css.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 8px;
}

auto-fill هر چند ستون که با عرض حداقل ۲۰۰ پیکسل جا می‌شود می‌گذارد و 1fr باقی‌مانده‌ی فضا را بین همان ستون‌ها پخش می‌کند. با تغییر عرض صفحه، تعداد ستون‌ها بدون یک خط @media عوض می‌شود.

این دو رقیب هم نیستند

اکثر صفحات واقعی از هر دو استفاده می‌کنند؛ grid برای اسکلت کلی صفحه (هدر، سایدبار، محتوا، فوتر)، و flexbox داخل هر بخش برای چیدمان یک ردیف از آیتم‌ها (مثلاً دکمه‌های داخل یک تولبار). سؤال درست «کدام یکی؟» نیست، «این بخش خاص، یک‌بعدی است یا دوبعدی؟»

قانون عملی

نیاز انتخاب
یک ردیف یا ستون از آیتم‌ها flex
چیدمانی که هم‌زمان ردیف و ستون مهم است grid
تعداد ستون‌ها باید با عرض صفحه خودش عوض شود grid با auto-fill + minmax

وسط‌چین‌کردن، جایی که فرقشان کمتر به چشم می‌آید

css.flex-center { display: flex; align-items: center; justify-content: center; }
.grid-center { display: grid; place-items: center; }

برای وسط‌چین‌کردن یک آیتم داخل والدش، هر دو یک نتیجه می‌دهند و تفاوت فقط در تعداد خط‌هاست؛ grid با place-items: center در یک خط همان کاری را می‌کند که flex با دو خاصیت جدا (align-items برای عمودی، justify-content برای افقی) انجام می‌دهد. این یکی از معدود جاهایی است که واقعاً فرقی نمی‌کند کدام را انتخاب کنید؛ هر دو خوانا و هر دو درست‌اند.

اگر می‌خواهید HTML و CSS را از صفر و با پروژه‌ی واقعی تمرین کنید، دوره‌ی HTML و CSS همین دو ابزار چیدمان را کنار هم و با مثال واقعی جا می‌اندازد.

تحریریه‌ی دینا کد
نویسنده

نظرها

اولین نفری باشید که نظر می‌دهد
برای ثبت نظر وارد شوید

سؤالتان را بپرسید یا تجربه‌تان را بنویسید تا نویسنده‌ی مطلب پاسخ بدهد.

مطالب مرتبط

از همین دسته
مدیریت خطا با try و except در پایتون
آموزش

مدیریت خطا با try و except در پایتون

راهنمای گام‌به‌گام مهار خطاهای زمان اجرا در پایتون با بلوک‌های try و except همراه با بررسی خطاهای رایج و ساختار اصولی.

تحریریه‌ی دینا کد۵ دقیقه
مدیریت خطا در Rust با Result و Option
آموزش

مدیریت خطا در Rust با Result و Option

زبان Rust به جای ساختارهای سنتی استثنا از نوع‌های Result و Option برای مدیریت شفاف و پیش‌بینی‌پذیر خطاها در زمان کامپایل استفاده می‌کند.

تحریریه‌ی دینا کد۶ دقیقه
تفاوت واحدهای px و em و rem در CSS و کاربرد هرکدام
آموزش

تفاوت واحدهای px و em و rem در CSS و کاربرد هرکدام

واحدهای px، em و rem هرکدام برای بخش مشخصی از صفحه‌آرایی وب طراحی شده‌اند و انتخاب نادرست آن‌ها مقیاس‌پذیری و دسترسی‌پذیری سایت را مختل می‌کند.

تحریریه‌ی دینا کد۶ دقیقه