【问题标题】:Form styling best practices表单样式最佳实践
【发布时间】:2011-09-07 06:34:19
【问题描述】:

我在 Photoshop 中创建了一组不错的表单元素,并希望将它们转换为 HTML 和 CSS。简单的输入文本表单将具有背景图像,因为该字段的大小不会改变。但是,文本区域表单会随着用户键入而动态改变大小。

通常,为了构建这种样式,我会将表单字段包装在 div 中,如下所示:

<div class = "textarea-top">
  <div class = "textarea-bottom">
    <textarea></textarea>
  </div>
</div>

或者通过在一个包装 div 中使用多个背景图像:

<div class = "textarea">
  <textarea></textarea>
</div>

有没有更好的方法来解决这个问题?重申一下,字段样式是可以重复的高级图像(对于字段的主体),并且具有顶部和底部的样式。问题是,处理这些高级表单样式的最佳做法是什么?

【问题讨论】:

    标签: html css forms


    【解决方案1】:

    我不完全确定您所说的“最佳实践”是什么意思,但我要改进的一件事是语义。 你可以(应该?)使用&lt;fieldset&gt;'s 而不是一个相当无意义的&lt;div&gt;

    您不需要在textarea 周围使用两个&lt;div&gt;,甚至不需要在一个&lt;div&gt; 上使用多个背景图像(这是一个CSS3 属性,并且没有得到广泛支持)。

    相反,您应该将&lt;textarea&gt; 包装在&lt;label&gt; 元素中,并嵌套您的背景图像,如下所述:

    试试这个:

    <fieldset class="expandableInput">
      <label>
        Semantic text:
        <textarea></textarea>
      </label>
    </fieldset>
    

    奖励:像这样将表单元素包裹在&lt;label&gt; 中,可以提供更大的点击区域,让用户能够专注于手头的表单元素。小心&lt;select&gt;'s,它不会很好玩(即使它是有效的 HTML)

    CSS 类似于:

    .expandableInput {background: url(/path/to/first/img);}
      .expandableInput label {display: block; background: url(/path/to/second/img);}
        .expandableInput textarea {display: block; margin-top: 3px; background: url(/path/to/third/img);}
    

    还有; 为了使表单元素在每个浏览器和平台上的外观保持一致,我强烈推荐 Nathan Smith 的 Formalize CSS(它需要 JS 才能在旧浏览器中支持 HTML5)。

    【讨论】:

    • 感谢 CabGFX,这真的很有帮助。形式化看起来非常整洁,我稍后会尝试一下。至于我想要做什么,我需要三个背景图像(顶部、中间重复和底部)。我将更多地研究 Fieldset 标记,并了解如何使表单更具语义性。我认为您不想用字段集包装所有文本区域,尽管我可能是错的。无论如何,这有帮助。谢谢!
    • 很高兴它有帮助 - 足以接受答案吗?关于&lt;fieldset&gt;,您是对的,它旨在对表单中的一个或多个字段进行逻辑分组,最好使用&lt;legend&gt; 来表示字段的上下文。我将用更多细节来编辑我的答案,以实现您的三个背景图像。
    • 是的,它保证了一个被接受的答案。我为我的延误道歉;我忘记了,因为我在这里还是很新。 ;) 使用标签是个好主意!再次感谢您的帮助。
    猜你喜欢
    • 2020-03-17
    • 1970-01-01
    • 2012-07-19
    • 2011-06-28
    • 2014-06-21
    • 2016-02-28
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    相关资源
    最近更新 更多