如何设置样式(css)单选按钮和标签?

Ale*_*and 31 html css styles radio-button

鉴于下面的代码,我如何设置单选按钮的样式,并将所选单选按钮的标签设置为与其他标签不同?

<link href="http://yui.yahooapis.com/2.5.2/build/reset-fonts-grids/reset-fonts-grids.css" rel="stylesheet">
<link href="http://yui.yahooapis.com/2.5.2/build/base/base-min.css" rel="stylesheet">

<div class="input radio">
  <fieldset>
    <legend>What color is the sky?</legend>
    <input type="hidden" name="color" value="" id="SubmitQuestion" />
    <input type="radio" name="color" id="SubmitQuestion1" value="1"  />
    <label for="SubmitQuestion1">A strange radient green.</label>
    <input type="radio" name="color" id="SubmitQuestion2" value="2"  />
    <label for="SubmitQuestion2">A dark gloomy orange</label>
    <input type="radio" name="color" id="SubmitQuestion3" value="3"  />
    <label for="SubmitQuestion3">A perfect glittering blue</label>
  </fieldset>
</div>
Run Code Online (Sandbox Code Playgroud)

另外,让我说明我使用yui css样式作为基础.如果你不熟悉他们,可以在这里找到:

这里有他们的文档:Yahoo!UI库

@pkaeding:谢谢.我尝试了一些漂浮的东西,只是看起来搞砸了.样式活动单选按钮似乎可以使用一些输入[type = radio]:谷歌搜索上的主动提名,但我没有让它正常工作.所以我想的问题更多:这在今天的所有现代浏览器中是否可行,如果不是,那么最小的JS需要什么?

Chr*_*ryk 33

您只需使用HTML和CSS即可解决问题的第一部分; 你需要在第二部分使用Javascript.

在单选按钮附近获取标签

我不确定你的意思是"旁边":在同一条线上和附近,还是在不同的线上?如果您想要同一行上的所有单选按钮,只需使用边距将它们分开.如果你想让它们各自独立,你有两个选择(除非你想进入float:领土)​​:

  • 使用<br />s 分割开的选项和一些CSS来垂直对齐它们:
<style type='text/css'>
    .input input
    {
        width: 20px;
    }
</style>
<div class="input radio">
    <fieldset>
        <legend>What color is the sky?</legend>
        <input type="hidden" name="data[Submit][question]" value="" id="SubmitQuestion" />

        <input type="radio" name="data[Submit][question]" id="SubmitQuestion1" value="1"  />
        <label for="SubmitQuestion1">A strange radient green.</label>
        <br />
        <input type="radio" name="data[Submit][question]" id="SubmitQuestion2" value="2"  />
        <label for="SubmitQuestion2">A dark gloomy orange</label>
        <br />
        <input type="radio" name="data[Submit][question]" id="SubmitQuestion3" value="3"  />
        <label for="SubmitQuestion3">A perfect glittering blue</label>
    </fieldset>
</div>
Run Code Online (Sandbox Code Playgroud)

将样式应用于当前选定的标签+单选按钮

造型<label>就是为什么你需要诉诸Javascript.像jQuery这样的库 是完美的:

<style type='text/css'>
    .input label.focused
    {
        background-color: #EEEEEE;
        font-style: italic;
    }
</style>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript'>
    $(document).ready(function() {
        $('.input :radio').focus(updateSelectedStyle);
        $('.input :radio').blur(updateSelectedStyle);
        $('.input :radio').change(updateSelectedStyle);
    })

    function updateSelectedStyle() {
        $('.input :radio').removeClass('focused').next().removeClass('focused');
        $('.input :radio:checked').addClass('focused').next().addClass('focused');
    }
</script>
Run Code Online (Sandbox Code Playgroud)

focusblur钩子需要作出IE这项工作.


Hen*_*son 27

对于任何支持CSS3的浏览器,您可以使用相邻的兄弟选择器来标记样式

input:checked + label {
    color: white;
}  
Run Code Online (Sandbox Code Playgroud)

MDN的浏览器兼容性表格基本上表示所有当前流行的浏览器(Chrome,IE,Firefox,Safari)在桌面和移动设备上都是兼容的.


pka*_*ing 5

这将使您的按钮和标签至少彼此相邻.我相信第二部分不能单独用css完成,而且需要javascript.我找到了一个可能对你有所帮助的页面,但我现在没有时间尝试一下:http://www.webmasterworld.com/forum83/6942.htm

<style type="text/css">
.input input {
  float: left;
}
.input label {
  margin: 5px;
}
</style>
<div class="input radio">
    <fieldset>
        <legend>What color is the sky?</legend>
        <input type="hidden" name="data[Submit][question]" value="" id="SubmitQuestion" />

        <input type="radio" name="data[Submit][question]" id="SubmitQuestion1" value="1"  />
        <label for="SubmitQuestion1">A strange radient green.</label>

        <input type="radio" name="data[Submit][question]" id="SubmitQuestion2" value="2"  />
        <label for="SubmitQuestion2">A dark gloomy orange</label>
        <input type="radio" name="data[Submit][question]" id="SubmitQuestion3" value="3"  />
        <label for="SubmitQuestion3">A perfect glittering blue</label>
    </fieldset>
</div>
Run Code Online (Sandbox Code Playgroud)