CSS表单生成器

结果

表单是大多数网站中最常被用户交互的部分,同时也是许多网站中最缺乏视觉优化的部分。该生成器输出完整样式化表单的CSS:响应式表单网格、标签与输入框组合、文本区域、选择器以及醒目的焦点状态,整体保持统一的视觉风格。设置强调色、圆角半径和间距,然后复制样式表。CSS完整保留原生表单的语义特性,因此验证机制、键盘操作及屏幕阅读器均能正常工作。

如何使用生成器

  1. 1

    设置强调色

    强调色决定每个字段的焦点环和边框颜色。

  2. 2

    选择圆角半径

    半径适用于输入框、文本区域和选择器,使所有字段形状统一。

  3. 3

    设置间距

    间距控制表单网格中各字段之间的垂直距离。

  4. 4

    复制CSS

    一套完整的样式表,可直接粘贴和调整,无需改动你的HTML。

基础表单

<form class="form">
  <label class="field">
    <span class="field-label">Email</span>
    <input type="email" required>
    <span class="field-error">Please enter a valid email.</span>
  </label>

  <label class="field">
    <span class="field-label">Password</span>
    <input type="password" minlength="8" required>
  </label>

  <button type="submit" class="button">Sign up</button>
</form>
.field {
  display: block;
  margin-bottom: 1.25rem;
}
.field-label {
  display: block;
  font-weight: 500;
  margin-bottom: .25rem;
}
.field input {
  width: 100%;
  padding: .5rem .75rem;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
  background: #fff;
  transition: border-color 120ms, box-shadow 120ms;
}
.field input:focus-visible {
  outline: none;
  border-color: #2563eb;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);
}
.field input:invalid:not(:placeholder-shown) {
  border-color: #dc2626;
}
.field-error { display: none; color: #dc2626; font-size: .875rem; margin-top: .25rem; }
.field input:invalid:not(:placeholder-shown) ~ .field-error { display: block; }

四种常见风格

样式 说明 最适合用于
描边式 输入框周围有边框,背景透明 桌面端表单,布局紧凑的场景
下划线式 仅底部边框 极简/编辑类界面
填充式 灰色背景,无边框 受 Material Design 启发的界面
浮动标签 标签置于输入框内部,聚焦或输入内容时向上动画移动 移动优先设计、着陆页

浮动标签最为美观,但需要额外的标记或 JavaScript 代码来检测空状态;而描边式最为通用。

可访问性检查清单

  • 每个输入项均需显示可见标签。切勿仅使用占位符作为标签,该标签在焦点状态下会消失,且无法形成清晰对比。
  • <label for> 或包装用的 <label>。两者均有效;使用包装版更为简便。
  • 焦点指示器。切勿在没有替代方案的情况下使用 outline: none。键盘用户需要它。
  • 错误信息:通过输入端的 aria-describedby 进行链接。切勿仅使用颜色标记错误,需同时添加文字提示或图标。
  • 必填字段:需使用required属性。为视力正常的用户在标签中添加视觉标记(星号)。
  • 输入类型:可使用 type="email"type="tel"type="url"type="number";移动键盘可适配相应输入方式。
  • autocomplete属性autocomplete="email"autocomplete="current-password"等。可大幅节省用户的输入时间。

原生验证状态

CSS为表单有效性提供了伪类:

  • :required / :optional
  • :valid / :invalid
  • :in-range / :out-of-range(适用于带有最小值/最大值的数值输入)
  • :placeholder-shown(为空,可见占位符)
  • :user-invalid(无效且用户已交互,适用于错误样式)

:user-invalid伪类是仅在用户执行操作后才显示错误信息的最简洁方式,避免了交互前出现红色边框。该功能于2023年左右在所有主流版本中获得支持。

禁用状态

.field input:disabled {
  background: #f3f4f6;
  color: #9ca3af;
  cursor: not-allowed;
}

禁用的输入项无法聚焦或提交。如需使其适用于屏幕阅读器,请使用 readonly,该表单可提交数值,但用户无法编辑。

常见问题

不应该。占位符会在用户输入时立即消失,因此无法作为标签使用;此外,占位符文本通常对比度较低,无法满足 WCAG 标准。建议使用可见标签,并辅以可选的占位符来提供格式提示。

由于 :invalid 直接适用于空的必填字段,请使用 :user-invalid(支持交互功能);在旧版浏览器中可结合使用 :invalid:not(:placeholder-shown) 作为替代方案。

设置 appearance: none,移除默认箭头,并通过背景图像或使用伪元素箭头的环绕标签添加自定义箭头。内部选项列表保持系统默认样式,无法通过 CSS 进行自定义。

两者皆适用:HTML验证(requiredtypepattern)适用于无需JavaScript处理的简单场景;而JavaScript则负责处理复杂规则(如密码强度验证、跨字段依赖关系)。务必同时执行服务器端验证,客户端验证主要关乎用户体验,而非安全性。

相关工具