- Konu sahibi
- #1
CSS !important nedir?
CSS
!important, bir özellik tanımını normal CSS bildirimlerinden daha öncelikli hâle getiren işarettir. Örneğin color: red !important; yazıldığında bu tanım, aynı kaynak ve katman içindeki normal color tanımlarının önüne geçer. Ancak bu, her durumda tüm CSS kurallarını yeneceği anlamına gelmez; kuralın kaynağı, katmanı, önem düzeyi, seçici özgüllüğü ve yazım sırası birlikte değerlendirilir.Nasıl çalışır?
CSS aynı elemana uygulanan birden fazla tanım arasında seçim yaparken kademeli yapı, yani cascade, kurallarını kullanır. Normal bir tanımda seçici özgüllüğü, katman ve kaynak sırası önemlidir.
!important kullanıldığında tanımın önem düzeyi yükselir ve aynı kaynak ile katmandaki normal tanımların önüne geçer.Örnekte düğmenin
checkout kimlikli bir kapsayıcı içinde ve button sınıfında olduğunu varsayalım. Bu öğeye uygulanan kurallar şöyledir:
CSS:
.button {
border-radius: 5px;
background-color: blue;
}
#checkout .button {
background-color: green !important;
}
.button {
background-color: red;
}
Bu örnekte butonun arka planı yeşil olur. İlk ve son kuralların yazım sırası veya seçici gücü önemli değildir; ikinci tanım
!important içerdiği için aynı kapsamda bulunan normal tanımlara üstün gelir.İki tanım da önemliyse önce kaynak türü ve cascade katmanı gibi üst öncelikler karşılaştırılır. Aynı kaynak ve katmanda seçici özgüllüğü önem kazanır; diğer eşitlik koşulları da sağlanıyorsa kaynak sırası belirleyici olur. Önemli bildirimlerde katman sırası tersine döner: önce tanımlanan katman daha öncelikli olabilir. Kullanıcıya ait önemli stiller, yazarın önemli stillerinden üstündür; etkin geçiş değerleri de önemli bildirimin üzerinde yer alabilir.
Ne zaman kullanılabilir?
!important günlük stil yazımında ilk çözüm olmamalıdır. Genellikle başka bir kuralın neden kazandığı anlaşılmadan eklenir ve ileride aynı sorunu çözmek için daha fazla !important kullanılmasına yol açar.Aşağıdaki karşılaştırma, hangi durumda nasıl karar verileceğini gösterir:
| Durum | Önce denenmesi gereken çözüm | !important kullanımı |
|---|---|---|
| Kendi kuralınız beklenmedik şekilde eziliyor | Seçiciyi, kaynak sırasını ve stil dosyasını kontrol edin | Genellikle gerekmez |
| Bir bileşenin geçici olarak zorunlu görünmesi gerekiyor | Önce bileşenin durum sınıflarını düzenleyin | Sınırlı ve açıklamalı kullanılabilir |
| Düzenlenemeyen üçüncü taraf CSS müdahale ediyor | Katman veya daha uygun bir seçici kullanın | Son çare olarak düşünülebilir |
CSS:
.modal.is-open {
border-radius: 5px;
display: block !important; /* Harici bileşen kuralı modalı gizliyor. */
}
Bu açıklama, daha sonra kodu inceleyen kişinin işareti rastgele kaldırmamasını ve sorunun kaynağını anlayabilmesini sağlar.
Uygulanabilir kontrol adımları
- Tarayıcının geliştirici araçlarında ilgili elementi seçin ve uygulanmayan CSS tanımının üzerinin neden çizildiğini kontrol edin.
- Aynı özelliği değiştiren kuralların hangi dosyadan geldiğini, hangi seçiciye sahip olduğunu ve bir medya sorgusu içinde olup olmadığını karşılaştırın.
- Sorun yalnızca seçici özgüllüğü veya yazım sırasıysa, önce daha anlaşılır bir seçici kullanın ya da kuralı uygun konuma taşıyın.
- Sorun harici bir stil dosyasından kaynaklanıyorsa, mümkünse bu dosyayı bir cascade katmanına alarak kendi stillerinizi daha kontrollü biçimde yönetin.
- Yine de
!importantgerekiyorsa yalnızca gerekli özelliğe ekleyin, kapsamı genişletmeyin ve nedenini yorum satırıyla belirtin. - Değişiklikten sonra normal, hover, focus, disabled ve responsive durumlarını ayrı ayrı kontrol edin; tek bir durumda çalışan çözüm diğer durumları bozabilir.
Sık yapılan hatalar
Her CSS sorununda !important kullanmak: Bu yaklaşım asıl çakışmanın kaynağını gizler. Önce geliştirici araçlarında kazanan kuralı bulun.
Birden fazla !important zinciri oluşturmak: Bir kuralı geçersiz kılmak için tekrar
!important eklemek, stil dosyasını zor okunur hâle getirir. Aynı bileşen için tek bir kontrol noktası oluşturmak daha sağlıklıdır.Söz dizimini yanlış yazmak: İşaret değer ifadesinin sonunda bulunmalıdır. Doğru kullanım
margin: 0 !important; biçimindedir. margin !important: 0; geçerli değildir.Animasyonlarda kullanmak:
!important @keyframes tanımları içinde kullanılmaz. Animasyonun uyguladığı değeri değiştirmek gerekiyorsa animasyonun kendisini, sınıf durumunu veya geçiş mantığını düzenleyin.Kapsamı gereksiz büyütmek: Yalnızca tek bir özelliği düzeltmek için bütün kural bloğundaki değerleri önemli hâle getirmeyin. Bu, ileride yapılacak değişikliklerin önüne geçebilir.
Sık sorulan sorular
!important ile specificity aynı şey midir?
Hayır.
!important önem düzeyini değiştirir; specificity ise seçicinin ne kadar özgül olduğunu belirtir. Aynı önem düzeyindeki kurallar karşılaştırılırken specificity devreye girer.Inline style kuralını !important ile geçebilir miyim?
Normal bir inline style çoğu normal stil kuralından üstündür; uygun kapsamda yazılmış bir
!important tanım bunu geçebilir. Fakat bu yöntem, HTML içindeki stil kullanımını temizlemek yerine sorunu CSS içinde büyütebilir; mümkünse inline style kaynağını düzeltin.Kısaltma özelliğinde !important tüm alt özellikleri etkiler mi?
Evet. Örneğin
background: blue !important ilgili tüm background alt özelliklerini önemli yapar. Yalnız rengi değiştirmek istiyorsanız daha dar background-color özelliğini seçmek, istemeden görsel veya konum ayarını da ezmenizi önleyebilir.