CSS' maskeleme resmi özelliği ile resimlere efekt uygulayın

CSS maskeleme, size bir görseli maske katmanı olarak kullanma seçeneği sunar. Bu, resim düzenleyici olmadan ilginç efektler oluşturmak için maskeniz olarak bir resim, SVG veya gradyan kullanabileceğiniz anlamına gelir.

clip-path özelliğini kullanarak bir öğeyi kırptığınızda kırpılan alan görünmez hale gelir. Bunun yerine, resmin bir kısmını opak yapmak veya başka bir efekt uygulamak isterseniz maskelemeyi kullanmanız gerekir. Bu yayında, CSS'de mask-image özelliğinin nasıl kullanılacağı açıklanmaktadır. maske katmanı olarak kullanılacak bir resim belirtmenizi sağlar. Bu size üç seçenek sunar. Bir resim dosyasını maskeniz, SVG veya gradyan olarak kullanabilirsiniz.

Tarayıcı uyumluluğu

Çoğu tarayıcı, standart CSS maskeleme özelliğini yalnızca kısmi destekler. En iyi tarayıcı uyumluluğu için standart mülke ek olarak -webkit- ön ekini de kullanmanız gerekir. Tarayıcıyla ilgili tüm bilgiler için CSS Maskelerini kullanabilir miyim? bölümüne bakın.

Tarayıcı Desteği

  • 120
  • 120
  • 53
  • 15,4

Kaynak

Önekli özelliği kullanan tarayıcı desteği iyi olsa da bir resmin üzerinde metin görünmesi için maskeleme kullanırken maskeleme kullanılamadığında ne olacağına dikkat edin. mask-image veya -webkit-mask-image desteğini tespit etmek için özellik sorguları kullanmak yararlı olabilir ve maskelenmiş sürümünüzü eklemeden önce okunabilir bir yedek sağlayın.

@supports(-webkit-mask-image: url(#mask)) or (mask-image: url(#mask)) {
  /* code that requires mask-image here. */
}

Resimle maskeleme

mask-image özelliği, background-image özelliğine benzer şekilde çalışır. Bir resmi iletmek için url() değeri kullanın. Maske resminizin şeffaf veya yarı şeffaf bir alanı olmalıdır.

Tamamen şeffaf bir alan, o alanın altındaki resmin bir kısmının görünmez olmasına neden olur. Ancak yarı saydam bir alan kullanmak, orijinal resmin bir kısmının görünmesine olanak tanır. Farkı aşağıdaki Glitch'te görebilirsiniz. İlk görüntü, maskesi olmayan balonların orijinal resmi. İkinci resmin tamamen şeffaf arka planı üzerinde beyaz yıldız bulunan bir maske uygulanmış. Üçüncü resmin arka planı üzerinde, gradyan şeffaflığına sahip beyaz bir yıldız var.

Bu örnekte, cover değeriyle mask-size özelliğini de kullanıyorum. Bu özellik, background-size ile aynı şekilde çalışır. cover ve contain anahtar kelimelerini kullanabilir veya geçerli herhangi bir uzunluk birimi ya da yüzde kullanarak arka plana boyut verebilirsiniz.

Bir arka plan resmini tekrarlıyormuş gibi maskenizi de tekrarlayabilirsiniz. kullanarak küçük bir resmi yinelenen desen olarak kullanın.

SVG ile maskeleme

Maske olarak bir resim dosyası kullanmak yerine SVG'yi kullanabilirsiniz. Bunu yapmanın birkaç yolu vardır. İlki, SVG'nin içinde bir <mask> öğesinin bulunması ve mask-image özelliğinde bu öğenin kimliğine referans verilmesidir.

<svg width="0" height="0" viewBox="0 0 400 300">
  <defs>
    <mask id="mask">
      <rect fill="#000000" x="0" y="0" width="400" height="300"></rect>
      <circle fill="#FFFFFF" cx="150" cy="150" r="100" />
      <circle fill="#FFFFFF" cx="50" cy="50" r="150" />
    </mask>
  </defs>
</svg>

<div class="container">
    <img src="balloons.jpg" alt="Balloons">
</div>
.container img {
  height: 100%;
  width: 100%;
  object-fit: cover;
  -webkit-mask-image: url(#mask);
  mask-image: url(#mask);
}
SVG maskesi kullanım örneği

Bu yaklaşımın avantajı, maskenin yalnızca bir resme değil, herhangi bir HTML öğesine uygulanabilmesidir. Maalesef bu yaklaşımı destekleyen tek tarayıcı Firefox'tur.

Bununla birlikte, bir resmi maskelemenin en yaygın senaryosunda, resmi SVG'ye ekleyebiliriz.

Gradyan ile maskeleme

Maskeniz olarak bir CSS gradyanı kullanmak, resim veya SVG oluşturma zahmetine girmenize gerek kalmadan maskelenmiş bir alana ulaşmanın zarif bir yoludur.

Örneğin, maske olarak kullanılan basit bir doğrusal gradyan, resmin alt kısmının bir altyazının altında çok karanlık olmamasını sağlayabilir.

Desteklenen gradyan türlerinden herhangi birini kullanabilir ve istediğiniz kadar yaratıcı olabilirsiniz. Aşağıdaki örnekte, başlığın arkasını aydınlatacak yuvarlak bir maske oluşturmak için dairesel bir renk geçişi kullanılmaktadır.

Birden fazla maske kullanma

Arka plan resimlerinde olduğu gibi birden fazla maske kaynağı belirtebilirsiniz. istediğiniz efekti elde etmek için bunları birleştirebilirsiniz. Bu, özellikle maskeniz olarak CSS gradyanlarıyla oluşturulmuş bir kalıbı kullanmak istediğinizde yararlı olur. Bunlar genellikle birden fazla arka plan resmi kullanır ve bu nedenle kolayca maskeye çevrilebilir.

Örneğin, bu makalede güzel bir dama tahtası deseni buldum. Arka plan resimleri kullanılan kod şöyle görünür:

background-image:
  linear-gradient(45deg, #ccc 25%, transparent 25%),
  linear-gradient(-45deg, #ccc 25%, transparent 25%),
  linear-gradient(45deg, transparent 75%, #ccc 75%),
  linear-gradient(-45deg, transparent 75%, #ccc 75%);
background-size:20px 20px;
background-position: 0 0, 0 10px, 10px -10px, -10px 0px;

Bunu veya arka plan resimleri için tasarlanmış başka herhangi bir deseni maskeye dönüştürmek için background-* özelliklerini alakalı mask özellikleriyle değiştirmeniz gerekir. -webkit önekli olanlar da dahil.

-webkit-mask-image:
  linear-gradient(45deg, #000000 25%, rgba(0,0,0,0.2) 25%),
  linear-gradient(-45deg, #000000 25%, rgba(0,0,0,0.2) 25%),
  linear-gradient(45deg, rgba(0,0,0,0.2) 75%, #000000 75%),
  linear-gradient(-45deg, rgba(0,0,0,0.2) 75%, #000000 75%);
-webkit-mask-size:20px 20px;
  -webkit-mask-position: 0 0, 0 10px, 10px -10px, -10px 0px;

Resimlere gradyan desenleri uygulanarak yapılabilecek bazı gerçekten güzel efektler vardır. Glitch'i remikslemeyi ve başka varyasyonlarını test etmeyi deneyin.

Kırpmayla birlikte CSS maskeleri, bir grafik uygulaması kullanmaya gerek kalmadan resimlere ve diğer HTML öğelerine ilgi alanı eklemenin bir yoludur.

Fotoğraf: Julio Rionaldo'nun Unsplash.