2010-01-16 21 views
25

-required öznitelik kümesi olan (for özelliğiyle) input alanlara bağlı label s seçmek için CSS'deki bir yolu var mı bağlı? şöyle birşey:CSS Seçici girişi

label:input[required] { 
    ... 
} 

Şu anda, şekillendirme için etiket ve girişlerine class="required" ekliyorum. Artık gerekli giriş alanlarında HTML5 özniteliği required="required" var. Yedek sınıf özniteliklerini kaldırmak güzel olurdu.

Ben label elementin for özelliğini kullanmaz bulundu, ancak label HTML girişine doğrudan bitişik olmasını gerektirecektir closest answer

.

cevap

6

Nasıl hakkında CSS 2 Attribute Selectors Tarayıcılar arasında oldukça uyumludur.

Örnek:

<style> 
label[required=required] 
{ 
color: blue; 
} 
</style> 
<label required="required" for="one">Label:</label><input name="one" id="one" /> 

da this out.

+5

32 Görünüşte soru ve cevaplar biçimlendirmeyi kullanıyor, ancak yorumlar yapmıyor. Bu önerideki sorun, gerekli özniteliğin, etiket öğesinin değil, girdi öğesine ait olmasıdır.daha iyi durumda CSS da ,: e-posta adresine <= "email" için etiket> sadece söyleyerek: tek geçerli biçimlendirme çünkü [gerekli] girişi: HTML -> gerekli XHTML -> gerekli = "required" o geçerli değil gibi = "false" ya da bir şey gerekli . –

+0

Ayrıca bkz: http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#the-required-attribute –

+0

evet, gereklidir = gerekli değil. Ancak, o zaman gerekli özniteliğe sahip girdilere eklenen tüm etiket etiketlerini alabiliyorsa, bunun mümkün olduğunu düşünmüyorum. Tüm girdileri @required 'input [required]' alabilir, ancak HTML'de bile yanlış olan girişin alt düğümü olmadıkça tüm etiketleri kullanamazsınız. – Tom

4

Bu çözüm en modern tarayıcılarda çalışır:

<style> 

label > input[required="required"] { 
    background: red; 
} 

</style> 
<label for="myField"><input required="required" id="myField" /></label> 
+1

Bence OP, her eleman için bir seçicinin belirlenmesini önlemek için gerekli tüm elemanlara genel olarak uygulanacak bir seçici istiyordu. –

+2

bu, etiket/giriş (bunları iç içe geçirme değil) kullanmanın önerilen yolunu kullanmıyorsanız çalışmaz ( – ashwoods

+2

) Bu yaklaşımla ilgili diğer bir sorun veya 'label + input [required]' işlevini yerine getiren bir diğer sorun ise

0

bu gerçekten OP istediği şekilde CSS yoluyla yapılmasıdır sanmıyorum. CSS bu şekilde çalışmıyor.

Görüşüme göre daha iyi bir yaklaşım geri adım atmak ve büyük resme bakmaktır. Bazı alanların gerekli olduğu ve bazılarının bulunmadığı bir formunuz var. Kullanıcının önce gerekli tüm alanları vermesi veya gerekli alanları bir araya getirmesi ve onları isteğe bağlı alanlardan açıkça ayırması iyi bir yaklaşımdır.

Bu yaklaşıma faydaları vardır

<form> 
    <ul class="required_fields"> 
     <li> 
      <label>username</label> 
      <input /> 
     </li> 
     <li> 
      <label>email</label> 
      <input /> 
     </li> 
    </ul 
    <ul class="optional_fields"> 
      ... 
    </ul> 
</form> 

/* CSS */ 
.required_fields label {font-weight: bold} 
.required_fields label:after { content: "*"; color: red } /*more styles for labels*/ 

gibi bir yapı oluşturabilir. Her birini tek tek değiştirmek zorunda kalmadan 'gerekli' gruptan öğeleri ekleyebilir ve kaldırabilirsiniz. 'Gerekli' sınıfı istediğiniz kadar zincir atayabilirsiniz. Formun 'gerekli' sınıfı varsa, içindeki her şey gerektiği gibi etiketlenir. 'Gerekli' sınıfın başka bir şey çağrılmasına karar verdiyseniz, değişiklik yapmak için daha az yer vardır. Ve genel olarak bu yaklaşım, formlarınızı daha iyi organize etmenize de yardımcı olur. Gerekli ve isteğe bağlı alanları karıştırmamalısınız.

Bunu bir adım daha ileri alabilir ve gerekli özniteliği giriş alanlarına da enjekte edecek bir javascript alabilirsiniz.

$(".required_fields input").each(function(){ 
    this.setAttribute('required', 'required'); 
}); 
+0

Bu zor bir gerekliliktir ve belirli bir tasarım kararını zorlar. Bir posta adresi sormayı düşünün. Adres 1'e ihtiyacımız var, şehir, eyalet, posta kodu. İsteğe bağlı olduğu için 2. adres hattını akıştan dışarı taşırdınız? İnsanlar posta adresinin yapısına aşinadır ve standart bir şekilde yapılandırılmasını isterler. –

+0

Bu durumda adres satırı 2 istisnadır ve istisna olarak özel muamele yapılmalıdır. Gerekli stili devre dışı bırakan bir sınıf .not_required. .required_fields label.not_required: {content: ""} 'dan sonra. Genelden daha spesifik olana gitmek için mükemmel bir çözüm gibi görünüyor. – mastaBlasta