2015-04-23 2 views
0

Мне интересно, есть ли селектор CSS для выбора любого label, который относится к типу ввода checkbox.Селектор для меток, которые относятся только к флажку

<label for="checkbox_1">First checkbox</label> 
<input type="checkbox" name="checkbox_1" value="1"> 

так, что работает легко:

label[for='checkbox_1'] { /* styles */ } 

, но тогда я должен повторить это для каждой этикетки, которая относится к флажку. Я хотел бы сделать что-то вроде:

label[type='checkbox'] { /* styles */ } 

Любые мысли?

+0

В CSS4 это, вероятно, возможно изначально возможно с помощью 'label: has ([type = checkbox])'. Не могу дождаться этого. – Xufox

+0

Ой, подождите, если они не вложены, это можно сделать с помощью '+' selector: '[type = checkbox] + label'.Но это работает только в том случае, если 'label' и' input' - это наоборот ... – Xufox

+0

Хорошо, я сделал еще несколько исследований: [в этом вопросе] (http://stackoverflow.com/questions/1817792/is-there-a- previous-sibling-selector), комментарии предполагают следующий синтаксис, подобный 'label: has (+ [type = 'checkbox']). Но [этот JSFiddle] (http://jsfiddle.net/bbnnt7w3/) демонстрирует использование, когда они наоборот. – Xufox

ответ

0

Вы можете использовать селектор, который выбирает все ЭТИКЕТКИ с атрибутом типа, начиная со слова «флажок»:

label[type^='checkbox'] 

Больше информации о селекторы атрибутов здесь: http://www.w3.org/TR/css3-selectors/#attribute-substrings

+0

Не должно быть '^ =' вместо '= |' then? – Xufox

+0

По-прежнему '^ =' вместо '= ^'. – Xufox

+0

Вы правы. Я починил это. Я смотрел на http://www.w3schools.com/cssref/css_selectors.asp ... Я должен перестать ходить в w3schools: \ –

0

это в настоящее время не представляется возможным с насколько я знаю, чистый CSS. У вас есть несколько вариантов для обходных, хотя:

код [атрибут^= «значение»] Селектор
Это будет работать, если ваши этикетки на самом деле начать с тем же идентификатором/слово, когда связанные с флажками, аналогично на приведенный вами пример кода.

Пример:

HTML

<label for='chckbx'>Foobar</label> 
<input type='checkbox' name='chckbx_1' value='1' /> 

CSS

label[for^='chckbx']{/* styles */} 

Написание HTML определенным образом
Это будет работать, если у вас уже есть ваши <label> s и связанные с ними <input /> s в собственном контейнере, или если вы можете изменить свой HTML таким образом. Хитрость заключается в том, чтобы выбрать контейнер элемента флажка через CSS, а затем создать его дочерний элемент <label>.

Пример:

HTML

<div class='checkboxContainer'> 
    <label for='foo'>Foobar</label> 
    <input type='checkbox' name='foo' value='1' /> 
</div> 

CSS

.checkboxContainer > label{/* styles */} 

Использование JS
можно написать простой пример кода для сделайте это с помощью JavaScript (/ jQuery), если хотите.

Смежные вопросы