SVG kesish/niqoblash
SVG kesish va niqoblash (clipping va masking)
SVG elementlarini kesish va niqoblash mumkin.
<clipPath> elementi SVG elementini kesish uchun ishlatiladi.
<mask> elementi SVG elementiga niqob (mask) qo‘llash uchun ishlatiladi.
SVG kesish (clipping)
Kesish — elementning bir qismini olib tashlash demakdir.
Kesish uchun <clipPath> elementidan foydalanamiz.
<clipPath> elementi ichidagi har bir yo‘l/element tekshirilib, baholanadi. So‘ngra maqsadli elementning shu hududdan TASHQARIDA joylashgan har bir qismi chizilMAYDI (render qilinmaydi). Boshqacha aytganda: yo‘ldan tashqaridagi hamma narsa yashiriladi, ichidagi hamma narsa esa ko‘rsatiladi!
<clipPath> elementi odatda
<defs> bo‘limiga joylashtiriladi.
Keling, bir nechta misolni ko‘rib chiqamiz:
Ushbu misolda markazi (50,50) nuqtada joylashgan, radiusi 50 ga teng qizil aylana yaratamiz:
SVG kodi quyidagicha:
Misol
<svg width="200" height="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="50" fill="red" />
</svg>
Endi bitta
<rect> elementiga ega <clipPath> elementini qo‘shamiz. Bu <rect> elementi aylananing YUQORI YARMINI qoplaydi. <rect> o‘zi chizilMAYDI; buning o‘rniga uning o‘lchami va pozitsiyasi aylananing qaysi piksellari ko‘rsatilishini aniqlash uchun ishlatiladi. To‘rtburchak aylananing faqat yuqori yarmini qoplagani uchun aylananing pastki yarmi yo‘qoladi:
SVG kodi quyidagicha:
Misol
<svg width="200" height="100" xmlns="http://www.w3.org/2000/svg">
<defs>
<clipPath id="cut-bottom">
<rect x="0" y="0" width="200" height="50" />
</clipPath>
</defs>
<circle cx="50" cy="50" r="50" fill="red" clip-path="url(#cut-bottom)" />
</svg>
O‘zingiz sinab ko‘ring »
SVG niqoblash (masking)
Niqoblash uchun <mask> elementidan foydalanamiz.
<mask> elementi SVG elementiga niqob (mask) qo‘llash uchun ishlatiladi.
Niqobga mask atributi orqali murojaat qilinadi.
Quyida oddiy niqob misoli keltirilgan:
SVG kodi quyidagicha:
Misol
<svg width="200" height="120" xmlns="http://www.w3.org/2000/svg">
<defs>
<mask id="mask1">
<rect x="0" y="0" width="100" height="50" fill="white" />
</mask>
</defs>
<rect x="0" y="0" width="100" height="100" fill="red" mask="url(#mask1)" />
<rect x="0" y="0" width="100" height="100" fill="none" stroke="black" />
</svg>
O‘zingiz sinab ko‘ring »
Yuqoridagi misolda id="mask1" bilan niqob belgilanadi. <mask> elementi ichida <rect> elementi bor. Aynan shu <rect> elementi niqob shaklini belgilaydi.
Misolda niqobdan foydalanadigan <rect> elementi ham belgilangan. Niqobga mask atributi orqali murojaat qilinadi.
Qizil to‘rtburchakning balandligi 100 piksel bo‘lishi kerak, ammo vertikal bo‘yicha faqat dastlabki 50 piksel ko‘rinadi. Buning sababi — niqob to‘rtburchagining balandligi atigi 50 piksel. To‘rtburchak faqat niqob to‘rtburchagi qoplagan qismlardagina ko‘rinadi.
Oxirgi <rect> elementi shunchaki to‘rtburchakning niqobsiz o‘lchamini ko‘rsatish uchun qo‘yilgan.
Quyida niqob shaklini belgilash uchun <circle> elementidan foydalanadigan yana bir misol keltirilgan:
SVG kodi quyidagicha:
Misol
<svg width="200" height="120" xmlns="http://www.w3.org/2000/svg">
<defs>
<mask id="mask2">
<circle cx="50" cy="50" r="30" fill="white" />
</mask>
</defs>
<rect x="0" y="0" width="100" height="100" fill="red" mask="url(#mask2)" />
<rect x="0" y="0" width="100" height="100" stroke="black" fill="none"/>
</svg>
O‘zingiz sinab ko‘ring »
To‘ldirish rangi va shaffoflik
<mask> elementi ichidagi elementlarning to‘ldirish rangi niqobga murojaat qiluvchi element to‘ldirish rangining shaffoflik darajasini belgilaydi.
Yuqoridagi misollarda faqat fill="white" dan foydalandik. Niqobda oq rang ko‘rsatiladigan hudud, qora rang esa niqoblanadigan (yashiriladigan) hudud sifatida qabul qilinadi.
Rang #ffffff (oq) ga qanchalik yaqin bo‘lsa, niqob shunchalik noshaffof bo‘ladi, rang #000000 (qora) ga qanchalik yaqin bo‘lsa, niqob shunchalik shaffof bo‘ladi:
SVG kodi quyidagicha:
Misol
<svg width="200" height="120" xmlns="http://www.w3.org/2000/svg">
<defs>
<mask id="mask3">
<rect x="0" y="0" width="100" height="30" fill="#232323" />
<rect x="0" y="30" width="100" height="40" fill="#454545" />
<rect x="0" y="70" width="100" height="30" fill="#878787" />
</mask>
</defs>
<rect x="0" y="0" width="100" height="100" fill="red" mask=" url(#mask3)"/>
</svg>
O‘zingiz sinab ko‘ring »
Niqoblardagi gradientlar
Ushbu misolda niqob shakli to‘ldirish rangi sifatida gradientdan foydalanadi:
SVG kodi quyidagicha:
Misol
<svg width="200" height="120" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradient1">
<stop offset="0%" stop-color="#ffffff" />
<stop offset="100%" stop-color="#000000" />
</linearGradient>
<mask id="mask4">
<rect x="0" y="0" width="100" height="100" fill="url(#gradient1)" />
</mask>
</defs>
<rect x="0" y="0" width="100" height="100" fill="red" mask=" url(#mask4)"/>
</svg>
O‘zingiz sinab ko‘ring »
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
