✅ Flexbox چیست؟

Flexbox یک سیستم قدرتمند چیدمان در CSS است که طراحی صفحات وب را بسیار ساده‌تر می‌کند. با استفاده از Flexbox می‌توان المان‌ها را:

  • به‌راحتی وسط‌چین کرد (عمودی یا افقی)
  • بین آن‌ها فاصله‌گذاری مساوی ایجاد کرد
  • المان‌ها را به ابتدای یا انتهای کانتینر چسباند
  • ترتیب نمایش المان‌ها را بدون تغییر در HTML تغییر داد
  • چیدمان را ریسپانسیو و منعطف کرد

Flexbox به شما کمک می‌کند چیدمان المان‌ها را بدون نیاز به float یا position پیچیده، به شکلی ساده مدیریت کنید.


چطور Flexbox را فعال کنیم؟

برای شروع استفاده از Flexbox باید روی المان والد (کانتینر) خاصیت display: flex را اعمال کنید. تمام فرزندان مستقیم این المان، تبدیل به flex item می‌شوند.

مثال:

.container {
  display: flex;
}

ویژگی‌های اصلی Flexbox

✅ display: flex

اصلی‌ترین دستور Flexbox است که المان والد را به یک flex container تبدیل می‌کند.


جهت چیدمان المان‌ها: flex-direction

با خاصیت flex-direction مشخص می‌کنید المان‌های درون کانتینر در چه جهتی چیده شوند:

  • row → المان‌ها افقی از چپ به راست (پیش‌فرض)
  • row-reverse → افقی از راست به چپ
  • column → عمودی از بالا به پایین
  • column-reverse → عمودی از پایین به بالا

مثال:

.container {
  display: flex;
  flex-direction: row;
}

توزیع فضای افقی: justify-content

justify-content مشخص می‌کند المان‌ها در محور اصلی (main axis) چگونه قرار بگیرند:

  • flex-start → چسبیده به ابتدای کانتینر
  • flex-end → چسبیده به انتهای کانتینر
  • center → وسط کانتینر
  • space-between → فاصله مساوی بین المان‌ها (ابتدا و انتها بدون فاصله)
  • space-around → فاصله مساوی اطراف هر المان
  • space-evenly → فاصله مساوی بین المان‌ها و اطراف آن‌ها

مثال:

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

چیدمان عمودی: align-items

align-items موقعیت المان‌ها را در محور عمود بر اصلی (cross axis) کنترل می‌کند. مقادیر پرکاربرد:

  • stretch → المان‌ها ارتفاع کل کانتینر را پر می‌کنند (پیش‌فرض)
  • flex-start → المان‌ها به بالا چسبیده‌اند
  • flex-end → المان‌ها به پایین چسبیده‌اند
  • center → المان‌ها در وسط محور عمودی قرار می‌گیرند
  • baseline → خطوط متن المان‌ها هم‌تراز می‌شود

مثال:

.container {
  display: flex;
  align-items: center;
}

چیدمان چند ردیف: flex-wrap و align-content

flex-wrap

flex-wrap تعیین می‌کند اگر جای کافی نباشد، المان‌ها به خط بعدی بروند یا خیر:

  • nowrap → همه المان‌ها در یک خط می‌مانند (پیش‌فرض)
  • wrap → المان‌ها به خط بعدی می‌روند
  • wrap-reverse → المان‌ها در جهت معکوس به خط بعدی می‌روند

مثال:

.container {
  display: flex;
  flex-wrap: wrap;
}

align-content

وقتی المان‌ها به چند خط می‌روند، align-content فاصله بین ردیف‌ها را کنترل می‌کند. این ویژگی فقط زمانی عمل می‌کند که flex-wrap فعال باشد و کانتینر چند خط داشته باشد.

مقادیر پرکاربرد:

  • flex-start → ردیف‌ها در بالا جمع می‌شوند
  • flex-end → ردیف‌ها در پایین جمع می‌شوند
  • center → ردیف‌ها در وسط کانتینر قرار می‌گیرند
  • space-between → فاصله مساوی بین ردیف‌ها (بالا و پایین بدون فاصله)
  • space-around → فاصله مساوی اطراف ردیف‌ها
  • space-evenly → فاصله مساوی بین ردیف‌ها و اطرافشان
  • stretch → ردیف‌ها تمام ارتفاع کانتینر را پر می‌کنند

فاصله‌گذاری بین آیتم‌ها: gap

Flexbox به شما امکان می‌دهد بدون marginهای اضافه، بین آیتم‌ها فاصله ایجاد کنید:

.container {
  display: flex;
  gap: 20px;
}

کنترل سایز آیتم‌ها

flex-grow

flex-grow تعیین می‌کند هر آیتم چه مقدار از فضای اضافه کانتینر را بگیرد. اگر همه آیتم‌ها flex-grow: 1 داشته باشند، فضای اضافه به‌طور مساوی بین آن‌ها تقسیم می‌شود.


flex-shrink

flex-shrink مشخص می‌کند آیتم در صورت کمبود فضا چقدر کوچک شود. مقدار پیش‌فرض 1 است یعنی المان اجازه دارد کوچک شود. اگر 0 باشد، المان کوچک نمی‌شود.


flex-basis

flex-basis اندازه اولیه آیتم را مشخص می‌کند، قبل از توزیع فضای اضافه یا کمبود فضا. می‌تواند واحدی مثل px یا % باشد.

مثال:

.item {
  flex-basis: 200px;
}

فرق flex-grow و flex-basis

  • flex-basis → سایز پایه المان است
  • flex-grow → فضای اضافه بین آیتم‌ها را تقسیم می‌کند

تغییر ترتیب آیتم‌ها: order

با ویژگی order می‌توانید بدون تغییر HTML، ترتیب المان‌ها را تغییر دهید. پیش‌فرض همه آیتم‌ها order: 0 است. هرچه عدد کمتر باشد، زودتر نمایش داده می‌شود.

مثال:

.item {
  order: 2;
}

ترکیب flex-grow و flex-basis

مثلاً:

.item {
  flex-basis: 200px;
  flex-grow: 1;
}

→ آیتم حداقل 200px است، اما اگر فضای اضافه باشد، رشد می‌کند.


قانون طلایی برای طراحی ریسپانسیو

flex-grow را روی 1 بگذار وقتی می‌خواهی آیتم‌ها به‌طور مساوی فضای خالی را تقسیم کنند.


مثال کامل Flexbox

HTML

<div class="container">
  <div class="item">One</div>
  <div class="item">Two</div>
</div>

CSS بدون grow

.container {
  display: flex;
  width: 800px;
}

.item {
  width: 200px;
  background: orange;
}

→ جمع عرض دو آیتم = 400px → 400px فضای خالی باقی می‌ماند.


CSS با flex-grow

.item {
  flex-grow: 1;
}

→ آیتم‌ها فضای خالی را بین خود تقسیم می‌کنند.


محاسبه flex-grow

سهم هر آیتم = (flex-grow آن آیتم / مجموع flex-grow همه آیتم‌ها) × فضای خالی

مثال عددی:

  • .item1 → flex-grow: 1
  • .item2 → flex-grow: 3
  • فضای خالی → 400px

→ سهم .item1 = (1/4) × 400 = 100px
→ سهم .item2 = (3/4) × 400 = 300px

→ آیتم دوم سه برابر آیتم اول رشد می‌کند!


خلاصه ویژگی‌های Flexbox

ویژگیتوضیح
displayflex کانتینر را فعال می‌کند
flex-directionجهت چیدمان آیتم‌ها
justify-contentچیدمان آیتم‌ها در محور اصلی
align-itemsچیدمان آیتم‌ها در محور عمود
align-contentفاصله‌گذاری خطوط در چند ردیف
flex-wrapشکستن آیتم‌ها به چند خط
gapفاصله بین آیتم‌ها
flex-growرشد آیتم در فضای اضافه
flex-shrinkکوچک شدن آیتم در فضای کم
flex-basisاندازه اولیه آیتم
orderتغییر ترتیب آیتم‌ها بدون تغییر HTML

✅ جمع‌بندی

Flexbox ابزاری قدرتمند است که چیدمان‌های پیچیده را با ساده‌ترین کد ممکن انجام می‌دهد. اگر می‌خواهی صفحات واکنش‌گرا و حرفه‌ای بسازی، Flexbox یکی از مهم‌ترین مهارت‌هایی است که باید بلد باشی.