1. 使用标签
表单不需要标签也能工作,但正如一位 CSS-Tricks 读者曾经说过的,不使用标签是一种无障碍方面的犯罪。 标签表明输入框的用途,并将它们关联起来。 使用 <label> 标签不仅语义正确,而且可以让您有机会使用 CSS 对其进行独特样式设置。
2. 使标签浮动
这就是如何在不实际使用表格的情况下实现表单上的表格式结构的方法。 只需设置一个静态宽度,将其向左浮动,将文本向右对齐,并给它添加一点右边距。 很漂亮。
label {
float: left;
text-align: right;
margin-right: 15px;
width: 100px;
}

3. 注意不要破坏默认样式
许多浏览器都对输入按钮应用了默认样式。 这提供了良好的用户体验一致性,因此,如果您选择干预,请确保您有充分的理由。 一种常见的破坏方法是使用 CSS 重置技术,其中包含如下内容
* {
border: none;
}
这很好,因为它可以防止在您不希望出现的位置出现不需要的边框,但它也会破坏 Firefox 中输入按钮的默认样式。 一些浏览器更具弹性,有些即使您想更改也很难更改(Safari)。
4. 使用 :focus 伪类
您可以对输入区域和文本区域应用样式,这些样式仅在用户使用 :focus 伪类单击该区域时才会生效。 例如,您可以像这样更改这些元素的边框颜色
textarea:focus, input:focus {
border: 2px solid #900;
}
大多数浏览器都支持它,因此您不妨使用它。 考虑前瞻性增强。

5. 预填充提示,但清除它们
在输入字段和文本区域中预填充一些提示或提醒可能很有用。 例如,如果您有一个常规联系表单和一个标记为“消息:”的文本区域,您可能希望在该文本区域中预填充类似“在此处留下您的积极评论或建设性批评。”的内容。或者,您可以拥有一个预填充为“姓 名 称”的姓名字段,以便您可以提醒用户他们应该按此顺序填写他们的姓名。 您只需在标签中包含文本即可实现此目的
<textarea cols="20" name="Message" rows="20">Hint goes here.</textarea>
但是,如果您就此止步,用户将需要手动删除您在那里输入的任何内容,这不好。 您可以添加一些 Javascript 代码,以便在用户单击该框内部时清除该提示。 这段小程序代码还只允许发生一次,因此如果用户单击离开然后再次单击,他们不会丢失他们输入的内容。
<textarea name="Message" rows="20" cols="20" onfocus="this.value=''; this.onfocus=null;">Hint goes here.</textarea>
6. 使其与 Web 表单工厂一起工作
表单不仅仅是为了美观,它们需要发挥作用。 网页表单可以有两个主要功能:与数据库交互或生成电子邮件。 Web 表单工厂 是一项开源服务,它可以获取您的表单并生成使其完成所需操作所需的代码。

7. 考虑预制解决方案
网页表单是一个反复被讨论的领域。 在这个领域,“不要重新发明轮子”可能是您能做出的最佳决定。
我认为每个人都应该查看 Wufoo。 Wufoo 绝对是有史以来最棒的表单创建器。 他们的价格从免费到合理不等,创建向导非常棒,并且将表单实现到您的网站上非常容易。

精彩的文章,谢谢。
如果您是 WordPress 用户,我建议您使用 cforms,它允许您创建多个表单并根据不同的主题对其进行样式设置。
仅供参考。 :focus 技巧在 IE 上无法开箱即用。 您可以使用此页面上的 JS 来实现这一点。
http://www.htmldog.com/articles/suckerfish/focus/
谢谢 Sanjay,这是一个促进 IE 不支持焦点伪类的绝佳解决方案。
对于像我这样的新手来说,在进行了一些实验之后,我想出了第二点的某些标记,不确定这是否是最好的方法,但我认为它是语义化的!
<form>
<ul>
<li><label for=”input1″> <input type=”text” id=”input1″> </li>
…
</ul>
</form>
CSS 大师们请告诉我是否有更好的方法来实现它! 当然,还要使用上面提到的适当的无序列表样式和标签样式。
嗨,Paul,
是的,就是这样。
这是一些简单的表单标记
Safari 中是否有任何好的资源可以创建美观的(自定义)表单? 我在为 Safari 设置表单样式时掉头发。
恐怕我没有任何关于专门处理 Safari 的好建议。 Safari 在强制其自己的焦点状态、按钮和下拉菜单等方面有点独树一帜。 如果您确实对这些方面有计划,并且难以与 Safari 抗衡,那么作为设计师可能会感到沮丧,但总的来说,我发现默认的东西还不错。
Chris,关于您提供的简单标记示例。 属性 for 的值必须与控制元素内的属性 id 相同。 因此
<input id="Name" type="text" name="Name" />
我想提一下以防止您的读者犯任何错误。
Thomas
感谢您提供这些优秀的技巧。
这是一个很棒的网站。
此致。
那个 wufoo 表单网站还不错。 我目前正在开发一个网站,我一直在使用它 :D
啊! 请不要在 onfocus 中清除值。
为什么?好吧,如果用户开始在输入框中输入内容,然后按 Alt+Tab 或以其他方式离开窗口(例如复制 URL 以引用参考等),然后按 Alt+Tab 返回,它将触发 onblur 事件(当您按 Alt+Tab 离开时)和 onfocus 事件(当您按 Alt+Tab 返回时),这将清除您正在输入的内容。
更好的方法是在清除之前检查当前值是否等于默认值,为此,在页面加载时循环遍历您的输入并检查值,将其存储为 input.defaultValue,然后执行以下操作
onfocus="if(this.defaultValue==this.value) this.value='';"
我一直试图弄清楚表单元素焦点的这件事!不敢相信我没有想到 :focus。好主意。
@Aaron:实际上,不会。该场景在上面显示的第二个代码块中得到了解决。
onfocus="this.value=''; this.onfocus=null;">
如果只是 onfocus="this.value='';",那么它将每次都清除,但这样一来,一旦您开始输入文本,它就不会再清除了。除非我没有正确理解您?
我希望人们停止说“大多数浏览器”支持 :focus 伪类——这会给学习的人带来错误的印象。
:focus 很酷,但不要依赖它,因为 IE6(无论微软怎么说,它仍然拥有最大的市场份额)不支持它!
我说“大多数浏览器都支持它,所以您不妨使用它”的原因正是如此。:focus 伪类对于可用性和样式来说很好,但它不会影响功能。所以使用它,使用大多数浏览器的用户将从中受益,而使用 IE 6 的用户仍然可以拥有一个功能齐全的表单。
事实上,它甚至可能鼓励人们学习,因为他们可能会注意到它在 IE 中不起作用,并寻求解决方案(JavaScript)。
还值得一提的是,您应该避免通过内联事件处理程序添加 JavaScript 功能——它混合了内容和行为。看看 YUI YAHOO.Util.Event.addEventListener 方法,其他库中的类似方法或核心浏览器函数 addEventListener 和 attachEvent(IE)。
嗨,Ed,
哇,一位真正的雅虎员工,真是受宠若惊=)
您提出了一个非常好的观点,非常适合这个博客。我们使用 CSS 来分离内容和设计。这是一个很好的实践,那么为什么不继续保持下去并分离内容和行为呢?
感谢您指出这些库,我确实需要赶上这些技术。
关于自动填充输入和文本区域的另一种方法:http://www.456bereastreet.com/archive/200710/autopopulating_text_input_fields_with_javascript/
关于 IE6 中的 :focus 问题,您可以使用 whatever:hover .htc 使其在该浏览器中工作:http://www.xs4all.nl/~peterned/csshover.html
不错的表单!不过,我认为您可能忘记从该表单的旧表格设计版本中删除了一个 td。 https://css-tricks.org.cn/examples/NiceSimpleContactForm/ 由于此原因无法验证。
您还可以删除每个输入后的换行标签,并在其上设置 clear 属性以获得相同的效果,只是为了使您的代码更具结构性和设计分离性。
@Dyre Hult:是的,那里有一个多余的 <td>,哎呀!我已经将其删除,现在表单可以正常验证了。我还更新了文章中可下载的示例。谢谢!
这些 <br /> 标签也已不再起作用,因此已将其删除。这就是发布此类示例的美妙之处,因为它们会受到如此健康的批评,因此它们自然会变得越来越好!
我还可以建议使用 accesskey="" 和 tabindex=""
这也很方便。再次感谢。。
这太棒了!一篇写得很好且有帮助的帖子;我喜欢您包含所有关于为什么事情应该像您描述的那样的解释。谢谢!**已收藏**
漂亮的表单,非常感谢!!!
将首次使用 :focus,哈哈!
做得好,做得好。
感谢您的提示,因为我想用这个想法来更改我自己的网络表单以提高可用性。
Ralph
精彩的文章,谢谢。
我希望有人能帮我解决我在漂亮简单的联系表单中遇到的问题。
我在我的网站上实现了它,并且运行良好。
然后它停止工作了,并且不会向我发送包含联系信息的电子邮件,实际上我根本没有收到任何电子邮件。
我测试了原始表单文件,除了将我的电子邮件放在 contactengine.php 文件中的 $EmailTo = “我的电子邮件字段” 中之外,其他所有内容都保持不变。
我百思不得其解是什么出了问题。
可能是我的服务器吗?或者有人有什么建议吗?
谢谢,Toni
优秀的帖子……非常有帮助
那个 wufoo 表单网站还不错。我已将其用于一个关于 Sokobanja 的网站,我目前正在开发该网站 :D
最好的网站
感谢 Chris 提供的有用提示和见解,
我的用户现在拥有更好的浏览体验 :D。
这个简单的联系表单真的很棒!!但是有没有办法避免我们在文本表单元素(如电子邮件、姓名等)中获得的黄色背景??
那个 wufoo 表单网站还不错。我已将其用于一个关于 Sokobanja 的网站,我目前正在开发该网站 :D
我一定会实施它并传播这个消息!感谢您撰写了这篇精彩的文章,这正是我一直在寻找的。
感谢您提供有关 CSS 和表单的有用信息。
感谢您的宝贵建议!
我真的很喜欢网络表单工厂。谢谢