SVG kesish/niqoblash


ULASHISH

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:

Sorry, your browser does not support inline SVG.

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:

Sorry, your browser does not support inline SVG.

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:

Sorry, your browser does not support inline SVG.

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:

Sorry, your browser does not support inline SVG.

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:

Sorry, your browser does not support inline SVG.

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:

Sorry, your browser does not support inline SVG.

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!