Grid advanced
Энэ хичээлд Grid-ийн дэвшилтэт боломжуудыг судална: item-ийг олон нүдэнд дэлгэх, автомат responsive grid үүсгэх, minmax() ашиглах.
grid-column ба grid-row — нүд заах
Grid item хаанаас хаана хүртэл байрлахаа тодорхойлж болно. Grid-ийн шугамыг 1-ээс тоолно:
.item {
grid-column: 1 / 3; /* 1-р шугамаас 3-р шугам хүртэл = 2 багана */
grid-row: 1 / 2; /* 1-р шугамаас 2-р шугам хүртэл = 1 мөр */
}
Шугам: 1 2 3 4
| | | |
Мөр 1: +----+----+----+
| 1/3 багана |
Мөр 2: +----+----+----+
span — хэдэн нүд эзлэх
Шугамын дугаарыг мэдэхгүй байхад span ашиглах нь тохиромжтой:
.item {
grid-column: span 2; /* 2 багана эзлэнэ */
grid-row: span 3; /* 3 мөр эзлэнэ */
}
/* Эхлэх цэг + span хослуулах */
.item {
grid-column: 2 / span 3; /* 2-р шугамаас эхлэн 3 багана */
}
Жишээ — gallery:
.gallery {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12px;
}
.featured {
grid-column: span 2; /* онцлох зураг 2 дахин өргөн */
grid-row: span 2; /* 2 дахин өндөр */
}
<div class="gallery">
<div class="featured">Том зураг</div>
<div>Жижиг 1</div>
<div>Жижиг 2</div>
<div>Жижиг 3</div>
<div>Жижиг 4</div>
</div>
minmax() — хамгийн бага ба их хэмжээ
Баганын хамгийн бага ба хамгийн их хэмжээг зэрэг тодорхойлно:
.container {
display: grid;
/* Баганын өргөн хамгийн багадаа 200px, ихдээ 1fr */
grid-template-columns: repeat(3, minmax(200px, 1fr));
/* Мөрийн өндөр хамгийн багадаа 100px, ихдээ автомат */
grid-template-rows: repeat(3, minmax(100px, auto));
}
auto-fill — автоматаар дүүргэх
Хэдэн багана байхыг тодорхойлохгүйгээр боломжтой бол аль болох олон багана үүсгэнэ:
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 16px;
}
/* Дэлгэц өргөн байвал олон багана, нарийн байвал цөөн багана — автомат! */
auto-fit — хоосон баганыг хаах
auto-fill-тэй ижил боловч item цөөн байвал хоосон баганыг хааж, үлдсэн item-ийг тэлдэг:
/* auto-fill: хоосон багана үлдэнэ */
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
/* auto-fit: хоосон баганыг хаана, item-ууд тэлнэ */
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
Хэзээ аль нь:
auto-fill— тогтмол grid хэмжээтэй байх шаардлагатай үедauto-fit— item-ууд дэлгэцийг дүүргэх ёстой үед
Implicit vs explicit grid
grid-template-columns/rows-д тодорхойлсон grid нь explicit (тодорхой) grid юм. Тодорхойлсноос илүү item байвал Grid автоматаар implicit (далд) grid үүсгэнэ:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 багана тодорхойлсон */
/* 6 item байвал 2 мөр автомат үүснэ */
}
Implicit мөрийн хэмжээг grid-auto-rows-аар удирдна:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: minmax(120px, auto); /* автоматаар үүссэн мөр бүрийн өндөр */
}
Бодит жишээ — responsive card grid
/* Media query хэрэгтэйгүй! */
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
grid-auto-rows: minmax(180px, auto);
gap: 20px;
padding: 20px;
}
.card {
background: #0f172a;
border: 1px solid #1e293b;
border-radius: 12px;
padding: 24px;
}
/* Онцлох карт: 2 баганад дэлгэнэ */
.card-featured {
grid-column: span 2;
}
<div class="card-grid">
<div class="card card-featured">Онцлох мэдээ</div>
<div class="card">Энгийн карт</div>
<div class="card">Энгийн карт</div>
<div class="card">Энгийн карт</div>
</div>
Дараагийн хичээлд:
Responsive дизайны үндэс — fluid layout, flexible image, viewport unit (vw, vh) болон media query-г судална. Desktop-first ба mobile-first хоёр аргын ялгааг тайлбарлана.