Seçiciler

CSS Podcast - 002: Seçiciler

Yalnızca makalenin ilk paragrafı olduğunda daha büyük ve kırmızı olmak istediğiniz bir metniniz varsa bunu nasıl yapabilirsiniz?

<article>
  <p>I want to be red and larger than the other text.</p>
  <p>I want to be normal sized and the default color.</p>
</article>

Söz konusu öğeyi bulmak için bir CSS seçici kullanır ve buna benzer bir CSS kuralı uygularsınız.

article p:first-of-type {
  color: red;
  font-size: 1.5em;
}

CSS, bu gibi durumları çözmenize yardımcı olmak amacıyla, öğeleri seçmeniz ve bu öğelere kurallar uygulamanız için çok basitten çok karmaşıka kadar birçok seçenek sunar.

CSS kuralının bölümleri

Seçicilerin işleyiş şeklini ve CSS'deki rollerini anlamak için CSS kuralının bölümlerini bilmek önemlidir. CSS kuralı, bir veya daha fazla seçici ve bir ya da daha fazla bildirim içeren bir kod bloğudur.

.my-css-rule seçicisine sahip bir CSS kuralının resmi.

Bu CSS kuralında seçici, sayfadaki my-css-rule sınıfına sahip tüm öğeleri bulan .my-css-rule'dir. Süslü parantez içinde üç bildirim vardır. Bildirim, seçiciler tarafından eşleştirilen öğelere stiller uygulayan bir özellik ve değer çiftidir. Bir CSS kuralının istediğiniz sayıda bildirimi ve seçicisi olabilir.

Basit seçiciler

En basit seçici grubu, HTML öğelerinin yanı sıra bir HTML etiketine eklenebilecek sınıf, kimlik ve diğer özellikleri hedefler.

Evrensel seçici

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • 1

Kaynak

Joker karakter olarak da bilinen evrensel seçici, tüm öğelerle eşleşir.

* {
  color: hotpink;
}

Bu kural, sayfadaki her HTML öğesinin hotpink metne sahip olmasına neden olur.

Tür seçici

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • 1

Kaynak

Tür seçici, bir HTML öğesiyle doğrudan eşleşir.

section {
  padding: 2em;
}

Bu kural, her <section> öğesinin tüm kenarlarda 2em/padding olmasına neden olur.

Sınıf seçici

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • 1

Kaynak

Bir HTML öğesinin class özelliğinde tanımlanmış bir veya daha fazla öğe olabilir. Sınıf seçici, ilgili sınıfın uygulandığı tüm öğelerle eşleşir.

<div class="my-class"></div>
<button class="my-class"></button>
<p class="my-class"></p>

Sınıfın uygulandığı tüm öğeler kırmızı renkte olur:

.my-class {
  color: red;
}

. öğesinin yalnızca CSS'de bulunduğuna ve HTML'de olmadığına dikkat edin. Bunun nedeni, . karakterinin CSS diline sınıf özelliği üyeleriyle eşleşmesi için talimat vermesidir. Bu, seçici türlerini tanımlamak için bir özel karakter veya karakter kümesinin kullanıldığı CSS'de yaygın bir kalıptır.

.my-class sınıfına sahip bir HTML öğesi, aşağıdaki gibi birkaç sınıfa sahip olsa bile yukarıdaki CSS kuralıyla eşleştirilir:

<div class="my-class another-class some-other-class"></div>

Bunun nedeni, CSS'nin sınıfı tam olarak eşleştirmek yerine tanımlanan sınıfı içeren bir class özelliğini aramasıdır.

Kimlik seçici

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • 1

Kaynak

id özelliğine sahip bir HTML öğesi, bir sayfada bu kimlik değerine sahip tek öğe olmalıdır. Şunun gibi bir kimlik seçici içeren öğeleri seçersiniz:

#rad {
  border: 1px solid blue;
}

Bu CSS, id değeri rad olan HTML öğesine aşağıdaki gibi mavi bir kenarlık uygular:

<div id="rad"></div>

. sınıf seçicisine benzer şekilde, CSS'ye kendisinden sonra gelen id ile eşleşen bir öğe aramasını istemek için # karakteri kullanın.

Özellik seçici

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • 3

Kaynak

Özellik seçiciyi kullanarak belirli bir HTML özelliğine sahip veya bir HTML özelliği için belirli bir değere sahip öğeleri arayabilirsiniz. Seçiciyi köşeli parantez ([ ]) ile sarmalayarak CSS'ye özellikleri aramasını söyleyin.

[data-type='primary'] {
  color: red;
}

Bu CSS aşağıdaki gibi primary değerine sahip data-type özelliğine sahip tüm öğeleri arar:

<div data-type="primary"></div>

Belirli bir data-type değeri aramak yerine, değerinden bağımsız olarak özelliğin mevcut olduğu öğeleri de arayabilirsiniz.

[data-type] {
  color: red;
}
<div data-type="primary"></div>
<div data-type="secondary"></div>

Bu <div> öğelerinin her ikisi de kırmızı metne sahiptir.

Özellik seçicinize s operatörü ekleyerek büyük/küçük harfe duyarlı özellik seçiciler kullanabilirsiniz.

[data-type='primary' s] {
  color: red;
}

Diğer bir deyişle, bir HTML öğesinde primary yerine data-type Primary varsa kırmızı metin görünmeyeceği anlamına gelir. i operatörü kullanarak bunun tersini (büyük/küçük harfe duyarlılık) yapabilirsiniz.

Büyük/küçük harf operatörleriyle birlikte, özellik değerlerinin içindeki dizelerin bölümleriyle eşleşen operatörlere de erişebilirsiniz.

/* A href that contains "example.com" */
[href*='example.com'] {
  color: red;
}

/* A href that starts with https */
[href^='https'] {
  color: green;
}

/* A href that ends with .com */
[href$='.com'] {
  color: blue;
}
Bu demoda, özellik seçicimizdeki "$" operatörü, dosya türünü "href" özelliğinden alır. Bu, sözde öğe kullanılarak söz konusu dosya türüne göre etiketin önüne eklenmesi mümkün olur.

Gruplama seçiciler

Bir seçicinin yalnızca tek bir öğeyle eşleşmesi gerekmez. Birden çok seçiciyi virgülle ayırarak gruplandırabilirsiniz:

strong,
em,
.my-class,
[lang] {
  color: red;
}

Bu örnekte, renk değişikliği hem <strong> hem de <em> öğelerine genişletilir. Ayrıca, .my-class adlı bir sınıfa ve lang özelliğine sahip bir öğeye genişletildi.

Öğrendiklerinizi sınayın

Basit seçiciler hakkındaki bilginizi test edin

* {}

Yukarıdaki snippet'te ne tür basit bir seçici kullanılır?

özellik
[], özellik basit seçicileri için kullanılır.
Kimlik
#, kimlik basit seçicileri için kullanılır.
evrensel
*, evrensel basit seçicidir.
sınıf
., sınıf basit seçicileri için kullanılır.
div {}

Yukarıdaki snippet'te ne tür basit bir seçici kullanılır?

sınıf
., class basit seçicileri için kullanılır.
tür
Tür basit seçiciler için bir element adı kullanılır.
özellik
Köşeli parantez [], özellik basit seçicileri için kullanılır.
Kimlik
#, ID basit seçicileri için kullanılır.

Sözde sınıflar ve sözde öğeler

CSS, belirli bir platform durumuna odaklanan faydalı seçici türleri sunar. Örneğin, bir öğenin üzerine getirildiğinde, öğenin içindeki yapılar veya bir öğenin parçaları.

Sözde-sınıflar

HTML öğeleri, etkileşimde bulundukları veya alt öğelerinden biri belirli bir durumda olduğu için kendilerini çeşitli durumlarda bulur.

Örneğin, bir kullanıcı HTML öğesinin üzerine fare ile getirilebilir veya bir alt öğenin üzerine de getirilebilir. Bu durumlar için :hover sözde sınıfını kullanın.

/* Our link is hovered */
a:hover {
  outline: 1px dotted green;
}

/* Sets all even paragraphs to have a different background */
p:nth-child(even) {
  background: floralwhite;
}

Sözde sınıflar modülünde daha fazla bilgi edinin.

Sözde öğe

Sözde öğeler, sözde sınıflardan farklıdır çünkü platform durumuna yanıt vermek yerine CSS ile yeni bir öğe ekliyorlar gibi davranırlar. Sözde öğeler, sözde olmayan sınıflardan da farklıdır çünkü tek iki nokta üst üste (:) yerine çift iki nokta üst üste (::) kullanılır.

.my-element::before {
  content: 'Prefix - ';
}

Bir bağlantının etiketinin önüne dosya türünü eklediğiniz yukarıdaki demoda olduğu gibi, bir öğenin başına içerik eklemek için ::before sözde öğesini veya bir öğenin sonuna içerik eklemek için ::after sözde öğesini kullanabilirsiniz.

Bununla birlikte, sözde öğeler içerik eklemekle sınırlı değildir. Bunları, bir öğenin belirli bölümlerini hedeflemek için de kullanabilirsiniz. Örneğin, bir listeniz olduğunu varsayalım. Listedeki her madde işaretinin (veya numaranın) stilini belirlemek için ::marker kullanın

/* Your list will now either have red dots, or red numbers */
li::marker {
  color: red;
}

Bir kullanıcı tarafından vurgulanan içeriğin stilini belirlemek için ::selection öğesini de kullanabilirsiniz.

::selection {
  background: black;
  color: white;
}

Yapay öğeler hakkındaki modülde daha fazla bilgi edinebilirsiniz.

Öğrendiklerinizi sınayın

Sözde seçiciler hakkındaki bilginizi test edin

Sözde öğe seçiciler kaç tane iki nokta kullanır?

:
Sözde sınıfları hedeflemek için bir : kullanılır.
::
Sözde öğeleri hedeflemek için iki :: kullanılır.
:::
Bu geçersiz ve hiçbir şeyi hedeflemiyor.
p:hover {
  background: white;
  color: black;
}

Yukarıdaki snippet'te ne tür bir sözde seçici kullanılır?

Sözde sınıf
Sözde sınıfları hedeflemek için bir : kullanılır.
Sözde öğe
Sözde öğeleri hedeflemek için iki :: kullanılır.

Karmaşık seçiciler

Çok sayıda seçici görmüşsünüzdür, ancak bazen CSS'nizle ilgili daha ayrıntılı kontrole ihtiyacınız olabilir. Karmaşık seçiciler tam da bu noktada devreye girer.

Bu noktada, aşağıdaki seçicilerin bize daha fazla güç sağlasa da, alt öğeleri seçerek yalnızca aşağı doğru ilerleyebildiğimizi unutmamak gerekir. Yukarı doğru hedefleme yapıp bir üst öğe seçemiyoruz. İlerleyen bir derste, şelalenin ne olduğuna ve nasıl çalıştığına değineceğiz.

Kombinatörler

Kombinatör, iki seçici arasında bulunan öğedir. Örneğin, seçici p > strong ise kombinasyon > karakteridir. Bu birleştiricileri kullanan seçiciler, öğeleri dokümandaki konumlarına göre seçmenize yardımcı olur.

Alt öğe birleştirici

Alt birleştiricileri anlamak için önce üst ve alt öğeleri anlamanız gerekir.

<p>A paragraph of text with some <strong>bold text for emphasis</strong>.</p>

Üst öğe, metin içeren <p> öğesidir. Bu <p> öğesinin içinde bir <strong> öğesi olduğu için içeriği kalın yapar. <p> içinde yer aldığı için bir alt öğedir.

Alt öğe birleştirici, bir alt öğeyi hedeflememize olanak tanır. Bu işlevde, tarayıcıya alt öğeleri arama talimatı vermek için bir boşluk () kullanılır:

p strong {
  color: blue;
}

Bu snippet, yalnızca <p> öğelerinin alt öğeleri olan tüm <strong> öğelerini seçerek bunları yinelenen şekilde mavi yapar.

Alt öğe birleştirici yinelemeli olduğundan, her alt öğeye eklenen dolgu uygulanır ve kademeli bir efekt elde edilir.

Bu etki, yukarıdaki örnekte .top div birleşim seçicisi kullanılarak daha iyi görselleştirilir. Bu CSS kuralı, bu <div> öğelerine sol dolgu ekler. Kombinatör özyinelemeli olduğundan .top içindeki tüm <div> öğelerine aynı dolgu uygulanır.

.top öğesinin <div> alt öğesi olan birkaç <div> alt öğesine nasıl sahip olduğunu görmek için bu demodaki HTML paneline göz atın.

Sonraki eşdüzey kombinatör

Seçicinizde bir + karakterini kullanarak başka bir öğeyi hemen izleyen bir öğe arayabilirsiniz.

Yığılmış öğeler arasına boşluk eklemek için sonraki eşdüzey birleştiriciyi kullanarak yalnızca bir öğe .top alt öğesinin sonraki kardeşi olduğunda boşluk ekleyin.

Aşağıdaki seçiciyi kullanarak kenar boşluğunu tüm .top alt öğelerine ekleyebilirsiniz:

.top * {
  margin-top: 1em;
}

Bu sorun, .top öğesinin her alt öğesini seçmeniz nedeniyle bu kuralın fazladan, gereksiz alan oluşturmasıdır. Bir evrensel seçici ile birlikte kullanılan sonraki eşdüzey birleştirici, yalnızca hangi öğelerin yer alacağını kontrol etmekle kalmayıp herhangi bir öğeye de alan uygulamanızı sağlar. Bu, .top öğesinde hangi HTML öğelerinin göründüğünden bağımsız olarak, uzun vadede biraz esneklik sağlar.

Sonraki - eşdüzey birleştirici

Sonraki bir kombinatör, sonraki eşdüzey seçiciye çok benzer. Ancak + karakteri yerine ~ karakteri kullanın. Bunun farkı, bir öğenin aynı üst öğeye sahip bir sonraki öğeyi takip etmek yerine, yalnızca aynı üst öğeye sahip başka bir öğeyi takip etmesidir.

Yalnızca CSS geçiş öğesi oluşturmak için ":checked" sözde sınıfıyla birlikte sonraki bir seçiciyi kullanın.

Sonraki bu kombinasyon biraz daha az sabitlik sağlar. Bu, yukarıdaki örnekteki gibi bağlamlarda kullanışlıdır. İlgili onay kutusu :checked durumuna sahip olduğunda özel anahtarın rengini değiştiririz.

Çocuk kombinatörü

Alt birleştirici (doğrudan alt öğe olarak da bilinir), kombinasyon seçicilerle birlikte gelen yineleme üzerinde daha fazla kontrol sahibi olmanızı sağlar. > karakterini kullanarak kombinatör seçiciyi yalnızca doğrudan alt öğelere uygulanacak şekilde sınırlandırmış olursunuz.

Önceki, sonraki kardeş seçici örneğini inceleyin. Boşluk her bir sonraki eşdüzey öğeye eklenir ancak bu öğelerden birinin alt öğe olarak sonraki eşdüzey öğelerin de bulunması, istenmeyen şekilde fazladan boşluk bırakılmasına neden olabilir.

Bu sorunu hafifletmek için sonraki eşdüzey seçiciyi bir alt birleştiriciyi dahil edecek şekilde değiştirin: > * + *. Kural artık yalnızca .top kapsamındaki doğrudan alt yayıncılar için geçerli olacak.

Bileşik seçiciler

Spesifik ve okunabilirliği artırmak için seçicileri birleştirebilirsiniz. Örneğin, aynı zamanda .my-class sınıfına sahip <a> öğelerini hedeflemek için aşağıdakini yazın:

a.my-class {
  color: red;
}

Bu, tüm bağlantılara kırmızı renk sunmaz ve kırmızı rengi .my-class öğesine yalnızca bir <a> öğesinde if uygular. Bu konu hakkında daha fazla bilgi için spesifiklik modülünü inceleyin.

Öğrendiklerinizi sınayın

Karmaşık seçiciler hakkındaki bilginizi test edin

Aşağıdaki simgelerden hangisi seçici birleştirici değildir?

>
Doğrudan alt alt birleştirici.
÷
Geçersiz, CSS sembolü değil.
+
Sonraki eşdüzey kombinatör.
*
Bu evrensel basit seçici.
.
Sınıf basit seçicisi.
section.awesome {
  border: 1px solid hotpink;
}

Yukarıdaki seçici, örnek olarak...

Kombinatör
Seçicileri daha belirli bir liste olacak şekilde birleştirmek için kullanılan bir simge.
Bileşik seçici
Daha spesifik bir seçici oluşturmak için 2 veya daha fazla seçici, birleştirici olmadan birlikte kullanıldığında.
Sonlandırıcı
Seçici türü olmasa da kulağa uygun değil mi? 🤖

Kaynaklar