آموزش کامل display در CSS

این جلسه ادامه دوره کامل آموزش CSS آوای وبه. تو جلسه پنجم یاد گرفتیم هر عنصر از چهار لایه Content، Padding، Border و Margin تشکیل شده. حالا وقتشه با display در CSS کامل آشنا بشیم — یعنی بفهمیم این باکسها اصلاً چطور رفتار کنن و کنار هم قرار بگیرن.
آنچه در این مقاله میخوانید:
اگه Box Model بگه «هر عنصر چه شکلیه»، display میگه «این عنصر تو صفحه چطور جا میگیره». همین یه ویژگی، پایهی تقریباً هر تصمیم چیدمانی (Layout) تو CSSه.
🎯 اهداف یادگیری این جلسه
- فرق دقیق Block، Inline و Inline-block رو با مثال بفهمی
- با
display: none،list-itemو مقادیر مرتبط با جدول آشنا بشی flow-rootرو بهعنوان راهحل مدرن مشکل قدیمی Clearfix یاد بگیری- با سینتکس دو-مقداری جدید display (مثل
inline flex) آشنا بشی - یه مرجع کامل از تمام مقادیر display و کاربردشون داشته باشی
📦 display در CSS دقیقاً چیه؟
هر عنصر HTML یه مقدار display پیشفرض داره که مرورگر خودش تعیین میکنه (مثلاً <div> پیشفرضش blockه و <span> پیشفرضش inline). ولی تو با CSS میتونی این رفتار پیشفرض رو کامل عوض کنی.
🧱 Block — عنصرهای بلوکی
div {
display: block;
}- همیشه یه خط جدید شروع میشه (عنصر بعدی مجبوره بره خط پایین)
- بهطور پیشفرض کل عرض والدش رو میگیره
- Margin و Padding عمودی کامل و بدون استثنا اثر میذاره
مثالهای پیشفرض Block: <div>, <p>, <h1> تا <h6>, <section>, <ul>, <li>.
➖ Inline — عنصرهای درونخطی
span {
display: inline;
}<p>این یه متنه با یه <span>کلمهی خاص</span> وسطش.</p>- خط جدید شروع نمیکنه؛ کنار عناصر دیگه، تو جریان متن قرار میگیره
- فقط به اندازهی محتواش عرض میگیره، نه بیشتر
widthوheightروش اصلاً اثر نمیذاره- Margin و Padding عمودی روش اعمال میشه ولی رو چیدمان عناصر بالا/پایین اثر بصری واقعی نداره
مثالهای پیشفرض Inline: <span>, <a>, <strong>, <em>, <img>.
⚡ Inline-block — بهترین هر دو دنیا
.badge {
display: inline-block;
width: 100px;
padding: 10px;
margin: 5px;
}- مثل Inline، کنار عناصر دیگه قرار میگیره
- مثل Block،
width/heightو Margin/Padding عمودی کامل روش اثر داره
کاربرد کلاسیک: دکمهها، بجها (Badge)، یا آیتمهای منویی که باید کنار هم بشینن ولی هرکدوم اندازهی ثابت خودشون رو داشته باشن.
⚠️ نکتهی عملی مهم: وقتی چند عنصر inline-block رو تو HTML پشت سر هم مینویسی، اگه بینشون فاصله (Enter یا Space) باشه، مرورگر یه فاصلهی سفید کوچیک واقعی بینشون میذاره. راهحل امروزیش استفاده از Flexbox بهجای inline-blockه.
📊 جدول مقایسه Block، Inline و Inline-block
| ویژگی | Block | Inline | Inline-block |
|---|---|---|---|
| خط جدید شروع میکنه؟ | ✅ بله | ❌ خیر | ❌ خیر |
width/height اثر داره؟ | ✅ بله | ❌ خیر | ✅ بله |
| Margin/Padding عمودی | ✅ کامل | ⚠️ ظاهری، بدون هول دادن | ✅ کامل |
| عرض پیشفرض | کل والد | بهاندازهی محتوا | بهاندازهی محتوا |
👻 display: none — حذف کامل از چیدمان
.hidden {
display: none;
}همونطور که تو جلسه Box Model بررسی کردیم، این مقدار عنصر رو کاملاً از محاسبات Layout حذف میکنه — نه دیده میشه، نه فضایی میگیره.
🧹 flow-root — راهحل مدرن یه مشکل قدیمی
.parent {
border: 2px solid black;
}
.child {
float: left;
width: 100px;
height: 100px;
}<div class="parent">
<div class="child"></div>
</div>مشکل: وقتی همهی فرزندهای یه والد float داشته باشن، والد «فرومیپاشه» — ارتفاعش صفر میشه، انگار هیچ فرزندی نداره! سالها این مشکل رو با ترفند «Clearfix» حل میکردن.
راهحل مدرن:
.parent {
display: flow-root;
}همین یه خط، بدون هیچ ترفند اضافه، مشکل رو کامل حل میکنه.
🔀 سینتکس دو-مقداری display (Display Level 3)
.box {
display: inline flex;
}معادل مقدار قدیمیتر inline-flexه، ولی خواناتره: «بیرون مثل Inline، داخل مثل Flex Container».
| مقدار قدیمی (تککلمهای) | معادل جدید (دو-کلمهای) |
|---|---|
block | block flow |
inline-block | inline flow-root |
flex | block flex |
inline-flex | inline flex |
grid | block grid |
📋 جدول جامع تمام مقادیر Display در CSS
علاوه بر مقادیر پرکاربردی که بالاتر با مثال دیدیم، CSS مقادیر تخصصیتر دیگهای هم داره:
| مقدار | توضیح کوتاه | کاربرد اصلی |
|---|---|---|
block | عنصر بلوکی، خط جدید میگیره | ساختار کلی صفحه (div, section) |
inline | درونخطی، تو جریان متن | تاکید روی بخشی از متن (span, a) |
inline-block | ترکیب inline + قابلیت تنظیم اندازه | دکمهها، بجها، آیتم منو |
none | کاملاً از Layout حذف میشه | مخفیکردن کامل عنصر |
flow-root | یه Block Formatting Context جدید میسازه | حل مشکل فروپاشی ارتفاع والد با فرزند float |
flex | والد رو Flex Container میکنه | چیدمان یکبعدی، مثل نوار navbar |
inline-flex | مثل flex ولی خودش inline رفتار میکنه | یه گروه دکمه کنار متن دیگه |
grid | والد رو Grid Container میکنه | چیدمان دوبعدی، مثل صفحهبندی کامل سایت |
inline-grid | مثل grid ولی خودش inline رفتار میکنه | یه جدول کوچیک وسط یه پاراگراف |
list-item | مثل آیتم لیست، با Marker | پیشفرض li، یا شبیهسازی لیست |
table | رفتار مثل تگ table | شبیهسازی رفتار جدول بدون HTML جدولی |
table-row | رفتار مثل tr | مکمل table برای ردیفها |
table-cell | رفتار مثل td | وسطچین عمودی محتوا (روش قدیمی) |
table-column | رفتار مثل col | تعریف عرض یکنواخت ستونها |
table-caption | رفتار مثل caption | عنوان بالای یه جدول شبیهسازیشده |
contents | باکس خود عنصر حذف میشه، فرزندان میمونن | حذف یه wrapper از محاسبات چیدمان |
ruby | برای متنهای حاشیهنویسی | سایتهای چندزبانه با نیاز به توضیح تلفظ |
برای اکثر پروژههای امروزی، فقط ۶-۷ مورد اول این جدول (block, inline, inline-block, none, flow-root, flex, grid) رو زیاد استفاده میکنی؛ بقیه بیشتر تو موارد خاص یا پروژههای قدیمیتر کاربرد دارن.
🧩 و اما Flexbox و Grid…
احتمالاً متوجه شدی که هنوز به display: flex و display: grid عمیق نپرداختیم — کاملاً عمدیه. این دو تا آنقدر قدرتمند و پرکاربردن که هرکدوم لایق یه فصل کامل و مستقل تو این دورهان. فعلاً همینقدر بدون: هر دو، والد رو به یه «Container» تبدیل میکنن که فرزندهاش رو با قوانین چیدمانی کاملاً جدید کنترل میکنه.
🧪 تمرین این جلسه
یه لیست از ۴ تا <div> با کلاس item بساز. با CSS:
- اول همه رو
display: blockکن و ببین هرکدوم خط جدا میگیرن - بعد به
inline-blockتغییرشون بده، یهwidthوmarginبهشون بده - یه
<div class="wrapper">دور یه عنصرfloat: leftبساز؛ اول بدونflow-rootارتفاعش رو چک کن (باید صفر باشه)، بعدdisplay: flow-rootاضافه کن و فرقش رو ببین
❓ سوالات متداول
فرق inline و inline-block تو یه جمله چیه؟
هر دو کنار عناصر دیگه قرار میگیرن، ولی فقط inline-block به width/height و margin/padding عمودی احترام کامل میذاره؛ inline اینها رو نادیده میگیره.
چرا بین عناصر inline-block من یه فاصلهی عجیب هست؟
چون فاصله (Enter/Space) بین تگهای HTMLت، توسط مرورگر بهعنوان یه فاصلهی واقعی رندر میشه. راهحل رایجتر امروزی: استفاده از display: flex بهجای inline-block.
flow-root چه فرقی با overflow: hidden داره؟
overflow: hidden هم مشکل فروپاشی ارتفاع رو حل میکنه، ولی هر محتوایی که بخواد از مرزهای والد بیرون بزنه (مثل Dropdown) رو هم میبُرّه. flow-root این عارضهی جانبی رو نداره.
🎯 جمعبندی و قدم بعدی
حالا با مهمترین مقادیر display در CSS آشنا شدی: Block، Inline، Inline-block، none، flow-root، مقادیر جدولی، و سینتکس مدرن دو-مقداری. جلسه بعد میریم سراغ Positioning.
جلسه هفتم: آموزش کامل Position در CSS ←
💬 نوبت توئه!
قبل از این جلسه با flow-root آشنا بودی یا همیشه از overflow: hidden یا clearfix استفاده میکردی؟ همین پایین برامون بنویس 🚀
