客户端验证是网页客户端程序最经常使用的功能之一,咱们以前使用了各类各样的js库来进行表单的验证。HTML5其实早已为咱们提供了表单验证的功能。至于为啥没有流行起来估计是兼容性的问题还有就是样式太丑陋了吧。css
下面咱们未来一步一步创造一个HTML5和CSS3的表单验证,只使用HTML和CSS。html
完成后的以下:
html5
首先咱们须要以下几个字段:css3
在用户输入一些信息后,咱们须要校验用户的信息是否正确,避免错误数据和欺骗性的数据传递到服务器。git
在HTML5的新规范中,input输入框提供了多种输入类型好比:tel、email、number、range、color等,这些类型在桌面客户端中通常体现不是很明显,若是在移动端键盘上面体现的会更明显。好比number在移动端键盘会自动切换为纯数字,email键盘会自动切换带有@的键盘。github
咱们还须要肯定表单最终的样式风格,通常这个工做来至于设计师。这里我在dribbble上面找了一个表单的样式做为此次的demo风格。
web
使用标准的HTML5申明代码服务器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>HTML5 Form Validation</title> </head> <body> </body> </html>
建立一个基本的form表单元素,这里咱们不提交任何数据只是一个演示,因此form不会进行提交。布局
<form action="" onsubmit="return false"> </form>
表单元素一共有以下元素组成:flex
ul和li元素用于排版布局,用于分割表单元素和布局。label用于表单的字段提示文字。input用于用户输入数据。span用于使用emoji提示用户字段是否填写正确。
<ul> <li> <label for="name">FULL NAME</label> <input type="text" id="name" name=" name" placeholder="请输入姓名"/> <span class="icon-name"></span> </li> </ul>
form表单html代码完成代码以下:
See the Pen html5 validation pure form by jiangzhu (@tudou) on CodePen.
完成form元素的编写,紧着着完善一下它的样式,让它看起来更美一些。
body { display: flex; } form { padding: 0 10%; width: 100%; margin: auto; } ul { list-style-type: none; padding: 0; margin: 0; } li { position: relative; margin-bottom: 20px; } label { color: #333; display: block; font-size: 12px; } input { width: 100%; outline: none; border: none; padding: 0.5em 0; font-size: 14px; color: black; position: relative; border-bottom: 1px solid #d4d4d4; } input:-moz-placeholder { color: #d4d4d4; } input::-webkit-input-placeholder { color: #d4d4d4; } li span { display: block; position: absolute; right: 0; top: 10px; font-size: 28px; } button { cursor: pointer; border: 1px solid #999; border-radius: 4px; padding: 10px 20px; margin-top: 10px; background: #fff; }
css代码完成代码以下:
See the Pen html5 validation pure form base style by jiangzhu (@tudou) on CodePen.
在每一个form表单结构中,咱们已经增长了一个span标签,好比name字段中咱们增长了一个<span class="icon-name"></span>
标签。如今给他加上样式用于显示校验字段的状态。
li span { display: block; position: absolute; right: 0; top: 10px; font-size: 28px; } /*默认的是一个微笑的表情*/ li span::before { content: '😐'; } /*咱们也可根据类名定义一些其余的表情*/ .icon-name::before { content: '😐'; } .icon-phone::before { content: '📞'; } .icon-email::before { content: '📨'; } .icon-website::before { content: '🌐'; }
增长emoji提示样式以下
See the Pen html5 validation pure form base style and emoji by jiangzhu (@tudou) on CodePen.
:valid伪类会匹配知足校验规则的表单元素,:invalid伪类会匹配不知足规则的表单元素。
根据这两个规则咱们能够修改知足和不知足规则对应的emoji表情。
/*不知足规则增样式*/ input:focus:invalid { border-bottom: 1px solid red; } input:focus:invalid + span::before { content: '😟'; } /*知足规则样式*/ input:valid, input:focus:valid { border-bottom: 1px solid #11b51d; } input:focus:valid + span::before, input:valid + span::before { content: '😀'; }
完成代码以下
See the Pen html5 validation by jiangzhu (@tudou) on CodePen.
总结:
HTML5提供了css钩子为表单元素,也提供了一些js的接口跟进一步详细的控制表单的校验和错误提示。若是须要更个性化的校验和提示方式可使用js接口。
参考链接: