将单选按钮替换为图像,用CSS或纯JS.一些限制

Replace radio buttons with images, with CSS or Pure JS. Some restrictions

本文关键字:JS 或纯 CSS 替换 单选按钮 图像      更新时间:2023-09-26
<label for="apsgender">
    <div class="join-label">Gender</div>
</label>
    <fieldset id="gender_male">
        <input type="radio" name="apsgender" value="1">
            Male
        </fieldset>
    <fieldset id="gender_female">
        <input type="radio" name="apsgender" value="2">
            Female
        </fieldset>

这就是我现在正在处理的代码。使用我从另一个堆栈溢出帖子中获取的此方法设置我的 css 不起作用,因为预先使用了字段集和奇怪的标签。

input[type="radio"] {
    display:none;
}
label {
    display:block;
    padding-left:30px;
    font-family:Arial;
    font-size:16px;
    background: url('http://projects.opengeo.org/common/geosilk/trunk/silk/cross.png') left center no-repeat;
}
input[type="radio"]:checked + label {
    background: url('http://particletree.com/examples/buttons/tick.png') left center no-repeat;
}

我们的开发团队设置了这段代码,我想从来没有人尝试过将图像用于单选按钮。如果可能的话,我也可以使用纯 JS,但我只能将脚本放在元素之前的正文中,而不是之后。

让我知道这是否可能。提前谢谢。

我将发布我正在处理的jsFiddle,但实际上它无处可去。 http://jsfiddle.net/z25FR/1/

我有一个CSS解决方案,但一些HTML需要更改。

小提琴

首先,我们需要隐藏单选按钮,因为它不能被设置样式:

input[type="radio"]{
    display: none;
}

然后,我们将单选按钮附近的文本设为标签:

<input id="male" type="radio" name="apsgender" value="1">
<label for="male">Male</label>

(不要忘记idfor否则您将无法检查单选按钮(

然后,我们将标签样式设置为看起来像一个按钮:

input[type="radio"]+label{
    background: url('http://projects.opengeo.org/common/geosilk/trunk/silk/cross.png') left center no-repeat;
    padding-left: 30px;
}

上面的代码将直接在单选按钮之后修改标签。然后,我们可以在单选按钮:checked时将背景更改为另一个图像:

input[type="radio"]:checked+label{
    background-image: url('http://projects.opengeo.org/common/geosilk/trunk/silk/accept.png');
}

虽然这可能没有帮助,但我会提到你错误地编码了 HTML。它应该是:

<fieldset>
 <legend>Gender</legend>
 <input type="radio" name="apsgender" id="m" value="1">
 <label for="m">Male</label>
 <input type="radio" name="apsgender" id="f" value="2">
 <label for="f">Female</label>
</fieldset>

我见过自定义单选按钮,但没有来源。但是,取决于它的完成方式可能会有一些可访问性影响

http://jsfiddle.net/nm3uB/1/

您需要使用 Javascript 重写 HTML,然后使用 CSS 进行字段切换。一切都可以进入头部,无需触摸模板。

.JS:

window.onload=function(){ 
    gender_male.innerHTML='<input type="radio" name="apsgender" value="1" checked><label>Male</label>';
    gender_female.innerHTML='<input type="radio" name="apsgender" value="2"><label>Female</label>';
}

.CSS:

fieldset{position:relative}
input[type="radio"]{
    opacity: 0;
    position:absolute;
}
input[type="radio"]+label{
    background: url('http://projects.opengeo.org/common/geosilk/trunk/silk/cross.png') left center no-repeat;
    padding-left: 30px;
}
input[type="radio"]:checked+label{
    background: url('http://projects.opengeo.org/common/geosilk/trunk/silk/accept.png') left center no-repeat;
    padding-left: 30px;
}