مدل جعبهای CSS: اگر این را نفهمید، طراح نیستید!
مدل جعبهای CSS: اگر این را نفهمید، طراح نیستید!
مدل جعبهای CSS: همه چیز در مورد اندازه و فاصله عناصر! 📦
سلام به همه! یکی از مهمترین و بنیادیترین مفاهیم در CSS، مدل جعبهای (Box Model) هست. هر عنصر HTML در صفحه وب، مثل یه جعبه رفتار میکنه و این جعبه از چندین لایه تشکیل شده که ابعاد و فضای اطرافش رو تعیین میکنن. فهمیدن این مدل برای کنترل دقیق چیدمان و اندازهی عناصر حیاتیه. امروز میخوایم لایههای مختلف این جعبه رو بشناسیم: content، padding، border و margin.
1. Content (محتوا): قلب جعبه! ❤️
این همون محتوای اصلی عنصره که شما میبینین. برای یه تگ پاراگراف (`
`)، محتوا همون متنیه که داخلش نوشته شده. برای یه عکس (``)، محتوا خود تصویره. برای یه `div`، میتونه متن، عکس، یا حتی عناصر دیگهای باشه.
- `width` و `height`: این خصوصیتها اندازه واقعی بخش محتوا رو تعیین میکنن. اگه این خصوصیتها رو تعریف نکنین، محتوا خودش اندازه جعبه رو تعیین میکنه (برای عناصر Block-level مثل `p`).
مثال:
.my-box {
width: 200px; /* عرض بخش محتوا 200 پیکسل */
height: 100px; /* ارتفاع بخش محتوا 100 پیکسل */
background-color: lightblue; /* رنگ پسزمینه برای دیدن محتوا */
}
یادتون باشه که `width` و `height` فقط اندازه خود محتوا رو تعیین میکنن، نه کل فضای اشغال شده توسط عنصر!
2. Padding (فاصله داخلی): فضایی بین محتوا و حاشیه! 🛋️
`padding` فضاییه که بین محتوا (Content) و حاشیه (Border) قرار میگیره. این فضا داخل جعبه است و رنگ پسزمینه والد رو به خودش میگیره.
- `padding-top`, `padding-right`, `padding-bottom`, `padding-left`: برای تعیین padding در هر جهت.
- `padding` (خصوصیت خلاصهشده): برای تعیین padding در هر چهار جهت به صورت یکجا.
مثال:
.my-box {
width: 200px;
height: 100px;
background-color: lightblue;
border: 1px solid black; /* حاشیه رو هم اضافه کردیم که padding رو بهتر ببینیم */
padding: 20px; /* 20px padding در هر چهار جهت */
}
/* یا جداگانه: */
.another-box {
width: 150px;
height: 80px;
background-color: lightgreen;
border: 1px solid darkgreen;
padding-top: 10px;
padding-bottom: 30px;
padding-left: 15px;
padding-right: 15px;
}
/* یا با خلاصهنویسی: */
.complex-padding {
padding: 10px 20px 30px 40px; /* بالا، راست، پایین، چپ */
}
Padding باعث میشه محتوای شما از لبههای جعبه و حاشیه فاصله داشته باشه و خوانایی بهتری پیدا کنه.
3. Border (حاشیه/کادر): دورچین جعبه! 🖼️
`border` خطی است که دور تا دور محتوا (Content) و Padding قرار میگیره. شما میتونین ضخامت، سبک و رنگ حاشیه رو تعیین کنین.
- `border-width`: ضخامت خط حاشیه (مثلاً `1px`, `2px`).
- `border-style`: شکل خط حاشیه (`solid`, `dashed`, `dotted`, `double`, `groove`, `ridge`, `inset`, `outset`, `none`).
- `border-color`: رنگ خط حاشیه.
- `border` (خصوصیت خلاصهشده): برای تعیین هر سه مورد بالا به صورت یکجا.
مثال:
.my-box {
width: 200px;
height: 100px;
background-color: lightblue;
padding: 20px;
border: 2px solid #f44336; /* حاشیه سیاه، ضخامت 2 پیکسل، خط صاف */
}
.dotted-border {
border-width: 3px;
border-style: dotted;
border-color: purple;
}
.dashed-red-border {
border: 1px dashed red;
}
به خاطر داشته باشین که ضخامت `border` به اندازه کل عنصر اضافه میشه. اگه `width` رو 200px و `border` رو 2px تعریف کنین، عرض کلی عنصر شما 204px (200 + 2 + 2) خواهد بود. (مگر اینکه از `box-sizing: border-box;` استفاده کنین که در ادامه توضیح میدیم).
4. Margin (فاصله خارجی): فضای خالی بیرون جعبه! 🏞️
`margin` فضاییه که بیرون از حاشیه (Border) قرار میگیره. این فضا کاملاً شفاف و خالیه و برای ایجاد فاصله بین عناصر مختلف در صفحه استفاده میشه.
- `margin-top`, `margin-right`, `margin-bottom`, `margin-left`: برای تعیین margin در هر جهت.
- `margin` (خصوصیت خلاصهشده): برای تعیین margin در هر چهار جهت.
مثال:
.my-box {
width: 200px;
height: 100px;
background-color: lightblue;
padding: 20px;
border: 2px solid red;
margin: 30px; /* 30px فضای خالی در بیرون دور تا دور عنصر */
}
.different-margins {
width: 150px;
height: 80px;
background-color: lightgreen;
border: 1px solid green;
margin-top: 10px;
margin-bottom: 40px; /* فاصله بیشتر زیر این عنصر */
margin-left: 5px;
margin-right: 5px;
}
/* ترکیبی از margin و padding */
.combined-box {
width: 180px;
height: 90px;
background-color: lightcoral;
border: 1px solid darkred;
padding: 15px; /* داخلی */
margin: 25px; /* خارجی */
}
نکته مهم درباره Margin Collapse: در زبان فارسی (و سایر زبانهای راست به چپ)، margin های بالا و پایین عناصر مجاور میتونن با هم “ادغام” بشن و بزرگترین margin اعمال بشه. این رفتار گاهی میتونه گیجکننده باشه!
نکته ویژه: `box-sizing` 💡
به طور پیشفرض، `width` و `height` فقط اندازه محتوا (Content) رو تعیین میکنن و `padding` و `border` به این اندازهها اضافه میشن. این میتونه محاسبه اندازه نهایی عنصر رو سخت کنه.
با تنظیم box-sizing: border-box;، رفتار جعبه عوض میشه! در این حالت، `width` و `height` شامل `padding` و `border` هم میشن. این باعث میشه محاسبه اندازهها خیلی راحتتر بشه و به خصوص در طراحی واکنشگرا خیلی مفید و کاربردیه.
* { /* برای اعمال روی همه عناصر */
box-sizing: border-box;
}
.my-box {
width: 200px; /* عرض کلی 200 پیکسل */
height: 100px; /* ارتفاع کلی 100 پیکسل */
padding: 20px;
border: 2px solid red;
background-color: lightblue;
/* حالا عرض محتوا 156px (200 - 20 - 20) و ارتفاع محتوا 66px (100 - 20 - 20) خواهد بود. */
}
توصیه میشه که همیشه `box-sizing: border-box;` رو برای همه عناصر (یا حداقل برای عناصر اصلی صفحه) اعمال کنین تا با رفتار پیشبینیپذیرتری کار کنین.
مدل جعبهای، ستون فقرات چیدمان در CSS هست. با درک کامل `content`, `padding`, `border`, `margin` و `box-sizing`، شما کنترل کاملی روی ظاهر و جایگاه هر عنصری در صفحه خواهید داشت. حسابی باهاش تمرین کنین! 👍
مقالات مرتبط
آخرین مقالات
کدهای تمیز: با متغیرها، CSS را هوشمند کنید! 💡
متغیرهای CSS (Custom Properties): کد تمیزتر، مدیریت راحتتر! 🎨 سلام به همگی! توی پروژههای CSS، خیلی وقتا پیش میاد که یه رنگ، یه فونت، یا یه فاصله رو بارها و بارها توی جاهای مختلف استفاده میکنیم. مثلاً رنگ اصلی سایتمون...
ساخت انیمیشنهای حرفهای با @keyframes (گام به گام)
CSS Animations: خلق انیمیشنهای پیچیده با @keyframes! 🎬 سلام به همگی! تا الان با Transitionها آشنا شدیم که تغییرات بین دو حالت رو نرم میکنن. اما اگه بخوایم انیمیشنهای پیچیدهتر، چند مرحلهای، یا حتی انیمیشنهایی که مدام تکرار میشن رو...
دگرگونی سایت با CSS: چرخش، تغییر اندازه و جابجایی
CSS Transforms: جابجایی، چرخش، تغییر اندازه و کج کردن عناصر! 🤸♀️ سلام دوستان! تا اینجا با انیمیشنهای نرم و پیوسته (Transitions) آشنا شدیم. اما گاهی وقتها نیاز داریم که عناصر HTML رو جابجا کنیم، بچرخونیم، اندازهشون رو عوض کنیم یا...
انتقالهای نرم: عناصر خود را متحرک کنید!
CSS Transitions: جادوی حرکت نرم و روان! ✨ سلام به همه! تا حالا شده یه سایت رو ببینید که با هاور کردن روی یه دکمه، رنگش نرم و قشنگ عوض میشه؟ یا با تغییر اندازه یه عنصر، انیمیشن ظریفی رو...