Jump to content
  • 0

CSS3 Radio button. Между label и input дополнительный тэг


artemhp
 Share

Question

Сделал реализацию переключателя таким способом:



<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style type="text/css">
input[type="radio"]{
opacity: 0;
position: absolute;
}
input[type="radio"] + label::before{
content: "";
display: inline-block;
width: 13px;
height: 13px;
line-height: 13px;
margin: 0 8px 0 0;
background: green;
vertical-align: middle;
}
input[type="radio"]:checked + label::before{
background:red;
}
</style>
</head>

<body>
<form action="" name="form">
<input type="radio" name="test" id="first" value="1" /><label for="first">First</label>
<input type="radio" name="test" id="second" value="2" /><label for="second">Second</label>
</form>
</body>

</html>

И работает всё отлично. Всё бы хорошо, но модуль, к которому я делаю этот стиль рендерит в одном месте один переключатель с такой структурой:


<input type="radio" name="test" id="second" value="2" /><script type="text/javascript">var a = 0;</script><label for="second">Second</label>

Следовательно я дополнительно пропишу то же самое для селектора:

input[type="radio"]:checked + script + label::before

и получается:



<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style type="text/css">
input[type="radio"]{
opacity: 0;
position: absolute;
}
input[type="radio"] + label::before,
input[type="radio"] + script + label::before{
content: "";
display: inline-block;
width: 13px;
height: 13px;
line-height: 13px;
margin: 0 8px 0 0;
background: green;
vertical-align: middle;
}
input[type="radio"]:checked + label::before,
input[type="radio"]:checked + script + label::before{
background:red;
}
</style>
</head>

<body>
<form action="" name="form">
<input type="radio" name="test" id="first" value="1" /><label for="first">First</label>
<input type="radio" name="test" id="second" value="2" /><script type="text/javascript">var a = 0;</script><label for="second">Second</label>
</form>
</body>

</html>

Последняя реализация работает в Opera, но не работает в Chrome. Помогите решить, что бы заработало в Chrome

Edited by artemhp
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Оберни каждый input+label в какой-нибудь div


<div class="input-wrapper">
<input type="radio" name="test" id="first" value="1" /><label for="first">First</label>
</div>

и пиши стили отталкиваясь от него.Будет во всех браузерах работать.

Link to comment
Share on other sites

  • 0

Оберни каждый input+label в какой-нибудь div


<div class="input-wrapper">
<input type="radio" name="test" id="first" value="1" /><label for="first">First</label>
</div>

и пиши стили отталкиваясь от него.Будет во всех браузерах работать.

Спасибо за ответ, но решение не подойдет так как:

1. У меня к разметке особого доступа нету. Рендерится без меня.

2. Оборачивается он то в li, то div, и нет в том контейнере никакого обозначения, что там переключатель.

Link to comment
Share on other sites

  • 0

Чем ждать у моря погоды пол месяца, я бы давно уже в этот модуль влез и исправил что надо.

Ну есть еще вариант: напиши на jquery каком-нибудь плагинчик, который повесит нужные классы к нужным элементам. А этим классам задай стили, которые хочешь применить.

Link to comment
Share on other sites

  • 0

Чем ждать у моря погоды пол месяца, я бы давно уже в этот модуль влез и исправил что надо.

Та работы просто хватает. А от кастомных переключателей пришлось пока отказаться. Да и влезть и исправить нельзя, это написание темы для плагина в котором рендерятся разметка с разных блоков системы, которые редактировать нельзя. И jQuery как бы мне хотелось, тоже нельзя. Есть подключаемый файл стилей только.


...
input[type="radio"] + script ~ label::before
...
input[type="radio"]:checked + script ~ label::before
...

так и в опере и в хроме пашет

Спасибо большое, о ~ и не знал. Это может быть и решением, даже если ещё какие теги непредсказуемо появляться будут))

Edited by artemhp
Link to comment
Share on other sites

  • 0

Подскажите, а если така вот конструкция?

<span><input type="radio"></span><label>Test</label>

Как построить селектор, что бы получить доступ к Label только переключателей?

Ведь если сделать что то такое:

span ~ label

, то мы получим доступ абсолютно ко всем лейблам, будь там в спане переключатель или текстовое поле.

Спасибо

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy