0

0

纯CSS3实现不错的表单验证效果的代码分享(图)

黄舟

黄舟

发布时间:2017-04-18 09:41:40

|

1808人浏览过

|

来源于php中文网

原创

这是补充html5基础知识的系列内容,其他为:

  • 一、HTML5-- 新的结构元素

  • 二、HTML5-- figure、time、details、mark

  • 三、HTML5-- details活学活用

  • 四、HTML5-- 现存元素的变化

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

  • 五、HTML5 -- Web表单

  • 今天继续学习Web表单相关的内容,不过今天重点落实到实战中,利用HTML5表单与CSS3-UI实现一款不错的表单效果。

    效果可看下面动图:

    squire

    如效果演示,我们今天就通过简单几行CSS就可实现。

    预备知识

  • 1、HTML5新增的表单类型:tel、email、url(上一篇有介绍)

  • 2、HTML5表单基本验证:required属性

  • 3、HTML5表单自定义验证规则:pattern属性

  • 主要介绍内容

  • 1、CSS3用户接口模块中的伪类

  • 2、自定义错误消息

  • 正文

    既然是表单,我们得有基础的表单HTML结构,下面是我创建的结构,三个表单都是必填字段,并且对于tel一栏我们设置了自定义的验证规则:必须是11位数字。

  •  

  • 创建完成后的效果如下,感觉和我们想要的效果差别还很大。本是同根生啊,一样的HTML,咋这个这么丑。

    屏幕快照-2017-01-17-22.26.29

    别急,下面我们慢慢给它穿衣服。

    下面使用简单的规则,对该表单进行美化:


    * {
        margin: 0;
        font: 13px tahoma, verdana, sans-serif;
        padding: 0;
    }
    ol {
        width: 400px;
        margin: 50px;
    }
    li {
        clear: both;
        list-style-type: none;
        margin: 0 0 10px;
    }
    li:nth-last-child(1) {
        text-align: center;
    }
    label {
        display: block;
        float: left;
        margin: 0 10px 0 0;
        padding: 5px;
        text-align: right;
        width: 100px;
    }
    input {
        border-radius: 5px;
        padding: 5px 5px 5px 30px;
        width: 155px;
    }
    input:focus {
        outline: none;
    }
  •  

  • 屏幕快照-2017-01-17-22.31.27

    现在效果已经很不错了,不过离我们的目标还有一段距离,现在我们该考虑下,表单验证的各个环节,输入框应该长什么样。上面的示例中有三种情况:

  • 1、输入框未激活时

  • 2、输入框激活(输入不正确)

  • 3、输入框激活(输入正确)

  • 针对上面的三个情况,这里进行了三个描述:

  • 1、未激活时,必填表单显示橙色提醒

  • 2、激活时,输入不正确,表单为深红色提示

  • 3、激活时,输入正确,表单为绿色通过

  • 与之相随的是三个图标的变化。

    11

    当我们定义把表单状态定义完成以后其实我们心里已经大致有个效果了,代码是实现效果的工具,下面我们看下如何定义:

    首先是输入框未激活,此时的输入框状态为invalid以及required:


    input:invalid:required {
        background-image: url('nor.png');
        box-shadow: 0 0 5px #f0bb18;
        border: 2px solid #f0bb18;
    }
  •  

  • 其次是输入框激活时,但还没有输入成功,此时输入框状态为focus以及invalid:

    B2S商城系统
    B2S商城系统

    B2S商城系统B2S商城系统是由佳弗网络工作室凭借专业的技术、丰富的电子商务经验在第一时刻为最流行的分享式购物(或体验式购物)推出的开源程序。开发采用PHP+MYSQL数据库,独立编译模板、代码简洁、自由修改、安全高效、数据缓存等技术的应用,使其能在大浏览量的环境下快速稳定运行,切实节约网站成本,提升形象。注意:如果安装后页面打开出现找不到数据库等错误,请删除admin下的runtime文件夹和a

    下载
    input:focus:invalid {
        background-image: url('warn.png');
        box-shadow: 0 0 5px #b01212;
        border: 2px solid #b01212;
    }
  •  

  • 最后是输入框激活时,表单输入成功,这时候输入框状态为valid:


    input:valid {
        background-image: url('suc.png');
        border: 2px solid #7ab526;
    }
  •  

  • 最后,对提交按钮进行修饰:

    input[type="submit"] {
        background: #7ab526;
        border: none;
        box-shadow: 0 0 5px #7ab526;
        color: #fff;
        cursor: pointer;
        font-weight: bold;
        padding: 7px;
        width: 150px;
    }
  •  

  • 22

    怎么样,还不错吧。

    这里不先介绍所有的新CSS选项,更多的CSS选项需要继续探索,我们仅仅使用了几个就可以实现这么不错的效果。

    我们使用的伪类如下:

  • :valid —— 表单元素在内容符合元素类型并验证通过后,获得该类

  • :invalid —— 如果表单元素内容有误,它将获得该类

  • :required —— 任何拥有required属性的表单元素应用了此类

  • 其他拓展

    1、不触发浏览器验证

    如果你不希望浏览器为表单验证,使用novalidate属性或formnovalidate属性可以关闭浏览器验证。

    其中novalidate是表单form所具有的属性,提交表单时会忽略任何错误提示和空白域。


    ...
  •  

  • formnovalidate是input元素的属性,可以为单个表单元素设置该属性。

    ...
  •  

  • 上述表单同样不会触发验证。

    2、自定义错误提示内容

    在上面的例子中可以看到,浏览器会对我们的表单进行验证,在这个过程中会弹出错误消息。而随着输入的不同,这些验证消息也是不一样的。

    未标题-1

    我们虽然不能更改提示框的样式,但我们可以使用JavaScript的setCustomValidity()函数修改错误文字:


  •  

  • 那么,现在当我们输入的时候,提示内容就变成我们自定义的了:

    屏幕快照-2017-01-18-00.07.32

    现在还有一个问题,浏览器的提示是不一样的,为空时的提示和错误的提示文案不一样,这样我们应该怎么分开处理呢?

    这时候就需要validity来查看当前的验证状态:


    tel = document.querySelector('#tel');
    console.log( tel.validity )
  •  

  • 213

    如上图所示,当前验证状态为:customError,就是说用户自定义的验证失败,我们可以根据这些状态来动态的更新提示信息。如果最终验证成功,其中的valid将变为true。


    function check( el ) {
        var validity = el.validity;
        if ( validity.valueMissing ) {
            el.setCustomValidity('该字段为必填内容');
        } else if ( validity.patternMismatch ) {
            el.setCustomValidity('输入内容不符合格式');
        } else {
            el.setCustomValidity('输入有误');
        }
    }
  •  

  • 上述只是演示,实际场景时刻替换自己的提示内容。

    最后,可以通过validationMessage来获取当前的错误提示信息:

    console.log( el.validationMessage )
    // "请填写此字段。"
  •  

  • 总结

    在本次学习中做了一个简单且最常见的Demo,另外介绍了一些关于表单验证修饰的细节,虽然这些东西五年前就已经有了,但补充基础知识什么时候都不算晚。

    今天学习了valid、invalid、required的使用,知识点虽小,但效果却不错,每次学习都有新发现,慢慢积累。

  • * {
        margin: 0;
        font: 13px tahoma, verdana, sans-serif;
        padding: 0;
    }
    ol {
        width: 400px;
        margin: 50px;
    }
    li {
        clear: both;
        list-style-type: none;
        margin: 0 0 10px;
    }
    li:nth-last-child(1) {
        text-align: center;
    }
    label {
        display: block;
        float: left;
        margin: 0 10px 0 0;
        padding: 5px;
        text-align: right;
        width: 100px;
    }
    input {
        border-radius: 5px;
        padding: 5px 5px 5px 30px;
        width: 155px;
    }
    input:focus {
        outline: none;
    }
  • input:invalid:required {
        background-image: url('nor.png');
        box-shadow: 0 0 5px #f0bb18;
        border: 2px solid #f0bb18;
    }
  • input:focus:invalid {
        background-image: url('warn.png');
        box-shadow: 0 0 5px #b01212;
        border: 2px solid #b01212;
    }
  • input:valid {
        background-image: url('suc.png');
        border: 2px solid #7ab526;
    }
  • input[type="submit"] {
        background: #7ab526;
        border: none;
        box-shadow: 0 0 5px #7ab526;
        color: #fff;
        cursor: pointer;
        font-weight: bold;
        padding: 7px;
        width: 150px;
    }
  • ...
  • ...
  • tel = document.querySelector('#tel');
    console.log( tel.validity )
  • function check( el ) {
        var validity = el.validity;
        if ( validity.valueMissing ) {
            el.setCustomValidity('该字段为必填内容');
        } else if ( validity.patternMismatch ) {
            el.setCustomValidity('输入内容不符合格式');
        } else {
            el.setCustomValidity('输入有误');
        }
    }
  • console.log( el.validationMessage )
    // "请填写此字段。"

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.8万人学习

HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.8万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 9.7万人学习

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

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