Bütünleşik Biçembentler, 2. Aşama | ||
---|---|---|
Önceki | Yukarı | Sonraki |
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").
Kullanıcı arayüzleri önce, aşağıdaki mekanizmalara dayanarak bir niteliğe bir belirtilmiş değer atamalıdır (öncelik sırasıyla):
Eğer sonuçlar bir değerde bütünleşiyorsa o değer kullanılır.
Aksi takdirde, nitelik miras alınmışsa, ebeveyn elemanın değeri (genellikle hesaplanmış değeri) kullanılır.
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.
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.
İ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.
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.
<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.
<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.
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.
inherit
değeriHer 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.
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; }
@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.
@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.
@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.
Biçembentler üç ayrı kaynaktan elde edilir: yazar, kullanıcı ve kullanıcı arayüzü.
Yazar. Yazar, bir kaynak belgenin biçembentlerini belge diliyle ilgili uzlaşımlara uygun olarak belirtir. Örneğin, HTML'de biçembentler belge içinde olabileceği gibi haricen ilintilenmiş de olabilir.
Kullanıcı: Kullanıcının belli bir belge için biçem bilgisi belirtmesi mümkün olabilir. Örneğin, kullanıcı bir biçembent içeren bir dosya belirtebilir veya kullanıcı arayüzü bir biçembent üretimi için de bir arayüz içerebilir (veya öyle de davranabilir).
Kullanıcı arayüzü: Uyumlu kullanıcı arayüzlerinin belgenin diğer biçembentlerine göre önceliği olan bir öntanımlı biçembent uygulayabilmesi (veya öyle davranabilmesi) gerekir. Bir kullanıcı arayüzünün öntanımlı biçembendi, belge dili için genel sunum beklentilerini karşılayacak şekilde belge dilinin elemanlarını biçimleyebilmelidir (örneğin, görsel tarayıcılar HTML'nin <em>
elemanını eğik yazıtipi kullanarak gösterebilmelidir). HTML 4.0 belgeler için önerilen öntanımlı biçembent için A sample style sheet for HTML 4.0 bölümüne bakınız.
Sistem ayarları kullanıcı tarafından değiştiriliğinde (örn, masaüstü renkleri) öntanımlı biçembendin değişebileceğine dikkat ediniz. Öte yandan, kullanıcı arayüzünün iç gerçeklenimindeki sınırlamalardan dolayı öntanımlı biçembendin değerlerini değiştirmek mümkün olmayabilir.
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.
Bir eleman/nitelik brleşiminin değerini bulmak için kullanıcı arayüzleri şu sıralamaya uymalıdırlar:
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.
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.
İ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.
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.
!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.
!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.
!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 }
Bir seçicinin özgülüğü şöyle hesaplanır:
Bu üç sayı a-b-c biçiminde yanyana getirilerek (geniş tabanlı bir sayı sisteminde) özgülük bulunur.
* {} /* 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.
<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.
[id="p33"]
biçimindeki bir seçici bir öznitelik seçicisi sayılır.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.
Önceki | Yukarı | Sonraki |
Seçiciler | Bir Linux Kitaplığı Sayfası | Ortam Türleri |