testimonial
adının yanı sıra footer
işaretini de dikkate almanız gerekir.sınıflar kendi sayfa bağlamı tamamen bağımsızdır örnekte
.primary-box { }
.primary-box--reduced { }
.primary-box--standout { }
:
Bu örneği ele alalım. Sonuç, sınıfların tamamen yeniden kullanılabilir olmasıdır. Sayfadaki herhangi bir kutu, yukarıdaki sınıfları alabilir ve tam olarak tanımlandığı şekilde biçimlendirilmesini bekleyebilir.
Örneğin, olabilir:
<header>
<div class='primary-box primary-box--reduced'></div>
</header>
<div class='content-box'>
<p class='primary-box primary-box--standout'></p>
</div>
<footer>
<div class='primary-box primary-box--reduced'></div>
</footer>
tasarımcı, kendine güvenen geri gelir ve çarpıcı kutularının dolgu bunları bu stilleri doğrudan gitmek ve ince ayar yapabilirsiniz tweaks Şimdi zaman o sadece olacak alanlar Etkilenenler, HTML'de bu sınıflara sahip alanlar olacaktır. Ayrıca, <header>
numaralı telefondan, .primary-box--reduced
numaranızdan hareket ettirmeye karar verdiğinizde, bunun üstüne ya da altbilgiye yerleştirilen menü çubuğuna, stillerin tamamen geleceğinden emin olabilirsiniz. Eğer bir yere başka bir öğe, belki bir primary-box--standout
veya başlığında sadece bir varsayılan primary-box
gerektiğinde
, şunu oluşturmak ve sınıfları eklemek, bunlar stilleri tamamen izleyecektir.
Beklenmeyen stilleri hiçbir zaman devralmayacaksınız.
Bu çok gerçek bir dünya örneğidir, yakın zamanda inşa ettiğim bir site neredeyse böyle inşa edilmiştir, hemen hemen hepsini söylüyorum çünkü hala öğreniyorum, ama en az sorunla karşılaştığım bitleri garanti edebilirim. Çok akışkan tasarımları ile hızlı hareket eden proje, spesifik olmayan içerikli projelerdi. Önemli olan, bağlam eksikliğidir. İlk örnekte, .testimonial--footer
çok bağlam bağımlıdır, gerçekten yalnızca altbilgideki referanslarda kullanmanız gerekir.
Ve sihirli CSS Wizardry cover this exact topic
DÜZENLEME tarafından sanki
:
benim cevap yapılan bir yorum ile yardımcı olmak için bu örneği eklendi. Bu, BEM veya OOCSS değil, ancak
the SMACSS approach'a biraz daha yakın. Ben css ile sorunların üstesinden nasıl ve melez BEM/SMACSS yaklaşımdır:
sırayla Loaded:
- modül dosyaları gibi
.primary-box
- sayfa bölümü dosyaları gibi
.header
veya .call-to-action
Her dosya daha sp alır böyle
.about-us
olarak veya .contact
sayfa dosyaları, ecific, aynı anda daha karmaşık ve modüller inşa ederken. Daha spesifik bir iç içe sınıf gösterimi kullanılarak modül stilleri aşırı binmek hangi .header {
.primary-box {
color: #000;
}
}
: Yukarıdaki örneklere Bina ve umarım OP yardımcı sen gibi stilleri görebiliyordu.Hala .header
gibi bir sınıf adını kullanarak önleyeceğini unutmayın - bu yeniden kullanılabilir oluyor gibi her yerde karışıklık
Sonraki olmadan daha iyi olurdu .banner-standout
, hatta görebiliyordu:
.about-us {
.header {
.primary-box {
color: #f00;
}
}
}
bulduğum bu çok iyi çalışıyor BEM'in bağlam özgürlüğünü korurken bağlam için gerçek projelerde, bu zinciri de modüllere itmek için mümkün olduğunca çok teşvik ediyorum. Yeni bir genel sayfa bölümü veya modülü tanıyıp isimlendirmeyi ve dosyaları uygun şekilde yeniden düzenlerseniz hayat daha kolay olur. Kodun özenle düzeltildiği bir projede, sayfa dosyalarında hiçbir şeyim yok.
Evet, işte bu yüzden bu modellere sahip bir kamyonum yok, CSS seçicilerinin nasıl çalışacaklarına dair temel olarak tahıllara karşı çıkıyorlar. – Alohci
imo, BEM/OOCSS'nin amacı, bir 'bileşen' de bir değişiklik yapma ve ekranın başka bir yerde 'kırılma' olmasının 'istenmeyen sonuçları' önlemektir. Bunu, sınıf isimlerine göre CSS 'çağlayanını' sınırlandırarak yapar. Bunun tekrar kullanılmasına yardımcı olması bir avantajdır. Kesinlikle bakım yapılmasına yardımcı olur. Ayrıca, CSS'nin ne yaptığı ve neyi etkileyeceği konusunda mantıklıdır, ben bir tasarımcıdan ziyade bir CSS uzmanı değil, programcıyım. –
@RyanVincent Yeniden kullanım sadece bir bonus değildir. [En iyi uygulamalarımız bizi öldürüyor] 'da Nicole Sullivan'ın güçlü bir argümanıdır (http://www.slideshare.net/stubbornella/our-best-practices-are-killing-us) (OOCSS). Ve, BEM bir "web uygulamaları oluşturmak için bir teknoloji", BEM, yeniden kodlama, kod faktörizasyonu yapmak için yardımcı olur. – Paleo