【问题标题】:How do I (by default) style different types of labels differently?我如何(默认情况下)以不同的方式设置不同类型的标签?
【发布时间】:2009-02-17 10:49:48
【问题描述】:

在我的表单中,我一般希望将 HTML 标签设为粗体,但在标记单选按钮和复选框时不要加粗。

如何在可以导入并默认工作的 CSS 中做到这一点,而不需要对样式进行本地覆盖?

单选标签示例(不应为粗体)

<label for="banana">
<input type="radio" name="banana" id="banana" value="banana" />Banana
</label>

非单选标签示例(应为粗体

<label for="id">ID</label>
<input type="text" size="12" id="id" name="id" />

如果有帮助,我可以更改关联标签的方式。

谢谢!

【问题讨论】:

    标签: html css forms format


    【解决方案1】:

    如果不给正确的标签一个类或使用 Javascript,您将无法做到这一点。使用 jQuery 选择器,您可以做到这一点:

    $("label:not(:has(radio))").addClass("boldmenow");
    ...
    .boldmenow {
      font-weight: bold;
    }
    

    【讨论】:

      【解决方案2】:

      如果您将标记扩展到以下内容:

      <label for="banana">
          <input type="radio" name="banana" id="banana" value="banana" /><span>Banana</span>
      </label>
      

      那么你可以使用这个 CSS:

      label {
          font-weight: bold;
      }
      label span {
          font-weight: normal;
      }
      

      【讨论】:

        【解决方案3】:

        简短的回答是你不能,可靠。如果您试图使其在许多常用浏览器(例如 IE6、7、Firefox 等)中工作,则必须依靠 JavaScript 而不是 CSS 来识别文档中符合您的样式规则的元素并应用对这些元素中的每一个进行分类。

        为了跨浏览器的兼容性,您需要将数组字段标签包装在分类元素中,或者将类应用于标签以将它们与普通标签分开。

        我在这里要做的是将 radio optionslist 包装在一个(无)有序列表(用于语义)中,并将普通文本字段包装在一个段落中.

        例如普通名称:值对:

        <div class="form_row">
          <label for="txtFirstName">First Name</label>
          <p>
            <input type="text" class="text" name="firstName" id="txtFirstName" />
          </p>
        </div>
        

        然后对于 Name:Array 对:

        <div class="form_row">
          <label>Gender</label>
          <ul>
            <li><label for="rdoGenderMale"><input type="radio" class="radio" name="gender" id="rdoGenderMale" value="male" />&nbsp;Male</label></li>
            <li><label for="rdoGenderFemale"><input type="radio" class="radio" name="gender" id="rdoGenderFemale" value="female" />&nbsp;Female</label></li>
          </ul>
        </div>
        

        现在要适当地设置它的样式,您可以为名称标签编写常规规则:

        div.form_row label {font-weight:bold;}
        div.form_row ul {list-style:none;}
          div.form_row ul label {font-weight:normal;}
        

        hth,恩多芬

        【讨论】:

          【解决方案4】:

          您可以为单选按钮的标签添加一个类,然后为它们设置不同的样式。

          <label for="banana" class="radio">
          

          然后 CSS 可以默认使标签变为粗体,然后为单选框覆盖它以使其正常。

          label { font-weight: bold }
          label.radio { font-weight: normal; }
          

          【讨论】:

          • 谢谢你 - 我想知道是否有任何方法可以设置样式,所以“它只是工作”,而不必记住添加一个类......有点像它应该可以...
          • 如果不给不同的标签一个不同的类,我知道没有办法直接用 CSS 做到这一点。唯一的方法是使用 JavaScript。
          • 从技术上讲,但它的支持不够广泛
          • 它可以在 CSS3 中完成,但 CSS3 仍在开发中 (w3.org/Style/CSS/#specs),所以现在使用它不是一个好主意。
          • 在开发中并不意味着它过去在 CWG 中的样子。见这里:stuffandnonsense.co.uk/malarkey/more/css_unworking_group
          【解决方案5】:

          基本上,你不能因为 IE 不支持它(所以改用一个类),但如果 IE 工作正常并且 CSS3 得到很好的支持,你可以使用像这样的通用兄弟选择器:

          input[type="radio"]~label {font-weight: bold;}
          

          请注意,IE 也不真正支持那里的属性选择器。

          【讨论】:

          • CSS3 甚至还没有最终确定。怎么可能支持?
          • 这并不完全意味着你认为它做什么/它应该做什么。 CWG 基本上已经表示,该规范现在将由通用实现来定义,这意味着大型浏览器玩家可以继续使用它......
          猜你喜欢
          • 1970-01-01
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-04
          • 2010-11-03
          相关资源
          最近更新 更多