Overflow ба scroll
Элементийн агуулга тогтоосон хэмжээнд багтахгүй болоход хэрхэн зохицуулах — энэ бол overflow-ийн ажил.
overflow гэж юу вэ?
Элементэд width ба height тогтоосон боловч агуулга илүү их болвол overflow буюу хальж гарна:
.хайрцаг {
width: 200px;
height: 100px;
/* агуулга 100px-ийг давбал яах вэ? */
}
overflow-ийн дөрвөн утга
visible (анхдагч)
Агуулга хальж гарах боловч харагдсаар байна:
.харагдана {
overflow: visible; /* анхдагч — бичихгүй ч ижил */
}
hidden — нуух
Хальсан хэсгийг нуух:
.нуух {
width: 200px;
height: 100px;
overflow: hidden;
}
Хэрэглэх тохиолдол:
- Зургийн
border-radiusзөв харагдуулах - Гулсах animation-д хэрэглэгдэх container
- Текстийн нэг мөрт хязгаарлах
scroll — гүйлгэх мөр байнга
Агуулга багтах ч гэсэн гүйлгэх мөр байнга харагдана:
.гүйлгэх-мөр {
overflow: scroll;
}
auto — шаардлагатай үед гүйлгэх мөр
Агуулга хальсан тохиолдолд л гүйлгэх мөр гарна — хамгийн ашигтай утга:
.ухаалаг {
height: 300px;
overflow: auto;
}
overflow-x ба overflow-y — тусдаа тохиргоо
Хэвтээ ба босоо тэнхлэгт тусдаа тохируулна:
/* Босоо гүйлгэх, хэвтээ нуух */
.зөвхөн-доош {
overflow-x: hidden;
overflow-y: auto;
}
/* Хэвтээ гүйлгэх, босоо нуух */
.хэвтээ-гүйлгэх {
overflow-x: auto;
overflow-y: hidden;
}
Хэвтээ гүйлгэх жишээ — картууд жагсаалт:
.карт-жагсаалт {
display: flex;
gap: 16px;
overflow-x: auto;
overflow-y: hidden;
padding-bottom: 8px; /* гүйлгэх мөр зайтай байхын тулд */
}
.карт-жагсаалт .карт {
flex-shrink: 0; /* картыг жижигрүүлэхгүй */
width: 240px;
}
text-overflow — текстийн хэтрэлт
Нэг мөрт текст хэт урт болоход хэрхэн үзүүлэхийг тодорхойлно.
text-overflow ажиллахын тулд гурван property хамтдаа бичнэ:
.нэг-мөр {
white-space: nowrap; /* мөр таслахгүй */
overflow: hidden; /* хальсан хэсгийг нуух */
text-overflow: ellipsis; /* ... үзүүлэх */
}
/* Жишээ: картын гарчиг */
.карт-гарчиг {
font-size: 18px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
text-overflow-ийн утгууд
.хуваах {
text-overflow: clip;
} /* таслах — анхдагч */
.цэг-цэг {
text-overflow: ellipsis;
} /* ... нэмэх */
Олон мөрт ellipsis
Нэг мөр биш, гурван мөрт хязгаарлах:
.гурван-мөр {
display: -webkit-box;
-webkit-line-clamp: 3; /* хэдэн мөр */
-webkit-box-orient: vertical;
overflow: hidden;
}
scroll-behavior — гүйлгэх хэлбэр
Хуудас дотор холбоосоор үсрэх үед жигд гүйлгэнэ:
html {
scroll-behavior: smooth; /* жигд гүйлгэх */
}
/* Анхдагч — шууд үсрэх */
html {
scroll-behavior: auto;
}
HTML холбоосуудтай хамтдаа:
<a href="#холбоос-хэсэг">Тэнд очих</a>
<section id="холбоос-хэсэг">
<!-- scroll-behavior: smooth бол жигд гүйлгэнэ -->
</section>
Гүйлгэх мөрийн загвар
Вэбкит хөтчүүдэд (Chrome, Safari, Edge) гүйлгэх мөрийг загварчлах боломжтой:
/* Нарийн, хар дэвсгэртэй гүйлгэх мөр */
.гүйлгэх-хайрцаг::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.гүйлгэх-хайрцаг::-webkit-scrollbar-track {
background: #0f172a;
}
.гүйлгэх-хайрцаг::-webkit-scrollbar-thumb {
background: #1e293b;
border-radius: 3px;
}
.гүйлгэх-хайрцаг::-webkit-scrollbar-thumb:hover {
background: #475569;
}
Firefox-д:
.гүйлгэх-хайрцаг {
scrollbar-width: thin;
scrollbar-color: #1e293b #0f172a;
}
Гүйлгэх snap
Гүйлгэх үед тодорхой байрлалд тогтоно — slider, carousel-д хэрэглэнэ:
/* Container */
.slider {
display: flex;
overflow-x: auto;
scroll-snap-type: x mandatory;
gap: 16px;
}
/* Дотоод элемент */
.слайд {
flex-shrink: 0;
width: 100%;
scroll-snap-align: start;
}
Бодит жишээ: Мессежийн жагсаалт
/* Мессежийн container — доошоо гүйлгэдэг */
.мессеж-хайрцаг {
height: 400px;
overflow-y: auto;
overflow-x: hidden;
padding: 16px;
display: flex;
flex-direction: column;
gap: 8px;
scrollbar-width: thin;
scrollbar-color: #1e293b #0f172a;
}
/* Хэрэглэгчийн нэр — нэг мөрт хязгаарлах */
.хэрэглэгч-нэр {
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 150px;
}
/* Мессежийн preview — гурван мөр */
.мессеж-preview {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
color: #94a3b8;
font-size: 14px;
}
Нийтлэг алдаа
/* БУРУУ — overflow: hidden border-radius-ийн дотор */
.карт {
border-radius: 12px;
/* overflow: hidden байхгүй бол дотрын зураг буланг дагахгүй */
}
/* ЗӨВ */
.карт {
border-radius: 12px;
overflow: hidden; /* ← зургийг буланд нийцүүлнэ */
}
Дараагийн хичээлд:
z-index ба stacking context — давхарласан элементүүдийн дараалал, аль нь дээр харагдахыг хэрхэн удирдахыг судална.