让我们仅使用 HTML 和 CSS 创建一个浮动标签输入

2025-05-24

让我们仅使用 HTML 和 CSS 创建一个浮动标签输入

浮动标签输入是一种将输入标签和输入框本身在视觉上合并为一个元素的元素。当输入框获得焦点或包含内容时,标签会从占位符模式切换为标签模式。这一概念由Matt D. Smith于 2013 年首次提出,自此便成为一种广泛使用的模式,甚至成为 Google Material Design 的标准元素。

替代文本

来自 Google Material UI 文档的浮动标签输入

这种模式至今仍在使用,原因如下:

  • 节省空间
  • 看起来很干净,使扫描表格更容易
  • 流畅的过渡效果看起来很棒
  • 无障碍

但开发人员和设计师也需要注意以下几点:

  • 不能同时使用标签和占位符 - 标签也代替了占位符。
  • 浏览器支持 - 根据实现情况,您需要使用 Javascript(性能问题、JS 依赖性等)或更现代的 CSS(不支持 Edge 和 IE 浏览器)。
  • 标签在输入焦点时会变小,如果它有值 - 它会更难阅读。

要求和规范

在此示例中,我们将不使用 JavaScript 来实现此输入,而是使用现代 CSS 语法。这意味着 Edge 和 Internet Explorer 浏览器将无法完全支持其视觉功能和过渡效果,但仍可使用。

我们的实施将遵循针对高质量用户体验进行优化并基于用户研究的设计。

过渡(动画)需要流畅,并尽可能利用硬件加速。

我们还希望使输入变得可访问并保留本机选项卡导航。

可访问的标记



  <div class="floating">
    <input id="inputId" class="floating__input" name="input name" placeholder="Placeholder" />
    <label for="inputId" class="floating__label" data-content="Placeholder">
      <span class="hidden--visually">Placeholder</span>
    </label>
  </div>


Enter fullscreen mode Exit fullscreen mode

我们将使用一个包装元素<div class="floating">,将输入框和标签框组合到一个容器中,并处理输入框之间的间距。包装元素并非必需,但它可以简化组的样式设置。

我们还使用了 来实现元素的无障碍隐藏<span class="hidden--visually">。我在之前的一篇文章中介绍过这种隐藏元素的方法。

造型

为这个元素设置样式所需的代码大约有 80-95 行,因此我决定只重点解释一些比较复杂的具体部分。完整的 HTML 和 CSS 代码可以在下面的 Codepen 示例中查看。

样式实现细节:

  • 我们使用:placeholder-shownCSS 选择器和placeholderHTML 属性让浏览器执行检测何时应将标签调整为较小尺寸或以全尺寸显示的逻辑
  • 我们正在使用 CSS 变量轻松更改配色方案
  • 我们使用:focusCSS 选择器来允许键盘选项卡交互以及常规点击(或触摸)交互

CSS 的过渡和动画需要流畅,因此我们将使用translate3d和来为动画scale3d添加硬件加速top支持。大多数其他纯 CSS 解决方案都使用绝对位置 CSS 属性(例如和 )left来实现过渡,而这些属性由于性能不佳而需要避免使用。我在之前的一篇文章中更深入地讨论过这个主题。

其他一些纯 CSS 解决方案利用requiredHTML 属性:valid:invalid选择器来判断标签何时需要转换,这种做法不仅不规范,而且语义错误。此外,它还使得非必需输入无法实现。

在我们的实现中,标签转换逻辑与占位符显示逻辑共享,因此使代码在语义上更加正确和灵活。

示例和源代码

Edge 和 IE 后备

如前所述,我们使用了现代 CSS 语法而不是 JavaScript,并且获得了更清晰、更高效的标记,但由于 Edge 和 Internet Explorer 不支持:placeholder-shown选择器,因此我们也减少了浏览器支持。

幸运的是,我们的示例在这些浏览器上仍然可用。我们只是不显示动画,并且标签始终显示在其焦点状态下。我们也可以使用浏览器特定的选择器(hacky)或使用Modernizr(Javascript)(如果已包含在项目中)为这些浏览器提供更好的回退。

替代文本

我们在 Microsoft Edge 和 IE 11 中的示例

这些文章都是咖啡带来的灵感。所以,如果你喜欢我的文章,觉得它有用,不妨请我喝杯咖啡!我会非常感激的。

给我买杯咖啡

感谢您花时间阅读这篇文章。如果您觉得它有用,请点赞 ❤️ 或 🦄,分享并评论。

文章来源:https://dev.to/adrianbdesigns/let-s-create-a-floating-label-input-with-html-and-css-only-4mo8
PREV
您无需 JavaScript 即可创建这些元素 响应式文本截断 星级输入 工具提示/下拉菜单 模态浮动标签输入 切换/折叠 结论
NEXT
我使用 React 和 Canvas API 创建了一个很棒的绘画应用程序