Clip-path ба mask
Элементийг хайрцаг хэлбэрт биш, дурын хэлбэрт тайрах боломж олгодог хоёр хүчирхэг арга: clip-path ба mask-image.
clip-path — хэлбэрт тайрах
clip-path нь элементийн харагдах хэсгийг тодорхойлно. Хэлбэрийн гадна хэсэг нуугдана.
inset() — тэгш өнцөгт тайрах
Дөрвөн талаас тайрна:
/* inset(дээш баруун доош зүүн) */
.тайрсан {
clip-path: inset(10px 20px 10px 20px);
}
/* Товч бичлэг */
.тэгш {
clip-path: inset(20px);
}
/* Булан дугуйлсан */
.дугуй-булан {
clip-path: inset(0 round 16px);
}
circle() — тойрог
/* clip-path: circle(радиус at X Y) */
.тойрог {
clip-path: circle(50%); /* голд, ширхэгт бол бүрэн тойрог */
}
.жижиг-тойрог {
clip-path: circle(40% at 50% 50%); /* голд 40% радиустай */
}
.булангийн-тойрог {
clip-path: circle(60% at 0% 100%); /* зүүн доод буланд */
}
ellipse() — эллипс
.эллипс {
clip-path: ellipse(60% 40% at 50% 50%);
/* X радиус, Y радиус, байрлал */
}
polygon() — олон өнцөгт
Цэгүүдийг жагсааж дурын хэлбэр үүсгэнэ:
/* Гурвалжин */
.гурвалжин {
clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
/* Ромб */
.ромб {
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
}
/* Зургаан өнцөгт */
.зургаан {
clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);
}
/* Одны хэлбэр */
.од {
clip-path: polygon(
50% 0%,
61% 35%,
98% 35%,
68% 57%,
79% 91%,
50% 70%,
21% 91%,
32% 57%,
2% 35%,
39% 35%
);
}
/* Налуу тайрах */
.налуу {
clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%);
}
path() — SVG зам
Нарийн дурын хэлбэрт:
.дурын-хэлбэр {
clip-path: path("M 10 10 L 90 10 L 50 90 Z");
}
clip-path animate хийх
.хувирах {
clip-path: circle(0% at 50% 50%);
transition: clip-path 0.5s ease;
}
.хувирах:hover {
clip-path: circle(100% at 50% 50%);
}
Hover дэлгэрэх эффект:
.зураг {
clip-path: inset(0 50% 0 50%); /* голоос хоёр тал агшсан */
transition: clip-path 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.зураг:hover {
clip-path: inset(0 0% 0 0%); /* бүрэн дэлгэрнэ */
}
mask-image — зургаар нуух
mask-image нь зураг буюу gradient-аар элементийн харагдах хэсгийг тодорхойлно. Цагаан хэсэг харагдана, хар хэсэг нуугдана.
.маск {
mask-image: url("/маск.svg");
mask-size: cover;
mask-repeat: no-repeat;
}
Gradient маск
Gradient-аар нуух — жишээ нь доод хэсэг аажим нуугдах:
/* Доод хэсэг нуугдах */
.аажим-нуугдах {
mask-image: linear-gradient(to bottom, black 60%, transparent 100%);
}
/* Хоёр талаас нуугдах */
.хоёр-тал {
mask-image: linear-gradient(
to right,
transparent 0%,
black 15%,
black 85%,
transparent 100%
);
}
/* Тойрог маск — голд харагдаж, захаас нуугдах */
.тойрог-маск {
mask-image: radial-gradient(circle, black 50%, transparent 75%);
}
Текстийн маск — gradient текст
.gradient-текст {
background: linear-gradient(135deg, #a78bfa, #f472b6, #60a5fa);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
mask-size ба mask-position
background-size, background-position-тай ижил синтакс:
.маск {
mask-image: url("/дугуй-маск.svg");
mask-size: 80% 80%;
mask-position: center;
mask-repeat: no-repeat;
}
SVG clip — нарийн хяналт
SVG <clipPath> элементийг HTML-тай хослуулж ашиглаж болно:
<svg width="0" height="0">
<defs>
<clipPath id="миний-маск">
<circle cx="100" cy="100" r="80" />
</clipPath>
</defs>
</svg>
<div style="clip-path: url(#миний-маск)">
<!-- энэ div тойрог хэлбэрт тайрагдана -->
</div>
.svg-clip {
clip-path: url(#миний-маск);
}
clip-path vs overflow: hidden
/* overflow: hidden — зөвхөн тэгш өнцөгт (border-radius-тай) */
.хайрцаг {
overflow: hidden;
border-radius: 50%; /* тойрог */
}
/* clip-path — дурын хэлбэр */
.дурын {
clip-path: polygon(50% 0%, 0% 100%, 100% 100%); /* гурвалжин */
}
overflow: hidden нь хүүхэд элементүүдийн тоглоомыг нуудаг. clip-path нь зөвхөн тухайн элементийн харагдах хэсгийг тайрдаг — хүүхдүүдэд нөлөөлдөг ч арга өөр.
Бодит жишээ
/* Hero хэсгийн налуу хил */
.hero {
clip-path: polygon(0 0, 100% 0, 100% 88%, 0 100%);
background: linear-gradient(135deg, #0b1120, #0f172a);
padding: 120px 24px 160px;
}
/* Дугуй зургийн аватар */
.аватар {
width: 80px;
height: 80px;
clip-path: circle(50%);
}
/* Хуудасны шилжилтийн эффект */
.хуудас {
clip-path: inset(0 0 0 0);
transition: clip-path 0.6s ease;
}
.гарах {
clip-path: inset(0 0 100% 0); /* дээш нуугдана */
}
/* Текстийн доод хэсгийн аажим нуугдах */
.урт-текст {
max-height: 200px;
mask-image: linear-gradient(to bottom, black 60%, transparent 100%);
overflow: hidden;
}
Дараагийн хичээлд:
CSS функцүүд — calc(), min(), max(), clamp() — динамик, уян хатан утгуудыг хэрхэн тооцоолохыг судална.