Zephyrnet Logosu

CSS'de :has()'ın Gücü

Tarih:

Hey, siz harika geliştiriciler oradasınız! Bu yazıda kullanımını inceleyeceğiz. :has() bir sonraki web projenizde. :has() nispeten yenidir ancak kullanıcı arayüzünüzdeki çeşitli öğeler üzerinde kontrol sağlayarak ön uç topluluğunda popülerlik kazanmıştır. Şimdi sözde sınıfın ne olduğuna ve onu nasıl kullanabileceğimize bir göz atalım.

Sözdizimi

The :has() CSS sözde sınıfı, içinde aradığımız herhangi bir şeyin bulunması ve hesaba katılması durumunda, bir öğenin stillendirilmesine yardımcı olur. Sanki şunu söylemek gibi: "Bu kutunun içinde belirli bir şey varsa, kutuyu bu şekilde VE yalnızca bu şekilde şekillendirin."

:has(<direct-selector>) {
  /* ... */
}

“İşlevsel :has() CSS sözde sınıfı, bağımsız değişken olarak iletilen göreceli seçicilerden herhangi biri, bu öğeye bağlandığında en az bir öğeyle eşleşiyorsa, bir öğeyi temsil eder. Bu sözde sınıf, bir bağımsız değişken olarak göreceli bir seçici liste alarak bir referans öğeye göre bir ana öğeyi veya önceki bir kardeş öğeyi seçmenin bir yolunu sunar.

Daha sağlam bir açıklama için; DND mükemmel bir şekilde yapıyor

Stil Sorunu

Geçmiş yıllarda, bir ebeveyn öğesini CSS ile o ebeveynin doğrudan çocuğuna veya başka bir öğeye dayalı bir öğeye dayalı olarak şekillendirmenin hiçbir yolu yoktu. Bunu yapmak zorunda kalmamız durumunda, bazı JavaScript kullanmamız ve HTML yapısına göre sınıfları açıp kapatmamız gerekecekti. :has() bu sorunu çözdü.

Diyelim ki 1. düzey bir başlık öğeniz var (h1) bu, bir blog listesi sayfasındaki bir yazının veya buna benzer bir şeyin başlığıdır ve ardından 2. düzey bir başlık düzeyine sahip olursunuz (h2) doğrudan onu takip eder. Bu h2 yazının alt başlığı olabilir. Eğer h2 mevcut, önemli ve doğrudan sonra h1h1'in öne çıkmasını isteyebilirsiniz. Daha önce bir JS işlevi yazmanız gerekirdi.

Eski Okul Yolu – JavaScript

const h1Elements = document.querySelectorAll('h1');

h1Elements.forEach((h1) => {
  const h2Sibling = h1.nextElementSibling;
  if (h2Sibling && h2Sibling.tagName.toLowerCase() === 'h2') {
    h1.classList.add('highlight-content');
  }
});

Bu JS işlevi, sahip olan tüm h1'leri arıyor. h2 devam etmek ve bir vurgu içeriği sınıfı uygulamak h1 önemli bir makale olarak öne çıkıyor.

Günümüzün CSS'sinin sıcak bir şekilde gelmesiyle yeni ve geliştirilmiş! Tarayıcıda yapabileceklerimizin yetenekleri uzun bir yol kat etti. Artık geleneksel olarak JavaScript ile yapmamız gereken şeyleri yapmak için CSS'nin avantajlarından yararlanabiliriz; her şeyi değil ama bazı şeyleri.

Yeni Okul Yolu – CSS

h1:has(+ h2) {
    color: blue;
}

Üzerine Biraz :has() Atın!

Şimdi kullanabilirsiniz :has() JS işlevinin yaptığı şeyin aynısını başarmak için. Bu CSS herhangi bir h1'i kontrol ediyor ve kardeş birleştirici hemen ardından gelen ve metne mavi rengini ekleyen h2'nin kontrol edilmesi. Aşağıda ne zaman kullanıldığına dair birkaç kullanım örneği verilmiştir: :has() kullanışlı gelebilir.

:Seçici Örnek 1'e sahiptir

HTML

<h1>Lorem, ipsum dolor.</h1>
	<h2>Lorem ipsum dolor sit amet.</h2>
	<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Eius, odio voluptatibus est vero iste ad?</p>
	
	<h1>Lorem, ipsum dolor.</h1>
	<h2>Lorem ipsum dolor sit amet.</h2>
	<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Eius, odio voluptatibus est vero iste ad?</p>

	<h1>This is a test</h1>
	<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Eius, odio voluptatibus est vero iste ad?</p>

CSS

h1:has(+ h2) {
    color: blue;
}
CSS : kendisini takip eden yalnızca h1 olduğunda seçici h2'i maviye çevirir.

:Seçici Örnek 2'e sahiptir

Biz web çalışanları olarak çoğu zaman görselleri manipüle ediyoruz veya resimlerle çalışıyoruz. Şu araçları kullanıyor olabiliriz: Bulutsu görsellerimizde çeşitli dönüşümlerden faydalanmamızı sağlar, ancak genellikle alt gölgeler, kenarlık yarıçapları ve başlıklar eklemek isteriz (alt özelliğindeki alternatif metinle karıştırılmamalıdır).

Aşağıdaki örnek kullanılıyor :has() Bir şeklin veya görselin figcaption öğesi olup olmadığını görmek için ve eğer varsa, görselin öne çıkmasını sağlamak için bir miktar arka plan ve kenarlık yarıçapı uygular.

HTML

<section>
	<figure>
		<img src="https://placedog.net/500/280" alt="My aunt sally's dog is a golden retreiver." />
		<figcaption>My Aunt Sally's Doggo</figcaption>
	</figure>
</section>

CSS

figure:has(figcaption) {
  background: #c3baba;
  padding: 0.6rem;
  max-width: 50%;
  border-radius: 5px;
}
Örnek: :seçicinin, altyazılı bir resmin arka planını vurgulamayan bir görseli vurgulaması var.

Yapabilirmiyim :has() o?

Görebilirsin :has() modern tarayıcılarda mükemmel desteğe sahiptir.

Bu tarayıcı destek verileri, Kullanabilirmiyim, daha fazla ayrıntıya sahip olan. Bir sayı, tarayıcının özelliği o sürümde ve sonraki sürümlerde desteklediğini gösterir.

Masaüstü

krom Firefox IE kenar Safari
105 121 Yok hayır 105 15.4

Mobil / Tablet

Android Chrome Android Firefox Android iOS Safari
122 123 122 15.4

:has() toplulukta!

Akranlarımın nasıl kullandığını görmek için Twitter'daki ağıma ulaştım :has() günlük işlerinde ve bu konuda söylemeleri gereken şey buydu.

"Aldığım bir örnek, üçüncü taraf bir paketten belirli bir SVG'yi tasarlamaktır. @saucedopen çünkü ona doğrudan stil veremedim.”

Bu nedir Nick Taylor itibaren Açık Soslu kullanımı hakkında söylemek zorunda kaldım :has().

svg:has(> #Mail) {
  stroke-width: 1;
}

Hahaha, bunu en son kullandığımda klavye işlevselliğini bir ağaç görünümüne inşa ediyordum, bu yüzden kardeş öğelerin durumlarını ve sınıflarını tespit etmem gerekiyordu, ancak henüz Firefox'ta değildi, bu yüzden başka bir çözüm bulmam gerekiyordu. 🫠

Manastır Perini itibaren Nexcor Gıda Güvenliği Teknolojileri A.Ş.

Topluluk üyelerinin gerçek dünya sorunlarını çözmek için modern CSS'yi nasıl kullandıklarını görmek harika ve aynı zamanda erişilebilirlik nedeniyle bunu kullanan Abbey'e de teşekkür ederiz!

Dikkatli Olmanız Gerekenler

Kullanırken akılda tutulması gereken birkaç önemli nokta vardır. :has() Referans verilen madde işaretleri MDN.

  • Sözde sınıf, argümanındaki en spesifik seçicinin özgüllüğünü üstlenir
  • Eğer :has() sözde sınıfın kendisi bir tarayıcıda desteklenmiyorsa, seçme bloğunun tamamı başarısız olacaktır. :has() bağışlayıcı bir seçici listesindedir, örneğin :is() ve :where()
  • The :has() sözde sınıf başka bir sınıfın içine yerleştirilemez :has() 
  • Sözde öğeler aynı zamanda geçerli seçiciler değildir. :has() ve sözde elemanlar geçerli çapalar değildir :has()

Sonuç

gibi gelişmiş özellikler de dahil olmak üzere CSS'nin gücünden yararlanma :has() sözde sınıf, olağanüstü web deneyimleri oluşturmamızı sağlar. CSS'nin güçlü yönleri, kademesinde ve özgüllüğünde yatmaktadır; en iyi kısmı, onun tüm potansiyelinden yararlanmamıza olanak sağlamasıdır. CSS'nin yeteneklerini benimseyerek web tasarımını ve geliştirmeyi ileriye taşıyabilir, yeni olanakların kilidini açabilir ve çığır açan kullanıcı arayüzleri yaratabiliriz.

Bağlantılar:

spot_img

En Son İstihbarat

spot_img