<?xml version='1.0' encoding='UTF-8'?>

<div1 id="cascade">
<head>Nitelik Değerlerinin Atanması, Bütünleşme ve Kalıtım</head>
  <div2 id="cascade1"><head>Belirtilen, hesaplanan ve gerçek değerler</head>

<p>Bir kullanıcı arayüzü bir belgeyi çözümleyip bir <termref def="doctree">belge ağacı</termref> oluşturduktan sonra, ağaçtaki her eleman için, hedef <titleref ref="media">ortam türüne</titleref> uygulanan her niteliğe bir değer atamalıdır.</p>

<p>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").</p>

<div3 id="specified-value">
<indexterm><primary>belirtilen değer</primary></indexterm>
<head>Belirtilen değerler</head>

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

<olist>
<item><p>Eğer sonuçlar bir değerde <titleref ref="cascad">bütünleşiyorsa</titleref> o değer kullanılır.</p></item>

<item><p>Aksi takdirde, nitelik <titleref ref="inheritance">miras alınmışsa</titleref>, ebeveyn elemanın değeri (genellikle hesaplanmış değeri) kullanılır.</p></item>

<item><p><indexterm><primary>ilk değer</primary></indexterm>
<termdef id="initial-value" term="İlk değer">Aksi takdirde, niteliğin <term>ilk değer</term>i kullanılır. Her niteliğin ilk değeri kendi tanımında belirtilmiştir</termdef>.</p></item>
</olist>

<p><termref def="doctree">Belge ağacı</termref>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.</p>
</div3>

<div3 id="computed-value">
<indexterm><primary>hesaplanmış değer</primary></indexterm>
<head>Hesaplanmış değerler</head>

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

<p>Ö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; <literal>auto</literal> değerleri her nitelikte belirtilen formüllere göre hesaplanmalı; belli anahtar sözcükler (<literal>smaller</literal>, <literal>bolder</literal>, <literal>inherit</literal> gibi) tanımlarındaki değerlere göre değiştirilmelidirler.</p>

<p>Çoğu durumda elemanlar hesaplanmış değerleri miras alırlar. Bununla birlikte, belirtilmiş değeri miras alan nitelikler de vardır (<property>line-height</property> 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.</p>
</div3>

<div3 id="actual-value">
<indexterm><primary>gerçek değer</primary></indexterm>
<head>Gerçek değerler</head>

<p>İ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.</p>
</div3>
</div2>

<div2 id="inheritance">
<head>Kalıtım</head>

<p>Bazı değerler bir elemanın <termref def="doctree">belge ağacı</termref>ndaki çocukları tarafından miras alınırlar. Her niteliğin <titleref ref="property-defs">tanımında</titleref> değer miras alıp almadığı belirtilmiştir.</p>

<example>
<p>İçeriğinde bir vurgu elemanı (<htmltag>em</htmltag>) bulunan bir <htmltag>h1</htmltag> elemanı olduğunu varsayalım:</p>

<eg><![CDATA[<h1>Başlık <em>önemlidir</em>!</h1>]]></eg>

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

<p>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, <htmltag>html</htmltag> veya <htmltag>body</htmltag> elemanları bunun için kullanılabilir. HTML kaynağı içinde yazar <htmltag>body</htmltag> elemanını kullanmasa bile bu çalışacaktır, çünkü HTML çözümleyici eksik etiketi çıkarsayacaktır.</p>

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

<eg>body { color: black; }</eg>
</example>

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

<example>
<p>Şöyle bir biçembent:</p>

<eg>body { font-size: 10pt }
h1 { font-size: 120% }</eg>

<p>ve böyle bir belge verilmiş olsun:</p>

<eg><![CDATA[
<body>
  <h1><em>Dev</em> bir başlık</h1>
</body>]]>
</eg>

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

<div3 id="value-def-inherit">
<indexterm><primary><literal>inherit</literal></primary></indexterm>
<head><code><kw>inherit</kw></code> değeri</head>

<p>Her nitelik için ayrıca <code>inherit</code> değeri belirtilebilir. Bu takdirde, belirtilen eleman için niteliğin değeri elemanın ebeveyninin aynı niteliğinin <titleref ref="computed-value">hesaplanmış değeri</titleref> olur. <literal>inherit</literal> 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 <code>inherit</code> değer olarak belirtilerek bu kesinleştirilebilir.</p>

<example>
<p>Aşağıdaki örnekte, <property>color</property> ve <property>background</property> niteliklerine <htmltag>body</htmltag> elemanı için değer atanmaktadır. Diğer tüm elemanlarda <property>color</property> 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.</p>

<eg>* {
  color: inherit !important;
  background: transparent;
}

body {
  color: black !important;
  background: white !important;
}</eg>
</example>
</div3>
</div2>

<div2 id="at-import">
<indexterm><primary><code>@import</code></primary></indexterm>
<head><code><kw>@import</kw></code> kuralı</head>

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

<example>
<p>Aşağıdaki satırlar <code>@import</code> sözdizimi bakımından eşdeğerdir (biri <code>url()</code> ile biri çıplak dizge ile):</p>

<eg>
@import "mystyle.css";
@import url("mystyle.css");
</eg>
</example>

<p><indexterm><primary><code>@import</code></primary></indexterm>
<indexterm><primary>koşullu ithalat</primary></indexterm>
<indexterm><primary>ortama bağlı ithalat</primary></indexterm>
Yazarlar ortama bağlı <code>@import</code> kuralları belirtebilir ve böylece  kullanıcı arayüzleri desteklenmeyen <titleref ref="media">ortam türleri</titleref> için özkaynakları almaktan kaçınabilir. Böyle bir <term>koşullu ithalat</term> tanım-yerinden sonra ortam türleri virgül ayraçlı olarak belirtilerek sağlanabilir.</p>

<example>
<p>Aşağıdaki kurallar, aynı ortam türü için bir <code>@media</code> 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.</p>

<eg>
@import url("fineprint.css") print;
@import url("bluish.css") projection, tv;
</eg>
</example>
<p>Bir ortam türünün yokluğunda ithalat koşulsuz olur. Ortam olarak <literal>all</literal> belirtmek aynı etkiye sahiptir.</p>
</div2>

<div2 id="cascad">
<head>Bütünleşme</head>

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

<ulist>
<item><p><kw>Yazar</kw>. 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.</p></item>

<item><p><kw>Kullanıcı</kw>: 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).</p></item>

<item><p><indexterm><primary>öntanımlı biçembent</primary></indexterm>
<kw>Kullanıcı arayüzü</kw>: <termdef id="default-style-sheet" term="öntanımlı biçembent"><titleref ref="conformance">Uyumlu kullanıcı arayüzleri</titleref>nin belgenin diğer biçembentlerine göre önceliği olan bir <term>öntanımlı biçembent</term> 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 <htmltag>em</htmltag> elemanını eğik yazıtipi kullanarak gösterebilmelidir)</termdef>. HTML 4.0 belgeler için önerilen öntanımlı biçembent için <specref ref="sample"/> bölümüne bakınız.</p>

<p>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.</p></item>
</ulist>

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

<p><indexterm><primary>bütünleşme</primary></indexterm>
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.</p>

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

<p>İ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.</p>

<div3 id="cascading-order">
<head>Bütünleşme sırası</head>

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

<olist>
<item><p>Hedef <titleref ref="media">ortam türü</titleref> için, her eleman ve niteliğe uygulanacak bütün bildirimler bulunur. İlgili elemanla <titleref ref="selector">eşleşen seçicilerin</titleref> bildirimleri uygulanır.</p></item>

<item><p><indexterm><primary>önemlilik</primary></indexterm>
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. <code>!important</code> bildirimleri için, kullanıcı biçembentleri, öntanımlı biçembentlere üstün gelen yazar biçembentlerine üstün gelir. <code>!important</code> bildirimleri normal bildirimlere üstün gelir. İthal edilen bir biçembendin onu ithal eden biçembent ile aynı kaynaktan geldiği kabul edilir.</p></item>

<item><p>İkincil sıralama seçicilerin <titleref ref="specificity">özgülüğüne</titleref> 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.</p></item>

<item><p>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.</p></item>
</olist>

<p>Tek tek bildirimlerdeki <code>!important</code> 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.</p>
</div3>

<div3 id="important-rules">
<head><code>!important</code> kuralları</head>

<p>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).</p>

<p>Bununla birlikte, dengeyi sağlamak için normal bildirimlere öncelik sağlayan <code>!important</code> bildirimleri kullanılabilir (bildirimden sonra "!" ve "important" anahtar sözcükleri gelir). Yazar ve kullanıcı biçembentlerinin ikisi de <code>!important</code> kuralları içerebilir, ancak kullanıcı <code>!important</code> 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.</p>

<note><p>Bu anlambilgisi BB1'den farklıdır. BB1'de yazar <code>!important</code> kuralları kullanıcınınkilere üstün gelir.</p></note>

<p><indexterm><primary>kestirme nitelik</primary></indexterm>
Bir <term>kestirme nitelik</term> (<property>background</property> gibi) <code>!important</code> olarak bildirildiğinde onun alt niteliklerinin hepsi <code>!important</code> olarak bildirilmiş olur.</p>

<example>
<p>Aşağıdaki örnekte, kullanıcı biçembendindeki ilk kural yazarın biçembendindeki eşdeğer kuralı geçersiz bırakan bir <code>!important</code> bildirimi içermektedir. İkinci kural da <code>!important</code> bildiriminden dolayı üstün gelecektir. Ancak, üçüncü kural <code>!important</code> 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ı <code>!important</code> bildirimi içerdiğinden, yazarın üçüncü kuralı üstünlüğü yazarın ikinci kuralına kaptıracaktır. Bu da, <code>!important</code> bildirimlerinin yazarın biçembendi içinde ayrıca bir işlevselliğe sahip olduğunu gösterir.</p>

<eg>
/* 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 }
</eg>
</example>
</div3>

<div3 id="specificity">
<head>Bir seçicinin özgülüğünün hesaplanması</head>

<p>Bir seçicinin özgülüğü şöyle hesaplanır:</p>

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

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

<example>
<p>Bazı örnekler:</p>
<eg>
*             {}  /* 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 */
</eg>
</example>

<p>HTML'de, bir elemanın '<tt>style</tt>' ö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.</p>

<example>
<eg><![CDATA[<head>
  <style type="text/css">
    #x97z { color: blue }
  </style>
</head>
<body>
  <P id="x97z" style="color: red">
</body>]]></eg>

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

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

<div3 id="cascade44">
<head>BB-dışı gösterimlerin önceliği</head>

<p>Kullanıcı arayüzleri biçembent dışı kaynaklardan elde ettiği gösterim bilgilerine üstünlük tanımayı seçebilir; HTML'nin <htmltag>font</htmltag> elemanı veya '<tt>align</tt>' ö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.</p>

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

<note><p>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.</p></note>
</div3>
</div2>
</div1>


