Css sınıflarını nesne yönelimli sınıflar olarak düşünmeyin, bunları bir html öğesinin hangi nitelik sınıflarına göre biçimlendirildiğini belirtmek için diğer seçiciler arasında yalnızca bir araç olarak düşünün . Parantezler arasındaki her şeyi öznitelik sınıfı olarak düşünün ve sol taraftaki seçiciler , öznitelik sınıfından öznitelikleri miras almak için seçtikleri öğelere söyler . Misal:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
Bir öğeye öznitelik verildiğinde, öğeyi class="foo"
sınıftan miras alan nitelikler olarak .foo
değil, A sınıfı öznitelik ve B sınıfı öznitelik olarak düşünmek yararlıdır . Yani, kalıtım grafiği bir seviye derinliktedir, unsurlar nitelik sınıflarından türetilir ve seçiciler kenarların nereye gittiğini belirtir ve rakip nitelikler olduğunda (yöntem çözünürlük sırasına benzer) önceliği belirler.
Programlamanın pratik anlamı şudur. Yukarıda verilen stil sayfası var ki, ve yeni bir sınıf eklemek istediğiniz .baz
aynı olmalıdır, font-size
olarak .foo
. Saf çözüm şu olurdu:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
.baz { font-size : 2em; /* attribute class C, hidden dependency! */}
Ne zaman iki kere bir şeyler yazmak zorunda her zaman çok kızıyorum! Sadece iki kez yazmak zorunda mı, şimdi programlama belirten bir yolu yoktur .foo
ve .baz
aynı olmalıdır font-size
ve bir oluşturduk gizli bağımlılık! Yukarıdaki paradigmam, A sınıfıfont-size
öznitelik özniteliğini özetlemem gerektiğini önerir :
.foo, .bar, .baz { font-size : 2em; /* attribute base class for A */}
.foo, .bar { font-weight : bold; /* attribute class A */}
.foo { color : green; /* attribute class B */}
Buradaki ana şikayet, şimdi seçmeleri gereken öğelerin de öznitelik taban sınıfı A'dan öznitelikleri miras alması gerektiğini belirtmek için A özniteliğinden her seçiciyi yeniden yazmam gerektiğidir . Yine de alternatifler, her şey değiştiğinde gizli bağımlılıkların olduğu her öznitelik sınıfını düzenlemeyi veya bir üçüncü taraf aracını kullanmayı hatırlamak zorundadır . İlk seçenek tanrıyı güldürüyor, ikincisi kendimi öldürmek istiyor.