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

6 Nitelik Değerlerinin Atanması, Bütünleşme ve Kalıtım

İçindekiler

    6.1 Belirtilen, hesaplanan ve gerçek değerler
          6.1.1 Belirtilen değerler
          6.1.2 Hesaplanmış değerler
          6.1.3 Gerçek değerler
    6.2 Kalıtım
          6.2.1 inherit değeri
    6.3 @import kuralı
    6.4 Bütünleşme
          6.4.1 Bütünleşme sırası
          6.4.2 !important kuralları
          6.4.3 Bir seçicinin özgülüğünün hesaplanması
          6.4.4 BB-dışı gösterimlerin önceliği

6.1 Belirtilen, hesaplanan ve gerçek değerler

Bir kullanıcı arayüzü bir belgeyi çözümleyip bir belge ağacı oluşturduktan sonra, ağaçtaki her eleman için, hedef ortam türüne uygulanan her niteliğe bir değer atamalıdır.

Bir niteliğin son değeri üç adımlık bir hesaplama ile elde edilir: belirtilen değer saptanır ("belirtilen değer"), gerekliyse bu değer bir mutlak değere dönüştürülür ("hesaplanan değer") ve son olarak yerel ortamın sınırlamalarına uygun dönüşüm yapılır ("gerçek değer").

6.1.1 Belirtilen değerler

Kullanıcı arayüzleri önce, aşağıdaki mekanizmalara dayanarak bir niteliğe bir belirtilmiş değer atamalıdır (öncelik sırasıyla):

  1. Eğer sonuçlar bir değerde bütünleşiyorsa o değer kullanılır.

  2. Aksi takdirde, nitelik miras alınmışsa, ebeveyn elemanın değeri (genellikle hesaplanmış değeri) kullanılır.

  3. Aksi takdirde, niteliğin ilk değeri kullanılır. Her niteliğin ilk değeri kendi tanımında belirtilmiştir.

Belge ağacının kökü bir ebeveyne sahip olmadığından ebeveynindeki değer kullanılamaz; bu durumda mutlaka gerekliyse niteliğin ilk değeri kullanılır.

6.1.2 Hesaplanmış değerler

Belirtilmiş değerler mutlak değerler (red veya '2mm' gibi) olabilecekleri gibi göreli değerler de (auto, '2em', '12%' gibi )olabilirler. Mutlak değerler için değerin hesaplanmasına gerek yoktur.

Öte yandan. göreli değerlerin heseplanmış değerlere dönüştürülmesi gereklidir: yüzdeler, ölçek değerleriyle çarpılmalı (her öznitelik bu ölçek değeri tanımlar); göreli birimleri (em, ex, px) olan değerler uygun yazıtipi veya benek boyutu ile çarpılarak mutlak değerlere dönüştürülmeli; auto değerleri her nitelikte belirtilen formüllere göre hesaplanmalı; belli anahtar sözcükler (smaller, bolder, inherit gibi) tanımlarındaki değerlere göre değiştirilmelidirler.

Çoğu durumda elemanlar hesaplanmış değerleri miras alırlar. Bununla birlikte, belirtilmiş değeri miras alan nitelikler de vardır (line-height niteliğinin sayısal değeri gibi). Çocuk elemanların hesaplanmış değerleri miras almadıkları durumlarda ne olacağı niteliğin tanımında açıklanır.

6.1.3 Gerçek değerler

İlke olarak hesaplanmış değer kullanılmaya hazırdır. Ancak kullanıcı arayüzü belli bir ortamda bir değeri doğrudan kullanıma sokamayabilir. Örneğin, bir kullanıcı arayüzü sadece tamsayı değer olarak belirtilmiş çerçeve çizgisi kalınlığı ile çalışabiliyorsa, hesaplanmış değerin yaklaşık tamsayı değerini bulmak gerekebilir. Gerçek değer bu yaklaşım yapıldıktan sonra hesaplanan değerdir.

6.2 Kalıtım

Bazı değerler bir elemanın belge ağacındaki çocukları tarafından miras alınırlar. Her niteliğin tanımında değer miras alıp almadığı belirtilmiştir.

Örnek:
İçeriğinde bir vurgu elemanı (<em>) bulunan bir <h1> elemanı olduğunu varsayalım:

<h1>Başlık <em>önemlidir</em>!</h1>

<em> elemanına bir renk atanmamışsa, vurgu için ebeveyn elemanın rengi miras alınacaktır; böylece örneğin <h1> elemanı için mavi renk belirtilmişse <em> elemanı da mavi renkte olacaktır.

Bir belgeye öntanımlı bir biçem niteliği atanmak istenirse, yazarlar bunu belge ağacının kök elemanının niteliğine değer atayarak yapabilirler. HTML'de örneğin, <html> veya <body> elemanları bunun için kullanılabilir. HTML kaynağı içinde yazar <body> elemanını kullanmasa bile bu çalışacaktır, çünkü HTML çözümleyici eksik etiketi çıkarsayacaktır.

Örnek:
Örnekte <body> elemanının tüm astsalları, color niteliği miras alınan niteliklerden olduğundan siyah rengi miras alacaklardır:

body { color: black; }

Yüzdelik değer belirtilen değer olarak miras alınmaz, hesaplanan değeri miras alınır.

Örnek:
Şöyle bir biçembent:

body { font-size: 10pt }
h1 { font-size: 120% }

ve böyle bir belge verilmiş olsun:

<body>
  <h1><em>Dev</em> bir başlık</h1>
</body>

<h1> elemanının font-size özniteliği hesaplanan '12pt' değerine sahip olacaktır (ebeveynin 10pt'sunun %120'si). font-size niteliğinin hesaplanan değeri miras alındığından <em> elemanı da 12pt'luk hesaplanan değere sahip olacaktır. Eğer kullanıcı arayüzünün 12pt'luk yazıtipi yoksa, <h1> ve <em> elemanlarının ikisi için de font-size niteliğinin gerçek değerini (örn, '11pt') kullanabilecektir.

6.2.1 inherit değeri

Her nitelik için ayrıca inherit değeri belirtilebilir. Bu takdirde, belirtilen eleman için niteliğin değeri elemanın ebeveyninin aynı niteliğinin hesaplanmış değeri olur. inherit değeri nitelik değerinin miras alınmasına sebep olur. Bu, başka türlü miras almayan niteliklere bile uygulanır. Miras alınan değer, normalde son çare değeri olarak kullanmak içindir ama inherit değer olarak belirtilerek bu kesinleştirilebilir.

Örnek:
Aşağıdaki örnekte, color ve background niteliklerine <body> elemanı için değer atanmaktadır. Diğer tüm elemanlarda color niteliği miras alınacak ve artalan şeffaf olacaktır. Bu kurallar bir kullanıcı biçembendinin parçasıysa belge boyunca beyaz artalan üzerine siyah metin kullanımı zorunlu olacaktır.

* {
  color: inherit !important;
  background: transparent;
}

body {
  color: black !important;
  background: white !important;
}

6.3 @import kuralı

@import kuralı kullanıcıların başka biçembentlerden biçem kuralları ithal edebilmelerini sağlar. @import kuralları biçembentteki tüm kurallardan önce yer almalıdır. @import sözcüğünden sonra içerilecek biçembendin tanım-yeri belirtilir. Bir dizgeye de izin verilir; bu dizge bir url(...) içinde yer alıyormuş gibi değerlendirilir.

Örnek:
Aşağıdaki satırlar @import sözdizimi bakımından eşdeğerdir (biri url() ile biri çıplak dizge ile):

@import "mystyle.css";
@import url("mystyle.css");

Yazarlar ortama bağlı @import kuralları belirtebilir ve böylece kullanıcı arayüzleri desteklenmeyen ortam türleri için özkaynakları almaktan kaçınabilir. Böyle bir koşullu ithalat tanım-yerinden sonra ortam türleri virgül ayraçlı olarak belirtilerek sağlanabilir.

Örnek:
Aşağıdaki kurallar, aynı ortam türü için bir @media kuralıyla sarmalanmış bir biçembendin ithaline eşdeğer olmakla birlikte, kullanıcı arayüzleri bu kurallarla o biçembentleri ihtiyaç duymadıkça indirmeyeceklerdir.

@import url("fineprint.css") print;
@import url("bluish.css") projection, tv;

Bir ortam türünün yokluğunda ithalat koşulsuz olur. Ortam olarak all belirtmek aynı etkiye sahiptir.

6.4 Bütünleşme

Biçembentler üç ayrı kaynaktan elde edilir: yazar, kullanıcı ve kullanıcı arayüzü.

Bu üç kaynaktan elde edilen biçembentler etki alanında bir araya getirilir ve bütünleşecek şekilde birbirleriyle etkileşirler.

BB bütünleşimi her biçembende bir ağırlık atar. Uygulanacak çeşitli kurallardan ağırlığı en büyük olan önceliği alır.

Öntanımlı olarak, yazar biçembentleri kullanıcı biçembentlerinden ağırlıklıdır. Öncelik yine de !important kurallarına ayrılmıştır. En düşük ağırlıklı biçembent kullanıcı arayüzünün öntanımlı biçembendidir.

İthal edilen biçembentler ayrıca bütünleştirilir ve ağırlıkları ithal sırasına bağlıdır. Belli bir biçembentte belirtilmiş kurallar aynı ağırlıkta başka biçembentlerden ithal edilmiş kurallara üstün gelirler. İthal edilen biçembentler kendi kendilerini ithal edebilir ve diğer biçembentlere ardışık olarak aynı öncelik kuralları uygulanarak üstün gelebilirler.

6.4.1 Bütünleşme sırası

Bir eleman/nitelik brleşiminin değerini bulmak için kullanıcı arayüzleri şu sıralamaya uymalıdırlar:

  1. Hedef ortam türü için, her eleman ve niteliğe uygulanacak bütün bildirimler bulunur. İlgili elemanla eşleşen seçicilerin bildirimleri uygulanır.

  2. Bildirimlerdeki başat sıralama kaynağına ve ağırlığına göre şöyledir: normal bildirimler için yazar biçembentleri öntanımlı biçembentlere üstün gelen kullanıcı biçembentlerine üstün gelir. !important bildirimleri için, kullanıcı biçembentleri, öntanımlı biçembentlere üstün gelen yazar biçembentlerine üstün gelir. !important bildirimleri normal bildirimlere üstün gelir. İthal edilen bir biçembendin onu ithal eden biçembent ile aynı kaynaktan geldiği kabul edilir.

  3. İkincil sıralama seçicilerin özgülüğüne göredir: duruma daha özgü seçici daha genel kalana üstün gelir. Sözde elemanlar ve sözde sınıflar normal elemanlar ve sınıflar sayılırlar.

  4. Son sıralama belirtiliş sırasına göredir: Eğer iki kural ayı ağırlık, kaynak ve özgülüğe sahipse son belirtilen kazanır. İthal edilen biçembentlerdeki kuralların ithal eden biçembentteki tüm kurallardan önce belirtildikleri varsayılır.

Tek tek bildirimlerdeki !important belirtimlerinden bağımsız olarak, bu strateji yazar biçembentlerine okuyucununkinden daha yüksek ağırlık verir. Bu bakımdan kullanıcı arayüzünün kullanıcıya belli bir biçembenti kapatma yetkisi vermesi (örn, menülerinden) önemlidir.

6.4.2 !important kuralları

BB yazar ve kullanıcı biçembentleri arasında bir güç dengesi kurmaya çalışır. Öntanımlı olarak yazar biçembendindeki kurallar kullanıcınınkine üstün gelir (3. bütünleşme kuralına bakınız).

Bununla birlikte, dengeyi sağlamak için normal bildirimlere öncelik sağlayan !important bildirimleri kullanılabilir (bildirimden sonra "!" ve "important" anahtar sözcükleri gelir). Yazar ve kullanıcı biçembentlerinin ikisi de !important kuralları içerebilir, ancak kullanıcı !important kuralları yazarınkilere üstündür. Bu BB özelliği kullanıcıya özel gereksinimlerini (büyük yazıtipleri, keskin renk ayrımları gibi) belirtme imkanı vererek belgelerin erişilebilirliğini arttırır.

Not:
Bu anlambilgisi BB1'den farklıdır. BB1'de yazar !important kuralları kullanıcınınkilere üstün gelir.

Bir kestirme nitelik (background gibi) !important olarak bildirildiğinde onun alt niteliklerinin hepsi !important olarak bildirilmiş olur.

Örnek:
Aşağıdaki örnekte, kullanıcı biçembendindeki ilk kural yazarın biçembendindeki eşdeğer kuralı geçersiz bırakan bir !important bildirimi içermektedir. İkinci kural da !important bildiriminden dolayı üstün gelecektir. Ancak, üçüncü kural !important bildirimi içermediğinden yazarın biçembendinin ikinci kuralı bu kuralı geçersiz kılacaktır (kullanıcının kuralı kestime niteliğin alt niteliklerinden biridir). Ayrıca yazarın ikinci kuralı !important bildirimi içerdiğinden, yazarın üçüncü kuralı üstünlüğü yazarın ikinci kuralına kaptıracaktır. Bu da, !important bildirimlerinin yazarın biçembendi içinde ayrıca bir işlevselliğe sahip olduğunu gösterir.

/* Kullanıcının biçembendinden */
P { text-indent: 1em ! important }
P { font-style: italic ! important }
P { font-size: 18pt }

/* Yazarın biçembendinden */
P { text-indent: 1.5em !important }
P { font: 12pt sans-serif !important }
P { font-size: 24pt }

6.4.3 Bir seçicinin özgülüğünün hesaplanması

Bir seçicinin özgülüğü şöyle hesaplanır:

  • Seçicideki ID öznitelikleri sayılır (= a),
  • seçicideki diğer öznitelikler ve sözde sınıflar sayılır (= b),
  • seçicideki eleman isimleri sayılır (= c),
  • sözde elemanlar yoksayılır.

Bu üç sayı a-b-c biçiminde yanyana getirilerek (geniş tabanlı bir sayı sisteminde) özgülük bulunur.

Örnek:
Bazı örnekler:

*             {}  /* a=0 b=0 c=0 -> özgülük =   0 */
LI            {}  /* a=0 b=0 c=1 -> özgülük =   1 */
UL LI         {}  /* a=0 b=0 c=2 -> özgülük =   2 */
UL OL+LI      {}  /* a=0 b=0 c=3 -> özgülük =   3 */
H1 + *[REL=up]{}  /* a=0 b=1 c=1 -> özgülük =  11 */
UL OL LI.red  {}  /* a=0 b=1 c=3 -> özgülük =  13 */
LI.red.level  {}  /* a=0 b=2 c=1 -> özgülük =  21 */
#x34y         {}  /* a=1 b=0 c=0 -> özgülük = 100 */

HTML'de, bir elemanın 'style' özniteliğinin değerleri biçembent kurallarıdır. Bu kuralların bir seçicisi yoktur ama bütünleşme algoritmasinin 3. maddesi gereğince, bir ID seçicisine sahip oldukları varsayılır (özgülük: a=1, b=0, c=0). 4. madde gereği, tüm kurallardan sonra geldikleri varsayılır.

Örnek:
<head>
  <style type="text/css">
    #x97z { color: blue }
  </style>
</head>
<body>
  <P id="x97z" style="color: red">
</body>

Bu örnekte, <p> elemanının rengi kırmızı olurdu. Her iki bildirimin özgülüğü aynı olsa da 'style' özniteliğindeki bildirim, bütünleşmenin 4. kuralı gereğince <style> elemanındaki bildirime üstün gelecektir.

Not:
Özgülük sadece seçicinin biçimiyle ilgilidir. Özellikle, 'id' özniteliği kaynak belgenin DTD'sinde ID türünde bir öznitelik olarak bildirilmiş olsa bile [id="p33"] biçimindeki bir seçici bir öznitelik seçicisi sayılır.

6.4.4 BB-dışı gösterimlerin önceliği

Kullanıcı arayüzleri biçembent dışı kaynaklardan elde ettiği gösterim bilgilerine üstünlük tanımayı seçebilir; HTML'nin <font> elemanı veya 'align' özniteliği bunlara örnek olarak verilebilir. Bu durumda, bu BB-dışı gösterim bilgileri karşı düşen BB kurallarına dönüştürülür ve özgülükleri sıfır yapılır. Bu kuralların yazar biçembendinin başlangıcında belirtildiği varsayılır, böylece biçembendin kendi kuralları üstün kılınır.

Not:
Geçiş aşamasında, bu yöntem, biçembentlere eşlik edecek biçemsel öznitelikler için kolaylık sağlayacaktır.

Not:
BB1'de BB-dışı gösterim bilgilerinin özgülüğü 0 değil 1 yapılırdı. Özgülüğü 0 olan evrensel seçiciden dolayı bu değişmiştir.

ÖncekiYukarıSonraki
SeçicilerBir Linux Kitaplığı SayfasıOrtam Türleri