Пользовательские кнопки радио: как снять отметку? (Флажок Взломать)
Я создал несколько пользовательских флажков, которые прекрасно работают:
https://codepen.io/anon/pen/jwxXar
Я пытался сделать то же самое с переключателями. Но если активна одна радиокнопка, а я нажимаю другую, снятие отметки не работает:
➤ https://codepen.io/anon/pen/YQLdxd
Пользовательский код радио кнопок CSS
.radio {
position: relative;
margin-bottom: 10px;
}
.radio input[type="radio"] {
cursor: pointer;
height: 100%;
left: 0;
margin: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 1;
}
.radio label {margin-left: 32px;}
.radio label:before,
.radio label:after {
content: "";
display: block;
position: absolute;
}
.radio label:before {
background: #fff;
border: 1px solid #ccc;
border-radius: 50%;
height: 20px;
left: 0;
top: 4px;
width: 20px;
}
.radio label:after {
background: red;
border-radius: 50%;
height: 12px;
left: 5px;
opacity: 0;
pointer-events: none;
top: 9px;
width: 12px;
}
.radio input:checked ~ label:after {opacity: 1;}
input[type="radio"]:checked + label:before {
border: 1px solid red;
box-shadow: inset 0 0 0 1px #fff, inset 0 0 0 0 #fff, inset 0 0 0 16px #fff;
color: #fff;
}
Пользовательские кнопки радио HTMLCode
<div class="radio">
<input value="" type="radio">
<label>Radio Button 1</label>
</div>
<div class="radio">
<input value="" type="radio">
<label>Radio Button 2</label>
</div>
<div class="radio">
<input value="" type="radio">
<label>Radio Button 3</label>
</div>
<div class="radio">
<input value="" type="radio">
<label>Radio Button 4</label>
</div>
У кого-нибудь из CSS Super Heros есть идея, почему не работают переключатели?
2 ответа
Решение
Вы должны указать название радио: имя ="радио", то же имя для всех радио группы
.radio {
position: relative;
margin-bottom: 10px;
}
.radio input[type="radio"] {
cursor: pointer;
height: 100%;
left: 0;
margin: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 1;
}
.radio label {margin-left: 32px;}
.radio label:before,
.radio label:after {
content: "";
display: block;
position: absolute;
}
.radio label:before {
background: #fff;
border: 1px solid #ccc;
border-radius: 50%;
height: 20px;
left: 0;
top: 4px;
width: 20px;
}
.radio label:after {
background: red;
border-radius: 50%;
height: 12px;
left: 5px;
opacity: 0;
pointer-events: none;
top: 9px;
width: 12px;
}
.radio input:checked ~ label:after {opacity: 1;}
input[type="radio"]:checked + label:before {
border: 1px solid red;
box-shadow: inset 0 0 0 1px #fff, inset 0 0 0 0 #fff, inset 0 0 0 16px #fff;
color: #fff;
}
<div class="radio">
<input value="" type="radio" name="radios">
<label>Radio Button 1</label>
</div>
<div class="radio">
<input value="" type="radio" name="radios">
<label>Radio Button 2</label>
</div>
<div class="radio">
<input value="" type="radio" name="radios">
<label>Radio Button 3</label>
</div>
<div class="radio">
<input value="" type="radio" name="radios">
<label>Radio Button 4</label>
</div>
Ничего плохого в вашем CSS. Единственное, что вам нужно позаботиться о радио, это то, что радио кнопки всегда работают в группе. Поэтому вы должны дать им имя (name attribute
)
<div class="radio">
<input value="" type="radio" name="rb1">
<label>Radio Button 1</label>
</div>
<div class="radio">
<input value="" type="radio" name="rb1">
<label>Radio Button 2</label>
</div>
<div class="radio">
<input value="" type="radio" name="rb1">
<label>Radio Button 3</label>
</div>
<div class="radio">
<input value="" type="radio" name="rb1">
<label>Radio Button 4</label>
</div>