我希望一组单选按钮看起来像一组切换按钮(但仍像单选按钮一样起作用)。它们不必看起来完全像切换按钮。
仅使用CSS和HTML怎么做?
编辑:当按钮被选中/取消选中时,我会很满意地使小圆圈消失并更改样式。
我希望一组单选按钮看起来像一组切换按钮(但仍像单选按钮一样起作用)。它们不必看起来完全像切换按钮。
仅使用CSS和HTML怎么做?
编辑:当按钮被选中/取消选中时,我会很满意地使小圆圈消失并更改样式。
Answers:
根据要支持的浏览器,除了隐藏单选按钮之外,还可以使用:checked
伪类选择器。
使用此HTML:
<input type="radio" id="toggle-on" name="toggle" checked
><label for="toggle-on">On</label
><input type="radio" id="toggle-off" name="toggle"
><label for="toggle-off">Off</label>
您可以使用类似以下CSS的内容:
input[type="radio"].toggle {
display: none;
}
input[type="radio"].toggle:checked + label {
/* Do something special with the selected state */
}
例如,(保持自定义CSS简介)如果你使用引导程序,您可以添加class="btn"
到您的<label>
元素和风格他们适当地创建切换,看起来像:
...仅需要以下附加CSS:
input[type="radio"].toggle:checked + label {
background-image: linear-gradient(to top,#969696,#727272);
box-shadow: inset 0 1px 6px rgba(41, 41, 41, 0.2),
0 1px 2px rgba(0, 0, 0, 0.05);
cursor: default;
color: #E6E6E6;
border-color: transparent;
text-shadow: 0 1px 1px rgba(40, 40, 40, 0.75);
}
input[type="radio"].toggle + label {
width: 3em;
}
input[type="radio"].toggle:checked + label.btn:hover {
background-color: inherit;
background-position: 0 0;
transition: none;
}
input[type="radio"].toggle-left + label {
border-right: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
input[type="radio"].toggle-right + label {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
我已经在单选按钮切换jsFiddle演示中包括了此功能以及其他后备样式。请注意,:checked
仅IE 9支持此方法,因此此方法仅限于更新的浏览器。
但是,如果您需要支持IE 8并愿意使用JavaScript *,则可以轻松获得伪支持:checked
(尽管此时您可以轻松地直接在标签上设置类)。
使用一些快速且肮脏的jQuery代码作为解决方法的示例:
$('.no-checkedselector').on('change', 'input[type="radio"].toggle', function () {
if (this.checked) {
$('input[name="' + this.name + '"].checked').removeClass('checked');
$(this).addClass('checked');
// Force IE 8 to update the sibling selector immediately by
// toggling a class on a parent element
$('.toggle-container').addClass('xyz').removeClass('xyz');
}
});
$('.no-checkedselector input[type="radio"].toggle:checked').addClass('checked');
然后,您可以对CSS进行一些更改以完成操作:
input[type="radio"].toggle {
/* IE 8 doesn't seem to like to update radio buttons that are display:none */
position: absolute;
left: -99em;
}
input[type="radio"].toggle:checked + label,
input[type="radio"].toggle.checked + label {
/* Do something special with the selected state */
}
*如果您使用的是Modernizr,则可以使用:selector
测试来帮助确定是否需要后备。我在示例代码中将测试称为“ checkedselector”,随后仅在测试失败时才设置jQuery事件处理程序。
这是上面发布的那个不错的CSS解决方案JS Fiddle示例的我的版本。
的HTML
<div id="donate">
<label class="blue"><input type="radio" name="toggle"><span>$20</span></label>
<label class="green"><input type="radio" name="toggle"><span>$50</span></label>
<label class="yellow"><input type="radio" name="toggle"><span>$100</span></label>
<label class="pink"><input type="radio" name="toggle"><span>$500</span></label>
<label class="purple"><input type="radio" name="toggle"><span>$1000</span></label>
</div>
的CSS
body {
font-family:sans-serif;
}
#donate {
margin:4px;
float:left;
}
#donate label {
float:left;
width:170px;
margin:4px;
background-color:#EFEFEF;
border-radius:4px;
border:1px solid #D0D0D0;
overflow:auto;
}
#donate label span {
text-align:center;
font-size: 32px;
padding:13px 0px;
display:block;
}
#donate label input {
position:absolute;
top:-20px;
}
#donate input:checked + span {
background-color:#404040;
color:#F7F7F7;
}
#donate .yellow {
background-color:#FFCC00;
color:#333;
}
#donate .blue {
background-color:#00BFFF;
color:#333;
}
#donate .pink {
background-color:#FF99FF;
color:#333;
}
#donate .green {
background-color:#A3D900;
color:#333;
}
#donate .purple {
background-color:#B399FF;
color:#333;
}
用彩色按钮样式:)
visibility:hidden
可以代替offscreen hack
ie代替`top:-20px;`dovisibility:hidden
示例图片(您可以运行以下代码):
在寻找了真正干净,直接的东西之后,我最终对另一个仅考虑复选框的代码进行了一个简单的更改就构建了该代码,因此我尝试了RADIOS的功能,它也起作用了(!)。
CSS(SCSS)完全来自@mallendeo(根据JS学分建立),我所做的只是将输入的类型更改为RADIO,并为所有无线电开关赋予了相同的名称....和VOILA! !它们会自动彼此停用!!
很干净,而且正如您所问的那样,只有CSS和HTML!
正是在尝试和编辑了十多个选项(大多数情况下需要jQuery,或者不允许使用标签,甚至与当前浏览器真正不兼容的选项)三天后,这正是我一直在寻找的东西。这就是全部!
我有义务在此处包含代码,以使您看到一个有效的示例,因此:
如果您运行该代码段,则会看到我将iOS收音机保持选中状态并处于禁用状态,因此您可以观察一下激活另一个收音机时它也会受到的影响。我还为每个收音机包括2个标签,一个在标签上,一个在标签上。还包括原始代码的副本,以在同一窗口中显示工作复选框。
这是适用于所有浏览器的解决方案(也是IE7和IE8;未检查IE6):
http://jsfiddle.net/RkvAP/230/
的HTML
<div class="toggle">
<label><input type="radio" name="toggle"><span>On</span></label>
</div>
<div class="toggle">
<label><input type="radio" name="toggle"><span>Off</span></label>
</div>
JS
$('label').click(function(){
$(this).children('span').addClass('input-checked');
$(this).parent('.toggle').siblings('.toggle').children('label').children('span').removeClass('input-checked');
});
的CSS
body {
font-family:sans-serif;
}
.toggle {
margin:4px;
background-color:#EFEFEF;
border-radius:4px;
border:1px solid #D0D0D0;
overflow:auto;
float:left;
}
.toggle label {
float:left;
width:2.0em;
}
.toggle label span {
text-align:center;
padding:3px 0px;
display:block;
cursor: pointer;
}
.toggle label input {
position:absolute;
top:-20px;
}
.toggle .input-checked /*, .bounds input:checked + span works for firefox and ie9 but breaks js for ie8(ONLY) */ {
background-color:#404040;
color:#F7F7F7;
}
利用最小的JS(jQuery,两行)。
.toggle label input
在Chrome中看起来也可以使用 .toggle label input { display:none }
受Michal B.的启发。如果您使用引导程序。
label.btn {
padding: 0;
}
label.btn input {
opacity: 0;
position: absolute;
}
label.btn span {
text-align: center;
padding: 6px 12px;
display: block;
}
label.btn input:checked+span {
background-color: rgb(80, 110, 228);
color: #fff;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<div>
<label class="btn btn-outline-primary"><input type="radio" name="toggle"><span>One</span></label>
<label class="btn btn-outline-primary"><input type="radio" name="toggle"><span>Two</span></label>
<label class="btn btn-outline-primary"><input type="radio" name="toggle"><span>Three</span></label>
</div>
我知道这是一个古老的问题,但是由于我只是想这样做,所以我想我将发布最终的内容。因为我使用的是Bootstrap,所以我选择了Bootstrap选项。
的HTML
<div class="col-xs-12">
<div class="form-group">
<asp:HiddenField ID="hidType" runat="server" />
<div class="btn-group" role="group" aria-label="Selection type" id="divType">
<button type="button" class="btn btn-default BtnType" data-value="1">Food</button>
<button type="button" class="btn btn-default BtnType" data-value="2">Drink</button>
</div>
</div>
</div>
jQuery的
$(document).ready(function () {
$('#divType button').click(function () {
$(this).addClass('active').siblings().removeClass('active');
$('#<%= hidType.ClientID%>').val($(this).data('value'));
//alert($(this).data('value'));
});
});
我选择将值存储在一个隐藏字段中,这样我就可以轻松获取服务器端的值。
$(document).ready(function () {
$('#divType button').click(function () {
$(this).addClass('active').siblings().removeClass('active');
$('#<%= hidType.ClientID%>').val($(this).data('value'));
//alert($(this).data('value'));
});
});
<div class="col-xs-12">
<div class="form-group">
<asp:HiddenField ID="hidType" runat="server" />
<div class="btn-group" role="group" aria-label="Selection type" id="divType">
<button type="button" class="btn btn-default BtnType" data-value="1">Food</button>
<button type="button" class="btn btn-default BtnType" data-value="2">Drink</button>
</div>
</div>
</div>
HTML:
<div>
<label> <input type="radio" name="toggle"> On </label>
<label> Off <input type="radio" name="toggle"> </label>
</div>
CSS:
div { overflow:auto; border:1px solid #ccc; width:100px; }
label { float:left; padding:3px 0; width:50px; text-align:center; }
input { vertical-align:-2px; }
现场演示: http ://jsfiddle.net/scymE/1/