CSS3: denetlenmemiş sözde sınıf


108

Resmi bir CSS3 :checkedsözde sınıfı olduğunu biliyorum , ancak :uncheckedsözde sınıf var mı ve aynı tarayıcı desteğine sahipler mi?

Site noktasının referansı bir taneden bahsetmez, ancak bu whatwg spesifikasyonu (her ne ise) yapar.

Aynı sonucun :checkedve :not()sözde sınıflar birleştirildiğinde elde edilebileceğini biliyorum , ancak yine de merak ediyorum:

input[type="checkbox"]:not(:checked) {
    /* styles */
}

Düzenle:

W3c aynı tekniği tavsiye ediyor

Olumsuzluk sözde sınıfı kullanılarak işaretlenmemiş bir onay kutusu seçilebilir:

:not(:checked)

Yanıtlar:


104

:unchecked Seçicilerde veya CSS UI düzey 3 özelliklerinde tanımlanmamıştır ve Seçiciler'in 4. düzeyinde görünmemiştir.

Aslında, W3C'den alıntı Selectors 4 spesifikasyonundan alınmıştır . Yana Seçiciler 4 kullanılmasını önerir :not(:checked), hiç karşılık gelen olmadığını kabul edebiliriz :uncheckedsözde. Tarayıcı desteği :not()ve :checkedaynıdır, bu nedenle bu bir sorun olmamalıdır.

Bu tutarsız görünebilir :enabledve :disabledbir eleman olabilir, özellikle de devletler ne etkin ne de (yani semantik tamamen geçerli değildir) devre dışı, ancak bu tutarsızlığın herhangi bir açıklaması vardır görünmüyor.

( :indeterminatesayılmaz, çünkü bir öğe benzer şekilde ne kontrol edilmemiş, ne kontrol edilmiş ne de belirsiz olabilir çünkü anlambilim geçerli değildir.)


Bu yanıta eklemek için: not (: kontrol edildi) seçeneğinin Chrome'da mükemmel çalıştığını, ancak IE'de çalışmadığını (9 ve 11'de test edildi) eklemek için.
Bruno Finger

@Bruno Finger:: kontrol edildi ve: not (: kontrol edilmedi) her ikisi de IE üzerinde çalışmalı, ancak her ikisi de kontrol edilen durumu değiştirmenin hedeflenen öğelerin stillerini kontrol edilen / kontrol edilmeyenlerle ilişkili olarak güncellemediği bir hatadan eşit şekilde etkilenir öğesi.
BoltClock

35

Sanırım işleri fazla karmaşıklaştırmaya çalışıyorsun. Basit bir çözüm, onay kutunuzu varsayılan olarak işaretlenmemiş stillerle biçimlendirmek ve ardından işaretli durum stillerini eklemektir.

input[type="checkbox"] {
  // Unchecked Styles
}
input[type="checkbox"]:checked {
  // Checked Styles
}

Eski bir konuyu açtığım için özür dilerim ama bunun daha iyi bir cevap verebileceğini hissettim.

DÜZENLE (3/3/2016):

W3C Specs :not(:checked), kontrol edilmemiş durumu seçme örneği olarak bunu belirtir . Ancak, bu açıkça kontrol edilmemiş durumdur ve bu stilleri yalnızca kontrol edilmemiş duruma uygular. Bu, yalnızca işaretlenmemiş durumda gerekli olan ve input[type="checkbox"]seçici üzerinde kullanıldığında işaretli durumdan kaldırılması gereken stil eklemek için kullanışlıdır . Açıklama için aşağıdaki örneğe bakın.

input[type="checkbox"] {
  /* Base Styles aka unchecked */
  font-weight: 300; // Will be overwritten by :checked
  font-size: 16px; // Base styling
}
input[type="checkbox"]:not(:checked) {
  /* Explicit Unchecked Styles */
  border: 1px solid #FF0000; // Only apply border to unchecked state
}
input[type="checkbox"]:checked {
  /* Checked Styles */
  font-weight: 900; // Use a bold font when checked
}

:not(:checked)Yukarıdaki örnekte kullanılmasa , :checkedseçicinin border: none;aynı etkiyi elde etmek için a kullanması gerekirdi .

input[type="checkbox"]Çoğaltmayı azaltmak için temel stil için kullanın .

input[type="checkbox"]:not(:checked)İşaretli duruma uygulamak istemediğiniz açıkça işaretlenmemiş stiller için kullanın .


CSS seçicilerin yararlı / anlamlı olduğu başka kullanımları da vardır: javascript, otomatik tarayıcı testi
nruth

2
Bu her zaman mümkün değildir. Özellikle form öğeleri, basamaklı kurallar aracılığıyla bunları varsayılan görünüm ve izlenimlerine geri döndürmenize izin vermemeleriyle ünlüdür. (Birinin neden yalnızca işaretli veya yalnızca işaretli olmayan girdilere diğer darphaneden ayrılırken özel bir görünüm ve his vermek istemesine rağmen, benden daha
uzaktır

Bunun mümkün olmadığı başka bir durum: 2'den fazla radyo düğmesi. Örneğin, 1. seçenek işaretlendiğinde bir stil ve başka bir şey işaretlendiğinde başka bir stil isteyebilirsiniz. Çözüm:not(:checked)
Navin

Eğer tarz sadece isteyen özel olanları isteyen olsaydı, neden kullanmayın :first-child, :last-childya :nth-childbirlikte seçici :checked. :not(:checked)Yorumunuzu yanlış anlamadıkça belirttiğiniz durumu kapsamayacaktır.
Michael Stramel

@MichaelStramel html'lerin sırasını css'e mi koyuyor? hayır teşekkürler
inetphantom

3

No: unchecked sözde sınıfı yoktur, ancak: checked sözde sınıfı ve kardeş seçiciyi kullanırsanız, her iki durum arasında ayrım yapabilirsiniz. En son tarayıcıların hepsinin: işaretli sözde sınıfı desteklediğine inanıyorum, bu kaynaktan daha fazla bilgi bulabilirsiniz: http://www.whatstyle.net/articles/18/pretty_form_controls_with_css

Jquery ile daha iyi tarayıcı desteği alacaksınız ... tıklamanın ne zaman gerçekleştiğini algılamak için bir tıklama işlevi kullanabilir ve işaretli olup olmadığını, gerektiğinde bir sınıf ekleyebilir veya bir sınıfı kaldırabilirsiniz ...


-2

Bunu ele alma şeklim, bir koşul temelinde bir etiketin className'ini değiştirmekti. Bu şekilde sadece bir etikete ihtiyacınız var ve farklı eyaletler için farklı sınıflara sahip olabilirsiniz ... Umarım yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.