0

0

使用HTML和CSS提高表单验证用户体验_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-24 11:15:04

|

1378人浏览过

|

来源于php中文网

原创

你可以只使用HTML属性实现表单验证的效果,可以使用CSS选择器带来简洁的用户体验。但是,你需要使用一些CSS技巧让效果更好。

使 label 模拟 placeholder 效果

第一: 需要使用真实的

这里我想表达,如果表单简短并且有明显的模式(如注册或登录),你可以使用可视的占位符模式,但是可以使用真实的标签进行替代。

立即学习前端免费学习笔记(深入)”;

建立一个如下所示的表单结构...

HTML

<form action="#0" method="post">    <div>        <input type="text" id="first_name" name="first_name">        <label for="first_name">First Name</label>    </div>    <!-- ... ---></form>

使用 div 作为定位上下文并且将标签直接放置在表单之中。

SCSS

form {    max-width: 450px;    // positioning context    > div {        position: relative;        // Looks like placeholder        > label {            opacity: 0.3;            position: absolute;            top: 22px;            left: 20px;        }    }}

对于光标你不需要做任何操作,因为它们所有语义已经接连起来了。如果点击标签所在区域,输入会被激活。如果点击输入也会被激活。两者均正确。

小诀窍是先放置输入(语义上可行)所以你可以在获取焦点的时候将标签隐藏:

SCSS

form {    /* ... */    > div {        > input[type="text"],        > input[type="email"],        > input[type="password"] {            &:focus {                & + label {                    opacity: 0;                }            }        }    }}

确定必须输入框

可能表单最简单的验证就是使用 required 属性要求这个字段是必填的。浏览器没有比这更快的捕获错误的方式了!

<input required type="text" id="first_name" name="first_name">

表示有效的输入值

让用户得知字段输入正确。浏览器可以通过使用 :valid CSS 选择器向我们传递这些信息:

SCSS

form {    > input[type="text"],    > input[type="email"],    > input[type="password"] {        // show success!        &:valid {            background: url(images/check.svg);            background-size: 20px;            background-repeat: no-repeat;            background-position: 20px 20px;            // continue to hide the label            & + label {                opacity: 0;            }        }    }}

在这种情况下, :valid 可以确保所要求的条件得到满足,但是这个选择器对于确认输入类型也是十分有用的。

关于验证类型的显示提醒

你也可以要求所输入的值是指定的某一类型,如 email 或者 number 。这里有一些与之相关的 示例 。

<input type="email" id="email" name="email" required>

这是一个要求必需填写以及必须是一个有效电子邮件地址的格式要求。让我们来看一下这样的用户体验:

  • 获取焦点时告知用户要求
  • 否则,提醒用户这个输入区域没有获取一个有效值

但是...当输入为空时没有任何提示。也就是说这不是一种无效状态。这只是一种令人烦恼并且会产生不必要的负面影响。为了做到这一点,我们需要知道输入是否为空。

检测输入是否有值

我们想要使用的有 :valid 以及 :invalid ,但是当我们使用 :invalid 时我们不想跳枪,在输入区域有值时使用它。

奇布塔
奇布塔

基于AI生成技术的一站式有声绘本创作平台

下载

有没有一种CSS选择器用于判断输入是否为空?并没有!你可能会想象 :empty 可能可以实现,但是并不可以。 :empty 选择器用于匹配如

... 容器元素有没有内容。输入是没有内容的元素。

这个诀窍为了确保输入区有一个占位符值,之后:

CSS

input:not(:placeholder-shown) {}

在我们的示例中我们并没有使用占位符,但是有一个单一的空格在起作用:

HTML

<input placeholder=" ">

:placeholder-shown 在这里使用再适合不过!这是一个拥有检测当前输入是否有值存在的一个秘密选择器。

当前火狐以及IE浏览器并 不支持 此选择器,这是导航区域最为困难的区域。随着新功能的出现,@supports犹如一个救世主,但是...

/* This doesn't work */@supports (input:placeholder-shown) {    input:not(:placeholder-shown) {    }}

你不能将 @supports 用于选择器,仅可用于键值对(如 @supports(display:flex) )

使用JavaScript检测占位符的支持是十分简单的:

JavaScript

var i = document.createElement('input');if ('placeholder' in i) {}

但是这对于检测 :placeholder-shown 并不是一个简易的方式。所以...这可能需要等待直到得到浏览器更好地支持。

假设已经得到支持,接下来的思维将如何呢???

SCSS

form {    > div {        > input[type="text"],        > input[type="email"],        > input[type="password"] {            // When input is...            //   1. NOT empty            //   2. NOT in focus            //   3. NOT valid        &:invalid:not(:focus):not(:placeholder-shown) {            // Show a light reminder            background: pink;            & + label {                opacity: 0;            }        }        // When that invalid input becomes in focus (and also still isn't empty)        &:invalid:focus:not(:placeholder-shown) {            // Show the more robust requirement instructions below.            & ~ .requirements {                max-height: 200px;                padding: 0 30px 20px 50px;            }        }    }    // <input> ~    // <label> ~     // <div class="requirements">    .requirements {        padding: 0 30px 0 50px;        color: #999;        max-height: 0;        transition: 0.28s;        overflow: hidden;        color: red;        font-style: italic;    }}

创建更为强大的验证

不仅仅是 required 或者 type="email" (与之相似),你可以在客户端进行验证长度的限制(如:最长的密码长度或者最短的密码长度)甚至是正则限制。

这里有一篇与之相关的 文章 。讲述的想要的密码要求如下:

  • 至少6个字符
  • 至少一个大写字符
  • 至少一个小写字符
  • 至少一个数字

可以参考如下示例:

HTML

<input pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}" type="password" id="password" name="password" required placeholder=" ">

Demo

这里我没有使用 :placeholder-shown ,原因在于IE和火狐对之支持有限。这仅仅是一个示例!可以在这里去选择适合自己的。

可以参考Chris Coyier ( @chriscoyier )在 Codepen 上的这个 结合使用HTML5和CSS3的表单验证 。

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 入门学习路线:从零基础到上手开发
Golang 入门学习路线:从零基础到上手开发

Golang 入门路线涵盖从零到上手的核心路径:首先打牢基础语法与切片等底层机制;随后攻克 Go 的灵魂——接口设计与 Goroutine 并发模型;接着通过 Gin 框架与 GORM 深入 Web 开发实战;最后在微服务与云原生工具开发中进阶,旨在培养具备高性能并发处理能力的后端工程师。

0

2026.02.24

中国研究生招生信息网官方网站入口 研招网网页版在线入口
中国研究生招生信息网官方网站入口 研招网网页版在线入口

中国研究生招生信息网入口(https://yz.chsi.com.cn) 此网站是研究生报名入口的唯一官方网站

50

2026.02.24

苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法

本专题汇总苹果官网最新可用入口及中国站点访问方式,涵盖官网直达链接、iPhone官方页面查看方法与常见访问说明,帮助用户快速进入苹果官方网站,便捷了解产品信息与官方服务。

10

2026.02.24

Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址
Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址

本专题系统整理Asianfanfics(AFF)官方网站最新可用入口,涵盖官方平台最新直达地址、官网登录方式及中文访问指引,帮助用户快速、安全地进入AFF平台浏览与使用相关内容。

13

2026.02.24

Go分布式服务治理与链路追踪实践
Go分布式服务治理与链路追踪实践

本专题围绕 Go 语言在分布式系统中的服务治理实践展开,系统讲解服务注册与发现、配置中心、限流熔断、灰度发布以及分布式链路追踪方案。通过完整项目示例,帮助开发者构建可观测性完善、稳定性高、易扩展的 Go 微服务架构体系,提升线上系统问题定位与运维效率。

1

2026.02.24

Python自动化测试与持续集成实战
Python自动化测试与持续集成实战

本专题聚焦 Python 在自动化测试与持续集成中的工程化实践,系统讲解测试框架选型、测试用例设计、接口自动化、测试数据管理及测试报告生成。结合 CI/CD 流水线场景,讲解如何将自动化测试融入持续集成流程,实现代码提交即自动测试,提升项目交付质量与团队协作效率。

3

2026.02.24

Java高并发系统设计与性能调优
Java高并发系统设计与性能调优

本专题围绕 Java 在高并发业务场景下的系统设计与性能调优展开,系统讲解线程模型、并发容器、锁机制、异步编程及 JVM 性能调优思路。结合真实高并发业务场景,深入分析接口限流、线程池配置、热点资源优化与系统稳定性保障方案,帮助开发者构建高性能、高可用的 Java 后端系统。

5

2026.02.24

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1268

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

402

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 1万人学习

php初学者入门课程
php初学者入门课程

共10课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号