31

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

<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>

另外让我声明我使用 yui css 样式作为基础。如果您不熟悉它们,可以在这里找到它们:

他们的文档都在这里:Yahoo!用户界面库

@pkaeding:谢谢。我尝试了一些漂浮的东西,看起来很乱。样式化的活动单选按钮似乎可以通过一些 input[type=radio]:active 提名在谷歌搜索中实现,但我没有让它正常工作。所以我猜想的问题更多:这在当今所有的现代浏览器上是否可行,如果不可行,需要的最小 JS 是多少?

4

3 回答 3

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>

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

样式化<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>

focus需要andblur钩子才能在 IE 中完成这项工作。

于 2008-09-04T15:49:41.010 回答
27

对于任何支持 CSS3 的浏览器,您都可以使用相邻的同级选择器来设置标签样式

input:checked + label {
    color: white;
}  

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

于 2008-09-04T16:03:16.330 回答
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>
于 2008-09-04T12:56:41.723 回答