Margin ба padding
Box model-ийн хамгийн байнга тохируулдаг хоёр property бол margin ба padding юм. Хоёулаа зай үүсгэдэг ч байрлал нь өөр — padding дотогш, margin гадагш.
Padding — дотоод зай
Content болон border хоорондын зай. Дэвсгэрийн өнгийг агуулна.
.card {
background-color: #0f172a;
padding-top: 16px;
padding-right: 24px;
padding-bottom: 16px;
padding-left: 24px;
}
Margin — гадна зай
Элементийн гадна, бусад элементтэй хоорондын зай. Дэвсгэрийн өнгийг агуулдаггүй — тунгалаг байна.
.card {
margin-top: 8px;
margin-right: 0;
margin-bottom: 16px;
margin-left: 0;
}
Shorthand бичих арга
Дөрвөн талыг тусад нь бичихийн оронд нэг мөрт товчилж болно:
/* 4 тусдаа утга: top right bottom left (цагийн зүүний дагуу) */
.box {
padding: 8px 16px 8px 16px;
margin: 16px 24px 16px 24px;
}
/* 2 утга: top+bottom left+right */
.box {
padding: 8px 16px; /* дээд/доод 8px, зүүн/баруун 16px */
margin: 16px 0; /* дээд/доод 16px, зүүн/баруун 0 */
}
/* 3 утга: top left+right bottom */
.box {
padding: 8px 16px 24px;
}
/* 1 утга: бүх тал ижил */
.box {
padding: 16px; /* дөрвөн тал бүгд 16px */
margin: 8px; /* дөрвөн тал бүгд 8px */
}
auto margin — голлуулах
margin: auto нь боломжтой зайг тэнцүү хуваана. Блок элементийг хэвтээгээр голлуулахад ашиглана:
/* Хуудасны голд байрлуулах */
.container {
width: 100%;
max-width: 768px;
margin-left: auto;
margin-right: auto;
/* Товчоор: */
margin: 0 auto;
}
Анхаар: margin: auto нь босоо (top/bottom) голлуулалтад ажиллахгүй — flexbox шаарддаг.
margin collapse
Хоёр блок элементийн босоо margin-ууд нэгдэн (хамгийн том утгаар) нэг болдог — энэ үзэгдлийг margin collapse гэнэ.
.box-a {
margin-bottom: 32px;
}
.box-b {
margin-top: 16px;
}
/* Хоёрын хоорондох зай 32px+16px=48px БИШ, харин max(32, 16)=32px болно */
Margin collapse зөвхөн босоо чиглэлд, зэргэлдээ блок элементүүдийн хооронд тохиолддог. Padding-д тохиолддоггүй.
Collapse-аас зайлсхийх арга:
/* Flexbox эцэг элемент collapse үүсгэдэггүй */
.parent {
display: flex;
flex-direction: column;
gap: 16px; /* margin-ийн оронд gap ашиглах */
}
gap — орчин үеийн зай тохируулга
Flexbox болон Grid-д margin-ийн оронд gap ашиглах нь илүү цэвэрхэн:
.nav {
display: flex;
gap: 16px; /* хүүхэд элементүүдийн хоорондох зай */
}
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px; /* мөр болон багана хоёулаа */
row-gap: 16px; /* зөвхөн мөр хоорондын зай */
column-gap: 24px; /* зөвхөн багана хоорондын зай */
}
Практик жишээ
/* Хуудасны дэвсгэр */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
/* Гол агуулгын контейнер */
.container {
max-width: 1024px;
margin: 0 auto;
padding: 0 16px; /* гар утасны талын зай */
}
/* Хэсгийн зай */
.section {
padding: 64px 0;
}
/* Карт */
.card {
background-color: #0f172a;
border: 1px solid #1e293b;
border-radius: 12px;
padding: 24px;
margin-bottom: 16px;
}
/* Карт дотор гарчиг */
.card h3 {
font-size: 1.25rem;
color: #f1f5f9;
margin-bottom: 8px; /* гарчиг болон текстийн хооронд зай */
}
/* Товч бүлэг */
.button-group {
display: flex;
gap: 12px;
margin-top: 20px;
}
Хэзээ padding, хэзээ margin?
- Padding: элементийн дотоод "амьсгал" — дэвсгэрийн өнгө, border-ийн дотор байх зай
- Margin: элементүүдийн хоорондох зай — хуваалт, зогсоол
Практик дүрэм: Padding нь харагдах хэсгийн дотор, margin нь элементүүд хоорондын гадна зай.
Дараагийн хичээлд:
border болон border-radius property-уудыг дэлгэрэнгүй үзнэ — хүрээний зузаан, хэлбэр, өнгийг тохируулах болон элементийг тойруулах талаар судална.