Bütünleşik Biçembentler, 2. Aşama
ÖncekiYukarıSonraki

5 Seçiciler

İçindekiler

    5.1 Örüntü eşleme
    5.2 Seçici sözdizimi
          5.2.1 Gruplama
    5.3 Evrensel seçici
    5.4 Tür seçicileri
    5.5 Astsal seçiciler
    5.6 Çocuk seçiciler
    5.7 Yakın kardeş seçiciler
    5.8 Öznitelik seçiciler
          5.8.1 Özniteliklerin ve öznitelik değerlerinin eşleşmesi
          5.8.2 DTD'lerdeki öntanımlı öznitelik değerleri
          5.8.3 class seçicileri
    5.9 ID seçiciler
    5.10 Sözde elemanlar ve sözde sınıflar
    5.11 Sözde sınıflar
          5.11.1 :first-child sözde sınıfı
          5.11.2 Bağlantı sözde sınıfları: :link ve :visited
          5.11.3 Özdevimli sözde sınıflar: :hover, :active ve :focus
          5.11.4 Dil sözde sınıfı: :lang
    5.12 Sözde elemanlar
          5.12.1 The :first-line sözde elemanı
          5.12.2 :first-letter sözde elemanı
          5.12.3 :before ve :after sözde elemanları

5.1 Örüntü eşleme

BBB'de örüntü eşleme kuralları, belge ağacındaki elemanlara hangi biçembent kurallarının uygulanacağını belirler. Basit eleman isimlerinden zengin bağlamsal örüntülere kadar uzanan bir aralığı kapsayan bu örüntülere seçiciler adı verilir. Eğer bir örüntüdeki koşullar belli bir eleman için doğruysa, seçici elemanla eşleşmiş demektir.

Seçicilerdeki belge dili eleman isimlerinin harf büyüklüğüne duyarlılığı belge diline bağlıdır. Örneğin, HTML'de eleman isimleri harf büyüklüğüne duyarlı değildir, fakat XML'de duyarlıdır.

Aşağıdaki tabloda BB2 seçici sözdizimi özetlenmiştir:

ÖrüntüAnlamıAçıklandığı bölüm
*Her elemanla eşleşir.Evrensel seçici
EE türündeki her elemanla eşleşir.Tür seçicileri
E FE elemanlarının F astsalları ile eşleşir.Astsal seçiciler
E > FHerhangi bir E elemanının F çocukları ile eşleşir.Çocuk seçiciler
E:first-childEbeveyninin ilk çocuğu olan E elemanları ile eşleşir.:first-child sözde sınıfı
E:link
E:visited
Bir hiper bağ olarak henüz ziyaret edilmemiş (:link) ve ziyaret edilmiş (:visited) E elemanları ile eşleşirler.Bağlantı sözde sınıfları: :link ve :visited
E:active
E:hover
E:focus
Belli başlı kullanıcı eylemleri sırasında E elemanları ile eşleşirler.Özdevimli sözde sınıflar: :hover, :active ve :focus
E:lang(c)(İnsan) Dili "c" olan E elemanları ile eşleşir (Dilin nasıl saptanacağını belge dili belirtir).Dil sözde sınıfı: :lang
E + FE büyük kardeşi olan F elemanları ile eşleşir.Yakın kardeş seçiciler
E[foo]'foo' özniteliği belirtilmiş (değerinin önemi yoktur) E elemanları ile eşleşir.Öznitelik seçiciler
E[foo="dikkat"]'foo' özniteliğinin değeri "dikkat" olan E elemanları ile eşleşir.Öznitelik seçiciler
E[foo~="dikkat"]'foo' özniteliğinin değerinde "dikkat" ile başlayan boşluk ayraçlı değerler içeren E elemanları ile eşleşir.Öznitelik seçiciler
E[lang|="en"]'lang' özniteliğinin değerinde "en" ile başlayan tire ayraçlı değerler içeren E elemanları ile eşleşir.Öznitelik seçiciler
div.dikkatHTML'ye özel. div[class~="dikkat"] ile aynıdır.class seçicileri
E#idimID türündeki özniteliğinin değeri "idim" olan E elemanları ile eşleşir.ID seçiciler

5.2 Seçici sözdizimi

Bir basit seçici hemen ardından sıfır veya daha fazla sayıda ve herhangi bir sırada öznitelik seçicisi, ID seçicisi veya sözde sınıf gelen bir tür seçici veya bir evrensel seçicidir. Bütün bileşenleri eşleşen bir basit seçici eşleşmiş olur.

Bir seçici, bağdaştırıcılarla birbirlerinden ayrılmış bir veya daha fazla sayıda basit seçiciden oluşan bir zincirdir. Bir bağdaştırıcı boşluk karakterlerinden, ">" ve "+" karakterlerinden biri olabilir. Boşluk karakterleri ayrıca, bir basit seçici ile bağdaştırıcı arasında da yer alabilir.

Bir seçici ile eşleşen bir belge ağacının elemanlarına seçicinin konuları denir. Tek bir basit seçiciden oluşan bir seçici, gereksinimlerini karşılayan her elemanla eşleşir. Bir basit seçicinin ve bir bağdaştırıcının bir zincirin önüne eklenmesi ilave eşleşme koşulları anlamına gelir, böylece bir seçicinin konuları daima en sağdaki basit seçiciyle eşleşen elemanların bir alt kümesi olur.

Bir sözde eleman, biçem bilgisinin her konunun bir alt parçasına uygulandığı durumda, bir zincirdeki son basit seçicinin ardına eklenebilir.

5.2.1 Gruplama

Çeşitli seçiciler aynı bildirimleri paşlaştığı takdirde virgül ayraçlı bir liste olarak gruplanabilirler.

Örnek:
Bu örnekte, birbirinin aynı bildirimler içeren üç kuralı tek bir kural haline getireceğiz:

h1 { font-family: sans-serif }
h2 { font-family: sans-serif }
h3 { font-family: sans-serif }

ile bu kural eşdeğerdir:

h1, h2, h3 { font-family: sans-serif }

BB başka kısaltma mekanizmaları da içerir: çoklu bildirimler ve kestirme nitelikler.

5.3 Evrensel seçici

Evrensel seçici "*" olarak yazılır ve her eleman türüyle eşleşir. Belge ağacındaki her elemanla tek tek eşleşir.

Eğer evrensel seçici bir basit seçicinin tek bileşeni değilse, "*" yoksayılabilir. Örnek:

5.4 Tür seçicileri

Bir tür seçici bir belge dilindeki bir eleman türü ismi ile eşleşir. Bir tür seçici belge ağacındaki her eleman nesnelleştirimi ile eşleşir.

Örnek:
Bu kural belge ağacındaki bütün <h1> elemanları ile eşleşir:

h1 { font-family: sans-serif }

5.5 Astsal seçiciler

Zaman zaman yazarlar belge ağacında başka bir elemanın astsalı olan bir elemanla eşleşen seçiciler isteyebilirler (örneğin, bir <h1> elemanının içeriğindeki bir <em> elemanı ile eşleşmek). Astsal seçiciler bir örüntüde böyle ilişkileri ifade ederler. Bir astsal seçici boşluk karakterleri ile ayrılmış iki veya daha fazla sayıda seçiciden oluşur. "A B" biçimindeki bir astsal seçici üstsel elemanı A olan B elemanları ile eşleşecektir veya başka bir deyişle A elemanlarının astsalları olan B elemanları ile eşleşecektir.

Örnek:
Elimizde şu kurallar olsun:

h1 { color: red }
em { color: red }

Rengini değiştirdikten sonra bir de metnin bir bölümünü eğik yazıyla göstermek istersek, bu iki vurgudan biri anlamını yitirecektir. Örnek:

<h1>Bu başlık <em>çok</em> önemli</h1>

Ama <h1> elemanın içeriğindeki <em> elemanının rengini mavi yaparak iki vurgunun tekrar anlamlı olmasını sağlayabiliriz:

h1 { color: red }
em { color: red }
h1 em { color: blue }

Üçüncü kural böyle bir bölümle de eşleşecektir:

<h1>Bu <span class="myclass">başlık
<em>çok</em> önemli</span></h1>

Örnek:
div * p

seçicisi bir <div> elemanının torunları olan <p> elemanları ile eşleşecektir. "*" seçicisinin etrafındaki boşlukların evrensel seçicinin parçaları olmadığına dikkat ediniz; boşluklar seçiciler arasındaki bağdaştırıcılar olup <div> elemanının, <p> elemanının üstsellerinin üstseli olması gerektiğini belirtirler.

Örnek:
Bu örnekteki kuralın içerdiği seçicide astsal seçicilerle bir öznitelik seçicisi birlikte kullanılmıştır. Seçici tarafından, <div> üstselleri olan <p> elemanlarının çocuklarından 'href' özniteliği belirtilmiş olanlar seçilmektedir:

div p *[href]

5.6 Çocuk seçiciler

Bir çocuk seçici bir elemanın çocuğu olan elemanlarla eşleşir. Bir çocuk seçici ">" bağdaştırıcılarla birbirlerinden ayrılmış iki veya daha fazla sayıda seçiciden oluşur. ">" bağdaştırıcının etrafındaki isteğe bağlı boşluklar yoksayılır.

Örnek:
Aşağıdaki kural <body> elemanının çocukları olan tüm <p> elemanlarında satır yüksekliğini ayarlamaktadır:

body > p { line-height: 1.3em }

Örnek:
Bu örnekte astsal ve çocuk seçiciler birlikte kullanılmıştır:

div ol > li p

Bu seçici, <div> üstseli olan <ol> ebeveynlere sahip <li>'lerin astsalları olan <p> elemanları ile eşleşir.

Bir elemanın ilk çocuğunun seçilmesi ile ilgili bilgi edinmek için, :first-child sözde sınıfından bahsedilen bölüme (aşağıda) bakınız.

5.7 Yakın kardeş seçiciler

Yakın kardeş seçicilerin sözdizimi, E1 + E2 biçiminde olup seçicinin konusu E2'dir. Eğer E1 ve E2 aynı ebeveynin çocukları iseler ve belge ağacındaki sıraya göre E1, E2'den hemen önceyse, bu seçici E2 ile eşleşir.

Bazı bağlamlarda, bitişik elemanlar gösterimin özdevinimli elde edilmesini sağlayan biçimleme nesneleri üretirler (yanyana çerçeveler arasında düşey kenar dış boşluklarının üstüste binmesi gibi). "+" bağdaştırıcıları bitişik elemanlar için ek biçem belirtmeyi olanaklı kılar.

Örnek:
Aşağıdaki kurala göre, bir <math> elemanından hemen sonra gelen <p> elemanı girintilenmeyecektir:

math + p { text-indent: 0 }

Örnek:
Bu kurala göre ise, <h1> ve <h2> elemanları peşpeşe geldikleri takdirde aralarındaki boşluk azaltılacaktır:

h1 + h2 { margin-top: -5mm }

Örnek:
Bu örnek bir önceki örneğe benzemekle birlikte, bu kez <h1> elemanına bir öznitelik seçicisi eklenmiştir. Bu durumda, sadece 'class="opener"' içeren bir <h1> elemanından hemen sonra bir <h2> elemanının varlığında ara boşluk azaltılacaktır:

H1.opener + H2 { margin-top: -5mm }

5.8 Öznitelik seçiciler

BB2, kaynak belgede tanımlı özniteliklerle eşleşen kurallar belirtebilmeyi de mümkün kılmıştır.

5.8.1 Özniteliklerin ve öznitelik değerlerinin eşleşmesi

Öznitelik seçiciler dört yolla eşleşebilir:

[özn]
Elemanda özn özniteliği belirtilmişse değerine bakılmaksızın eşleşme sağlanır.

[özn=değ]
Elemanın özn özniteliğinin değeri değ olduğu takdirde eşleşme sağlanır.

[özn~=değ]
Elemanın özn özniteliğinin değeri boşluk ayraçlı sözcüklerden oluşuyor ve belirtilen değ sözcüğü bu sözcüklerden biri ise eşleşme sağlanır. Bu seçici kullanılırken değ değeri boşluk içermemelidir.

[özn|=değ]
Elemanın özn özniteliğinin değeri tire ayraçlı sözcüklerden oluşuyor ve belirtilen değ sözcüğü bu sözcüklerin ilki ise eşleşme sağlanır. Bu seçici kullanılırken değ değeri tire içermemelidir. Öznitelik değerinde eşleşme aranmaya değerin başından başlanır. Bu seçici aslında dil alt kodlarında (HTML'deki 'lang' özniteliği gibi) [IANA-DİLKOD]'da açıklandığı gibi eşleşmeyi mümkün kılmak için tasarlanmıştır.

Öznitelik değerleri betimleyici veya dizge olmalıdır. Öznitelik isimlerinde ve değerlerinde harf büyüklüğüne duyarlılık tamamen belge diline bağımlıdır.

Örnek:
Bu kuraldaki öznitelik seçicisi, 'title' özniteliği ne değerle belirtilmiş olursa olsun, özniteliğin belirtildiği bütün <h1> elemanları ile eşleşecektir:

H1[title] { color: blue; }

Örnek:
Bu seçici ise, 'class' özniteliğinin değeri "example" olan tüm <span> elemanları ile eşleşecektir:

span[class="example"] { color: blue; }

Bir elemanın çok sayıda özniteliği için çok sayıda öznitelik seçicisi kullanılabileceği gibi aynı öznitelik defalarca da belirtilebilir.

Örnek:
Buradaki seçici, 'elveda' özniteliğinin değeri "Antalya" ve 'merhaba' özniteliğinin değeri "Alanya" olan tüm <span> elemanları ile eşleşecektir:

span[merhaba="Alanya"][elveda="Antalya"] { color: blue; }

Örnek:
Aşağıdaki seçiciler "=" ile "~=" arasındaki farkları göstermektedir. İlk seçici, örneğin, 'rel' özniteliğinin "copyright copyleft copyeditor" değeriyle eşleşirken ikinci seçici, değeri tam olarak "http://www.w3.org/" olan 'href' özniteliğiyle eşleşecektir:

a[rel~="copyright"]
a[href="http://www.w3.org/"]

Örnek:
Aşağıdaki kural, 'lang' özniteliğinin değeri "fr" olan tüm elemanları (Fransızca içeriği) gizleyecektir:

*[lang="fr"] { display : none }

Örnek:
Aşağıdaki kural, değeri "en" ile başlayan, "en", "en-US", "en-cockney" gibi değerler içeren 'lang' özniteliğine sahip tüm elemanlarla eşleşecektir:

*[LANG|="en"] { color : red }

Örnek:
Benzer şekilde, aşağıdaki işitsel biçembent kuralları bir betiğin her rolü farklı bir sesle okumasını mümkün kılacaktır:

DIALOGUE[character=romeo]
     { voice-family: "Lawrence Olivier", charles, male }

DIALOGUE[character=juliet]
     { voice-family: "Vivien Leigh", victoria, female }

5.8.2 DTD'lerdeki öntanımlı öznitelik değerleri

Eşleşmeler belge ağacındaki öznitelik değerlerinde yer alır. HTML dışındaki belge dilleri için, öntanımlı öznitelik değerleri bir DTD'de veya bir başka yerde tanımlanabilir. Biçembentler, öntanımlı değerler belge ağacında bulunmasa bile onlarla çalışacak şekilde tasarlanmalıdır.

Örnek:
Öntanımlı değeri "onluk" olan "belirtim" özniteliğine sahip MESELA diye bir elemanımız olsun. DTD'de bununla ilgili şöyle bir satır olurdu:

<!ATTLIST MESELA belirtim (onluk,sekizlik) "onluk">

Biçembendimiz de şu kuralları içersin:

MESELA[belirtim=onluk] { /*... öntanımlı nitelik ayarları ...*/ }
MESELA[belirtim=sekizlik] { /*... diğer ayarlamalar ...*/ }

Özniteliğin öntanımlı olduğu durumları yakalamak için açıkça yazmak yerine şu kural kullanılabilirdi:

MESELA { /*... öntanımlı nitelik ayarları ...*/ }

Bu seçici, bir öznitelik seçicisinden duruma daha az özgü olduğundan sadece öntanımlı durum için kullanılacaktır. Öntanımlı olarak aynı biçemi almayan diğer öznitelik değerlerinin ise açıkça ayrı olarak ele alınmasına dikkat edilmelidir.

5.8.3 class seçicileri

HTML ile kullanılan biçembentlerde 'class' özniteliğiyle eşleşme arandığı durumda "~=" gösterimi yerine yazarlar nokta (.) gösterimini kullanabilirler. Bu bakımdan, HTML için 'div.value' ile 'div[class~=value]' aynı anlamdadır. Özniteliğin değeri noktadan hemen sonra yazılmalıdır.

Örnek:
Örnek olarak, tüm elemanlara 'class~="pastoral' ile biçem bilgisini şöyle atayabiliriz:

*.pastoral { color: green }  /* class~=pastoral içeren tüm elemanlar */

veya daha temiz olarak,

.pastoral { color: green }  /* class~=pastoral içeren tüm elemanlar */

Aşağıdaki kural sadece 'class~="pastoral' içeren <h1> elemanları ile eşleşir:

h1.pastoral { color: green }  /* class~=pastoral içeren h1 elemanları */

Bu kurallarla aşağıdaki belge parçasında ikinci <h1> yeşil olurken birincisinin rengi değişmeyecektir:

<h1>Yeşil değil</h1>
<H1 class="pastoral">Koyu yeşil</h1>

'class' özniteliğinin diğer değerleri ile eşleşme sağlamak için her değerin önüne nokta konmalıdır; değerlerin sırasının önemi yoktur.

Örnek:
Aşağıdaki kuralla, 'class' özniteliğinin değerinin boşluk ayraçlı bir liste olarak verildiği durumda 'class' özniteliğinde "pastoral" ve "marine" değerlerini içeren <p> elemanları ile eşleşme sağlanacaktır:

P.pastoral.marine { color: green }

Bu kural 'class="pastoral blue aqua marine"' ile eşleşir fakat 'class="pastoral blue"' ile eşleşmez.

Not:
BB 'class' özniteliğine öyle bir güç verir ki, yazarlar belki de biçimi sağlayacak özel elemanları hemen hiç kullanmadan (HTML için sadece <div> ve <span> kullanarak) ve biçem bilgisini 'class' özniteliklerine yükleyerek "kendi belge dillerini" tasarlayabilirler. Bir belge dilinin yapısal elemanları daha çok tanındığından ve anlamları kabul gördüğünden ama yazarlarca tanımlanmış sınıflar bunu sağlayamayacağından yazarların bu yola başvurmaları önerilmez.

5.9 ID seçiciler

Belge dilleri ID türünde bildirilmiş öznitelikler içerebilirler. ID türündeki özniteliklerin özelliği aynı değere sahip iki ID türünden özniteliğin aynı belge içinde bulunamayışıdır; belge dili ne olursa olsun, bir ID özniteliği elemanını eşsiz olarak kimliklendirmek için kullanılabilir. HTML'de tüm ID öznitelikleri 'id' ismini taşır; XML uygulamaları ID türünden öznitelikleri farklı isimlendirebilir ama aynı kurallar uygulanır.

Bir belge dilindeki bir ID özniteliği yazarlara belge ağacındaki bir eleman nesnesine bir betimleyici atama imkanı verir. BB ID seçicileri bir eleman nesnesini onun betimleyicisine dayanarak seçer. ID seçicileri bir "#" iminden hemen sonra ID değeri yazılarak oluşturulur.

Örnek:
Aşağıdaki kuralda, ID seçici, ID özniteliğinin değeri "chapter1" olan <h1> elemanı ile eşleşir:

h1#chapter1 { text-align: center }

Örnek:
Aşağıdaki belge örneğinde, biçem kuralı ID değeri "z98y" olan elemanla eşleşir. Kural bu durumda <p> elemanı ile eşleşecektir:

<head>
  <title>P eşleşir</title>
  <style type="text/css">
    *#z98y { letter-spacing: 0.3em }
  </style>
</head>
<body>
   <h1>P eşleşir</h1>
   <P id=z98y>Upuzun metin</P>
</body>

Sonraki örnekte, biçem kuralı bu kez ID değeri "z98y" olan <h1> elemanı ile eşleşecektir. Bu örnekte <p> elemanı ile eşleşme gerçekleşmeyecektir:

<head>
  <title>Sadece H1 eşleşir</title>
  <style type="text/css">
    H1#z98y { letter-spacing: 0.5em }
  </style>
</head>
<body>
   <H1>Sadece H1 eşleşir</H1>
   <p id=z98y>Upuzun metin</p>
</body>

ID seçicilerinin özgülüğü öznitelik seçicilerinden daha yüksektir. Örneğin, HTML'de #p123 seçicisi bütünleşme kuralları gereği [ID=p123] seçicisinden daha duruma özgüdür.

Not:
XML 1.0'da [XML10], bir elemanın ID'sini hangi özniteliğin içereceği DTD'de belirlenmiştir. XML çözümlenirken, kullanıcı arayüzleri DTD'yi daima okumaz ve dolayısıyla bir elemanın ID'sinin ne olduğunu bilemeyebilirler. Bir biçembent tasarımcısı bunu biliyorsa veya şüpheleniyorsa, ID seçicileri yerine normal öznitelik seçicilerini kullanmalıdır (#p371 yerine [name=p371] kullanmak gibi). Öte yandan, normal öznitelik seçicileri ID seçicilerinden bütünleşme sırası bakımından da farklıdır. Bu bakımdan bildirimlere !important öncelikleri eklemek gerekebilir ([name=p371] {color: red ! important} gibi). Şüphesiz, XML 1.0 belgeler bir DTD olmaksızın bir ID'lere de sahip olamayacaktır.

5.10 Sözde elemanlar ve sözde sınıflar

BB2'de normalde, biçem bir elemana belge ağacındaki yerine göre atanır. Bu basit model çoğu durumda yeterlidir, fakat bazı bildik yayıncılık senaryoları belge ağacının yapısından dolayı mümkün olmayabilir. Örneğin, HTML 4.0'da [HTML40] hiçbir eleman bir paragrafın ilk satırını gösteremez ve dolayısıyla ilk satırı gösteren basit bir BB seçicisi de yoktur.

BB, belge dışında kalan bilgilere dayalı biçimlemeye izin vermek için sözde elemanlar ve sözde sınıflar kavramlarını ortaya atmıştır.

Ne sözde elemanlar ne de sözde sınıflar belge kaynağında veya belge ağacında yer alabilir.

Sözde sınıflara seçicilerde her yerde izin verildiği halde, sözde elemanlar sadece seçicinin konusu olduktan sonra bir seçicide yer alabilirler.

Sözde elemanlar ve sözde sınıfların isimleri harf büyüklüğüne duyarlı değildirler.

Bazı sözde sınıflar birbirlerinin etkilerini yokederler. Böyle çelişkili durumlarda normal bütünleşim sırası sorunu çözer.

Uyumlu tarayıcılar seçicilerde :first-line veya :first-letter elemanları geçen tüm kuralları yoksayabilirler veya bu sözde elemanların niteliklerinin bir alt kümesini desteklemekle yetinebilirler.

5.11 Sözde sınıflar

5.11.1 :first-child sözde sınıfı

:first-child sözde sınıfı, başka bir elemanın ilk çocuğu olan elemanla eşleşir.

Örnek:
Aşağıdaki örnekteki seçici, <div> elemanlarının ilk çocuğu olan <p> elemanları ile eşleşecektir. Kural bir <div> elemanının ilk paragrafının girintilenmesini önlemektedir:

div > p:first-child { text-indent: 0 }

Bu seçici aşağıdaki belge parçasının <div> elemanının içindeki <p> elemanı ile eşleşecektir:

<p>Örnekten önceki son paragraf</p>
<div class="misal">
   <p>Örneğin içindeki ilk paragraf</p>
</div>

Ama aşağıdaki <p> elemanı ile eşleşmeyecektir:

<p>Örnekten önceki son paragraf</p>
<div class="misal">
   <h2>Örnek:</h2>
   <p>Örneğin içindeki ilk paragraf</p>
</div>

Örnek:
Aşağıdaki kural bir <p> elemanının ilk çocuğunun <em> astsalının yazıtipini kalın yapacaktır:

p:first-child em { font-weight : bold }

Anonim çerçeveler belge ağacının parçası olmadıklarından ilk çocuk bulunurken hesaba katılmayacaklarına dikkat ediniz.

Örnek:
<p>abc <em>öntanımlı</em></p>

Burada <em> elemanı <p> elemanının ilk çocuğudur.

Aşağıdaki iki seçici eşdeğerdir:

* > a:first-child   /* Herhangi bir elemanın a çocuğunun ilk çocuğu */
a:first-child       /* Aynı */

5.11.2 Bağlantı sözde sınıfları: :link ve :visited

Hemen hemen bütün kullanıcı arayüzleri ziyaret edilmemiş bağlantıları ziyaret edilenlerden farklı gösterirler. Bunları ayırdetmek için BB :link ve :visited sözde sınıflarını sağlar:

  • :link sözde sınıfı henüz ziyaret edilmemiş bağlantılara uygulanır.

  • :visited sözde sınıfı bağlantı kullanıcı tarafından ilk ziyaret edildiğinde uygulanır.

Not:
Kullanıcı arayüzleri, belli bir süre geçtikten sonra, ziyaret edilmiş bağlantıları tekrar ziyaret edilmemiş bağlantı (:link) haline çevirebilirler.

Bu iki durum aynı anda varolamaz.

Hangi elemanın hiper bağlantı elemanı olacağını belge dili belirler. Örneğin, HTML 4.0'da bağlantı sözde sınıfları 'href' özniteliğine sahip <a> elemanlarına uygulanır. Bu bakımdan, aşağıdaki iki BB2 bildirimi aynı etkiye sahiptir:

a:link { color: red }
:link  { color: red }

Örnek:
<a class="harici" href="http://harici.taraf/">harici bağlantı</a>

bağlantısı ziyaret edildiğinde, bu kural:

a.external:visited { color: blue }

onu mavi yapacaktır.

5.11.3 Özdevimli sözde sınıflar: :hover, :active ve :focus

Etkileşimle kullanıcı arayüzleri bazan kullanıcı eylemlerine verilen yanıtı değiştirirler. BB bildik durumlara uyan üç sözde sınıf sağlar:

  • :hover sözde sınıfı kullanıcı bir eleman üzerinde gezinirken (bir işaretleme aygıtı ile) uygulanır ama elemanı etkinleştirmez. Örneğin, bir görsel tarayıcı fare imleci eleman tarafından üretilen çerçevenin üzerinden geçerken bu sözde sınıfın belirttiği kuralı uygulayacaktır. Etkileşimli ortamı desteklemeyen kullanıcı arayüzleri bu sözde sınıfı desteklemek zorunda değillerdir. Etkileşimli ortamı destekleyen bazı uyumlu kullanıcı arayüzleri (kalem aygıtı gibi) ise bu sözde sınıfı desteklemeyebilir.

  • :active sözde sınıfı bir eleman kullanıcı tarafından etkinleştirildiğinde uygulanır. Örneğin, fare düğmesine kullanıcının basmasıyla bırakması arasındaki sürede).

  • :focus sözde sınıfı bir elemana odaklanıldığında (eleman tuş girdilerini kabul etmeye başladığında veya başka türlü bir metin girdisinde) uygulanır.

Bu sözde sınıflar birbirlerini karşılıklı dışlamazlar. Bir eleman aynı anda bir kaçıyla eşleşebilir.

BB hangi elemanların yukarıdaki durumlarda olabileceğini veya durum değişikliklerine nasıl girip çıktıklarını tanımlamaz. Betiklerle elemanların kullanıcı olaylarına tepkileri değiştirilebilir; farklı aygıtlar ve kullanıcı arayüzleri onları farklı yollarla işaret edebilir yada etkinleştirebilir.

Kullanıcı arayüzlerinin o an gösterilmekte olan belgeyi sözde sınıf geçişlerinden dolayı yeniden oluşturması gerekmez. Örneğin, bir biçembent bir etkin (:active) bağlantının yazıtipi yüksekliğini (font-size) etkin olmayan halinden daha büyük belirtebilir, fakat bu, okuyucu bağlantıyı seçtiğinde harflerin yerlerinin değişmesine yol açabileceğinden bir kullanıcı arayüzü bu biçem kuralını yoksayabilir.

Örnek:
a:link    { color: red }    /* ziyaret edilmemiş bağlantı */
a:visited { color: blue }   /* ziyaret edilmiş bağlantı   */
a:hover   { color: yellow } /* kullanıcı rastlarsa dikkatini çekmek için */
a:active  { color: lime }   /* etkin bağlantılar */

Bütünleşme kurallarının a:hover kuralının color niteliğini gizlememesi için a:hover kuralı, a:link ve a:visited kurallarının sonrasına yerleştirilmelidir. Benzer şekilde, a:active kuralı a:hover kuralının sonrasına yerleştirildiğinden dolayı, etkin renk (yeşil) kullanıcı elemanın hem üzerinde olup hem de elemanı etkinleştirdiğinde uygulanacaktır.

Örnek:
Özdevimli sözde sınıfları biraraya getiren bir örnek:

a:focus { background: yellow }
a:focus:hover { background: white }

Son seçici, :focus ve :hover sözde sınıflarına giren <a> elemanları ile eşleşir.

Odak sınırlarının gösterimi hakkında daha ayrıntılı bilgi edinmek için Dynamic outlines: the outline property bölümüne bakınız.

Not:
BB1'de, :active sözde sınıfı :link ve :visited sözde sınıflarıyla birbirlerini karşılıklı dışlarlardı. Bu artık geçerli değildir. Bir eleman hem :visited hem de :active (veya hem :link hem de :active) sözde sınıflarına sahip olabilir ve hangi niteliklerin uygulanacağını normal bütünleşim kuralları belirler.

5.11.4 Dil sözde sınıfı: :lang

Belge dili bir elemanın insan dilinin nasıl saptanacağını belirtiyorsa, bir elemanın diliyle eşleşen seçiciler yazmak mümkündür. Örneğin, HTML'de [HTML40] dil <meta> elemanının 'lang' özniteliği ile bir ihtimal protokoldeki bilginin (örn, HTTP başlıklarından) bir birleşimi olarak saptanır. XML, xml:lang özniteliğinde belirtir, diğer dillerde dili saptamak için kendilerine özgü yöntemler kullanılıyor olabilir.

:lang(c) sözde sınıfı. dili c olan bir elemanla eşleşir. Burada c, [IANA-DİLKOD] ve [HTML40]'da belirtilen dil kodlarından biridir. Eşleşme |= işlecinin kullandığı eşleşme yöntemi ile bulunur.

Örnek:
Aşağıdaki kurallar bir HTML belgeye Almanca ve Fransızca için tırnak karakterlerini belirtmektedir:

html:lang(fr) { quotes: '« ' ' »' }
html:lang(de) { quotes: '»' '«' '\2039' '\203A' }
:lang(fr) > q { quotes: '« ' ' »' }
:lang(de) > q { quotes: '»' '«' '\2039' '\203A' }

İkinci kural çifti <q> elemanının quotes niteliğine ebeveyninin dili ile ilgili atamaları yapar. Bunun böyle yapılmasının sebebi, tırnak imi seçiminin tırnak içindeki elemanın diline göre yapılması gereğidir.

5.12 Sözde elemanlar

5.12.1 The :first-line sözde elemanı

:first-line sözde elemanı bir paragrafın ilk biçimli satırına özel bir biçem uygular.

Örnek:
p:first-line { text-transform: uppercase }

Bu kural, "her paragrafın ilk satırının bütün harflerini büyük harf yap" anlamına gelir. Bununla birlikte, p:first-line seçicisi gerçek bir HTML elemanı ile eşleşmez. Bunun yerine, Uyumlu kullanıcı arayüzlerinin her paragrafın başlangıcına yerleştireceği bir sözde elemanla eşleşir.

İlk satırın uzunluğunun bazı etmenlere bağlı oluşuna dikkat ediniz; sayfanın genişliği, yazıtipi boyutu gibi. Aşağıdaki gibi sıradan bir HTML paragrafımız olsun:

<p>Bu, çok sayıda satıra bölünmüş
uzunca bir paragraf olup ilk satır kurgusal
bir etiketin içine alınıp geri kalan satırlar
paragrafın diğer satırları olarak ele alınır.</p>

Satırlar şöyle oluşurdu:

BU, ÇOK SAYIDA SATIRA BÖLÜNMÜŞ UZUNCA BİR
paragraf olup ilk satır kurgusal bir etiketin
içine alınıp geri kalan satırlar paragrafın
diğer satırları olarak ele alınır.

Bu çıktı ilk satır için kurgusal etiketlerle kullanıcı arayüzü tarafından yeniden yazılmış olabilir. Kurgusal etiketler miras alınan niteliklerin gösterilişine yardımcı olur.

<p><p:first-line>Bu, çok sayıda satıra bölünmüş
uzunca </p:first-line> bir paragraf olup ilk satır
kurgusal bir etiketin içine alınıp geri kalan satırlar
paragrafın diğer satırları olarak ele alınır.</p>

Eğer sözde eleman yerine gerçek bir eleman kullansaydık, kurgusal etiketler açılıp kapanarak istenen etki yine sağlanırdı. O halde, paragrafı <span> elemanı ile imleyelim:

<p><span class="dnm">Bu, çok sayıda satıra bölünmüş
uzunca bir paragraf olup </span> ilk satır
kurgusal bir etiketin içine alınıp geri kalan satırlar
paragrafın diğer satırları olarak ele alınır.</p>

Kullanıcı arayüzü ilk satır için kurgusal etiketleri yerleştirirken <span> elemanı için uygun başlangıç ve bitiş etiketlerini de yerleştirecektir:

<p><p:first-line><SPAN class="dnm">Bu,
çok sayıda satıra bölünmüş uzunca bir </SPAN></P:first-line>
<SPAN class="dnm"> paragraf olup </SPAN>
ilk satır kurgusal bir etiketin içine alınıp geri kalan
satırlar paragrafın diğer satırları olarak ele alınır.</p>

:first-line sözde elemanı sadece blok seviyesinden elemanlar için kullanılabilir.

Bir ilk satırın blok seviyesinden, üstseli B olan bir A elemanının ilk satırı olduğu durumda, kurgusal etiketler şöyle oluşurdu:

<B>...<A>...
<B:first-line>
  <A:first-line>Bu ilk satırdır</A:first-line>
</B:first-line>

İlk satırla ilgili kurgusal etiketlerin tümü olası en küçük blok seviyesinden elemanın içinde olup kurgusal A:first-line ve B:first-line etiketlerinin iç içelik sırası A ve B elemanları ile aynıdır.

Bir blok seviyesinden elemanın "ilk biçimli satırı" eleman akımındaki ilk satırıdır; yani, yüzen elemanlar ve mutlak konumlu elemanlar yoksayılır. Örnek:

<div>
  <p style="float: left">Yüzen paragraf...</p>
  <p>İlk satır buradan başlıyor...</p>
</div>

'div:first-line' seçicisi ikinci <p>'nin ilk satırına uygulanır, çünkü ilk <p> akımın dışında kalır.

:first-line sözde elemanı satıriçi seviyeden bir eleman gibi olmakla birlikte bazı kısıtlamaları tabidir. Sadece şu niteliklere uygulanır: yazıtipi nitelikleri, renk nitelikleri, artalan nitelikleri, word-spacing, letter-spacing, text-decoration, vertical-align, text-transform, line-height, text-shadow ve clear.

5.12.2 :first-letter sözde elemanı

:first-letter sözde elemanı bir paragrafın baş harfinde bazı görsel etkiler oluşturmak için kullanılır. float niteliği none olduğunda bir satıriçi elemana, aksi takdirde bir yüzen elemana benzer.

:first-letter sözde elemanına şu nitelikler uygulanabilir: yazıtipi nitelikleri, renk nitelikleri, artalan nitelikleri, text-decoration, vertical-align (sadece float niteliği none iken), text-transform, line-height, dış kenar boşluğu (margin) nitelikleri, iç kenar boşluğu (padding) nitelikleri, kenar (border) nitelikleri, float, text-shadow ve clear.

Aşağıdaki belgenin BB2 biçembendi paragrafın baş harfini paragrafın başında bir yuva içine (matbaacılık terimlerini bilmiyorum ama buna "yuvalı baş harf" denebilir; İngilizcesi "dropped initial caps" veya "drop caps") yerleştirmektedir:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Baş harfin büyütülmesi</title>
  <style type="text/css">
   p              { font-family: serif; font-size: 14pt; line-height: 12pt}
   p:first-letter { font-size: 42pt; font-style: italic;
                    font-weight: bold; float: left }
   span           { text-transform: uppercase }
  </style>
 </head>
 <body>
  <p><span>Açıklamalar</span> dizgecikler arasında her yerde bulunabilirler
  ve içerikleri yoksayılır. Açıklamalar iç içe olamazlar.</p>
 </body>
</html>

Bu örnek şöyle biçimlenmiş olabilir:

Kurgusal etiketler:

<p>
<span>
<p:first-letter>
A
</p:first-letter>çıklamalar
</span>
 dizgecikler arasında her yerde ...

:first-line sözde elemanının başlangıç etiketi eklendiği elemanın başlangıç elemanından sonra yerleştirildiği halde, :first-letter sözde elemanının etiketleri içeriğe (yani, ilk karaktere) bitişiktir.

Geleneksel ilk harfin büyütülmesi işlemi sırasında, kullanıcı arayüzleri örneğin karakter tabanlarını hizalamak için yazıtipi boyutlarında yaklaşımda bulunabilirler. Ayrıca karakterin dış boyutları biçimlemede hesaba katılmış olabilir.

Başharfi de içine alan bir noktalama (yani, [Unicode]'da atanmış olan Ps, Pe ve Po noktalama sınıflarından bir karakter) mevcutsa bu da baş harfle birlikte biçimlenmelidir:

:first-letter sözde elemanları blok seviyesinden elemanlarla eşleşir.

Bazı diller bazı karakter birleşimleri ile ilgili özel kurallara sahiptir. Örneğin, Felemenkçede bir sözcüğün başında "ij" karakter birleşimi yer alıyorsa, bu iki karakter birlikte :first-letter sözde elemanı için tek harf kabul edilmelidir.

Örnek:
Aşağıdaki örnekte üstüste binen sözde elemanların nasıl etkileştikleri gösterilmiştir. Her <p> elemanının ilk harfi yeşil ve 24pt'luk olacak, ilk biçimli satırın kalanı mavi olacak, paragrafın kalanı ise kırmızı renkte olacaktır.

p { color: red; font-size: 12pt }
p:first-letter { color: green; font-size: 200% }
p:first-line { color: blue }

<p>Bu metin örneğin hatrına en az iki satırlık olmalıdır.</p>

"en" sözcüğünden hemen önce ikinci satıra geçildiğini varsayalım. Bu durumda kurgusal etiketler şöyle oluşurdu:

<p>
<P:first-line>
<P:first-letter>
B
</P:first-letter>u metin örneğin hatrına
</P:first-line>
en az iki satırlık olmalıdır.
</p>

:first-letter elemanının :first-line elemanının içinde kaldığına dikkat ediniz. :first-line için nitelikler :first-letter elemanından miras alınır, fakat aynı nitelik :first-letter için de belirtilmişse sonuncusu geçerli olacaktır.

5.12.3 :before ve :after sözde elemanları

:before ve :after sözde elemanları bir elemanın içeriğinden önce veya sonra üretilmiş bir içeriği yerleştirmek için kullanılır. Bunlar Üretilen içerik, özdevinimli numaralama ve listeler bölümünde incelenmiştir.

H1:before {content: counter(chapno, upper-roman) ". "}

:first-letter ve :first-line sözde elemanları :before ve :after ile birlikte kullanıldıklarında yerleştirilen metnin ilk harfinde veya ilk satırında etkili olurlar.

Örnek:
p.special:before {content: "Special! "}
p.special:first-letter {color: #ffd800}

Bu kural "Special!" dizgesinin "S" harfini altın rengi yapacaktır.

ÖncekiYukarıSonraki
BB Sözdizimi ve Temel Veri TürleriBir Linux Kitaplığı SayfasıNitelik Değerlerinin Atanması, Bütünleşme ve Kalıtım