mask-type

زمانی که از عنصر <mask> برای ماسک کردن یک عنصر استفاده می شود ویژگی mask-type تعیین کننده حالت محتوای عنصر <mask> است که از نوع alpha باشد یا luminance.

زمانی که می خواهیم عنصری را در HTML ماسک کنیم (فرض کنید یک عنصر div) نیاز است تا از تصویری به عنوان لایه ماسک استفاده شود. این تصویر می تواند از جنس img و یا گرادینت در سی اس اس باشد. همینطور می توانیم از عنصر <mask> در SVG نیز به عنوان لایه ماسک استفاده کنیم.

حال باید مشخص شود که لایه ماسک از نوع alpha است یا luminance. اگر لایه ماسک از نوع عناصر HTML و CSS باشند مثل img و گرادینت این کار را برای عنصری که در حالت ماسک کردنش هستیم انجام می دهیم (همان div) یعنی به آن عنصر می گوییم که لایه ماسک شما از نوع مثلا alpha در نظر گرفته می شود و این کار را توسط ویژگی mask-mode انجام می دهیم.

اما اگر لایه ماسک از نوع <mask> در SVG باشد می توانیم برای لایه ماسک حالت را مشخص کنیم و این کار توسط ویژگی mask-type انجام می شود.

پس تفاوت ویژگی های mask-mode و mask-type در این است که mask-mode برای عنصری که ماسک می شود تعیین می شود و mask-type به لایه ماسک کننده تعلق می گیرد.

حال سوال پیش می آید اگر هم به عنصر ماسک شونده با mask-mode مقدار دهیم و هم به عنصر ماسک کننده (<mask>) از طریق mask-type مقداری بدهیم چه اتفاقی می افتد؟ (شیطونه میگه همه ماسک ها رو بنویسم ماست!)

در این صورت مقدار mask-mode جایگزین مقدار mask-type می شود.

قبل از هرچیزی توجه داشته باشید که در کل حالت alpha سریع تر توسط مرورگر پیاده می شود و از نظر کارایی بهینه تر از حالت luminance می باشد.

مقادیر ویژگی mask-type


mask-type: alpha | luminance

این ویژگی می تواند چند مقدار بپذیرد که مقادیر مختلف برای لایه های مختلف ماسک که توسط ویژگی mask-image تعیین می شوند استفاده می شود و مقادیر توسط ویرگول از هم جدا می شوند.

ماسک Alpha

تصویر آلفا شامل کانال آلفایی است که اطلاعات پیکسل هایی که شفاف (transparent) هستند را نگهداری می کند. به عنوان مثال تصاویر PNG می توانند از این نوع باشند. حال اگر از حالت alpha برای ماسک کردن استفاده کنیم پیکسل های آلفا به عنوان مقادیر ماسک مورد استفاده قرار می گیرند.

این یعنی هرچه حالت شیشه ای بودن یک قسمت از لایه ماسک بیشتر باشد عنصر زیرین کمتر دیده می شود. پس هرجا از لایه ماسک شیشه ای باشد همان قسمت از لایه زیرین دیده نمی شود و به اصطلاح ماسک می شود.


.masked-element {
  mask-image: url(#svgMask);
}

mask {
  mask-type: alpha;
}

تصویر زیر این موضوع را به سادگی نمایش می دهد:

 
استفاده از حالت آلفا در ماسک کردن در سی اس اس
 

همانطور که مشاهده می کنید قسمت های شفاف لایه ماسک باعث مخفی شدن عنصر زیرین خود شدند.

ماسک Luminance

luminance مقدار پیشفرض ویژگی mask-type می باشد.

زمانی که از حالت luminance برای ماسک کردن استفاده کنیم استفاده می کنیم مرورگر اینکه تصمیم بگیرد چه قسمت هایی باید ماسک شود تصویر لایه ماسک را برای خود به حالت خاکستری (gray scale) تبدیل می کند. هرچه قسمت های این لایه روشن تر باشند لایه زیرین بیشتر قابل مشاهده خواهد بود.

در نتیجه سفید یعنی لایه زیرین قابل مشاهده و سیاه یعنی لایه زیرین مخفی شود و قابل مشاهده نباشد. و قسمت های مختلف دیگر که در بین این طیف هستند بصورت نیمه شفاف بنا به مقدار luminanceشان نمایش داده خواهند شود.

همچنین در این موضوع، شفافیت یا همان کانال آلفا نیز به عنوان یک فاکتور و ضریب دخالت دارد. پس اگر آلفا صفر باشد یعنی آن قسمت از تصویر کاملا شیشه ای باشد این یعنی یک ضریب صفر و در نتیجه آن قسمت از لایه ماسک باعث مخفی شدن لایه زیرین خواهد شد. مقادیری غیر از صفر نیز تاثیر خود را خواهند داشت.


.masked-element {
  mask-image: url(#svgMask);
}

mask {
  mask-type: luminance;
}

تصویر زیر یک مثال ساده از این حالت می باشد:

 
استفاده از حالت luminance در ماسک کردن در سی اس اس
 

همانطور که مشاهده می کنید قسمت های شفاف لایه ماسک باعث مخفی شدن عنصر زیرین خود شدند و قسمت های روشن لایه ماسک لایه زیرین را هویدا می کنند.

به عنوان نمونه در مثال زیر برای لایه ماسک از یک عنصر <mask> استفاده می کنیم:


.masked-element {
  mask-image: url(#SVGMask);
}

mask {
  mask-type: alpha;
}


<mask id="SVGMask" maskContentUnits="objectBoundingBox">
  <radialGradient id="radialFill">
    <stop stop-color="white" offset="0"/>
    <stop stop-color="black" offset="1"/>
  </radialGradient>
  <circle fill="url(#radialFill)" cx="0.5" cy="0.5" r="0.5"/>
</mask>

<img class="masked-element" src="image.jpg" alt="">


پشتیبانی مرورگر ها

در حال حاضر برخی از ویژگی های ماسک کردن در هیچ مرورگری پشتیبانی نمی شود.

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *