网站中的用户登录、注册、用户调查等都是通过页面中的表单提交到网站服务器的。假设要实现让用户设置个人信息的一个表单。

该表格为两栏布局,第一栏中的文本左对齐,第二栏的表单控件右对齐,构成了最容易实现的表单布局设计。<label>用于为输入控件定义文本标签(label)——即显示在输入控件旁边的说明性文字。要为<label>指定关联的输入控件,只需把相关控件的id赋值给<label>标签的for属性。for属性的作用是:不仅把<label>元素上的触发事件指向了for属性指代的表单元素,也从语义上绑定了label元素和此表单元素。

 <form action="/service/user" method="post">
<label for="userName">User Name:</label>
<input type="text" id="userName" name="userName" />
<label for="password">Password:</label>
<input type="text" id="password"  name="password" />
<input type="checkbox" id="staySigned" name="staySigned" />
<label for="staySigned">Stay signed in</label>
<input type="submit" value="Login" />
</form>

此外,还可以使用<fieldset>元素给表单控件分组。和<fieldset>相关的一个元素是<legend>元素,<legend>元素用来定义控件组的标题。表单使用<label>标签、<fieldset>标签和<legend>标签后的代码如下:

 <form action="/service/user" method="post">
<fieldset>
<legend>Sign in to begin.</legend>
<label for="userName">User Name:</label>
<input type="text" id="userName" name="userName" />
<label for="password">Password:</label>
<input type="text" id="password"  name="password" />
<input type="checkbox" id="staySigned" name="staySigned" />
<label for="staySigned">Stay signed in</label>
</fieldset>
<input type="submit" value="Login" />
</form>

下面介绍一下提高表单易用性的手段:

(1)使用<label>标签,并设置<label>标签的for属性.

  <label>元素上的鼠标事件会转移到其关联的输入控件上,这一特性为鼠标用户增强了可用性,尤其是对单选框和复选框等使用鼠标操作的输入控件来说。

 

 <input type="checkbox" id="keepSigned" name="keepSigned" value="" />
<label for="keepSigned">Keep Me Signed In For 30 Days.</label>
// 省略for属性,把输入控件作为label的子元素
<label><input type="checkbox" id="keepSigned" name="keepSigned" value="" /> Keep Me Signed In For 30 Days.</label>

(2)给输入控件设置合适的水印提示

  推荐使用HTML5中引入的placeholder属性.

 <input type="text" name="email" id="email" placeholder="user@lifeway.com" />

(3)如有必要,给输入控件设置tab顺序

  如果实际的顺序并不是期望的顺序,则需要给输入控件设置tabindex属性来设置输入控件的切换顺序,示例代码如下:

  

 <input type="text" tabindex="2" />

(4)使用HTML5中引入的表单控件

结合以上所述的易用性表单设计原则,给相关表单控件设置placeholder属性、tabindex属性和require属性,并更改用户名输入框的类型为email。最终的HTML代码为:

 <form action="/service/user" method="post">
<fieldset>
<legend>Sign in to begin.</legend>
<label for="userName">User Name:</label>
<input type="email" id="userName" name="userName" placeholder=user@lifeway.com" tabindex="1" required="true" />
<label for="password">Password:</label>
<input type="text" id="password"  name="password" placeholder="
password" tabindex="2" required="true" />
<label for="staySigned">
<input type="checkbox" id="staySigned" name="staySigned" tabindex=
"3" />
Stay signed in
</label>
</fieldset>
<input type="submit" value="Login" tabindex="4" />
</form>

为了检验HTML是否符合语义,尝试去掉作用于表单上的CSS样式,此时在Chrome浏览器中显示的效果如图

因为设置了用户名和密码输入框的require属性,即输入不允许为空,所以当单击“Login”按钮时,会出现默认的错误提示框。

在Firefox浏览器中显示的效果和Chrome浏览器中显示的效果类似,只是外观稍有不同

WEB学习笔记12-高可读性的HTML之如何正确设计表单的更多相关文章

  1. [原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. jQuery学习笔记(一)——基础选择器、过滤选择器、表单选择器

    $()就是jQuery中的函数,它的功能是获得()中指定的标签元素.如演示样例中$("p")会得到一组P标签元素,当中"p"表示CSS中的标签选择器.$()中的 ...

  3. Javaweb学习笔记——(十四)—————— 服务器端验证注册登入表单项目

    项目:https://download.csdn.net/download/qq_40223688/10463436 项目 功能: *注册 *登录--------------------------- ...

  4. 学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向

    数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map ...

  5. Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点

    Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...

  6. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Java Web 学习笔记 1

    Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...

  8. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

  9. matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

    一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...

随机推荐

  1. wcf在post请求时,关于string类型参数传入中文的处理

    一.方法默认只有一个参数 (1)BodyStyle = WebMessageBodyStyle.Bare [OperationContract][WebInvoke(Method = "PO ...

  2. java 形式参数和实际参数的区别

    1.形参不能离开方法.形参只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见.而实参可以再程序的任何地方都使用.

  3. javascript高级程序设计第3版——第3章 基本概念

  4. Jenkins结合shell脚本实现(gitLab/gitHub)前端项目自动打包部署服务器

    原始发布部署: 石器时代的我们,先是本地打包好项目,在去服务器上把原来的文件删了,然后回到本地copy到服务器: 这操看起来简单,实际部署的人就知道多烦了,假如来几个项目都要重新发布:那就爽了: 今天 ...

  5. react中的传参方式

    react是一个SPA模式,即组件嵌套租,在一个单页面的应用中组件间的数值传递是必不可少的,主要的传参方式大致有一下几种: 1,在挂载的地方给组件传参 ReactDOM.rander(<a na ...

  6. 运用python发邮件

    1.网上有许多发送邮件的代码,运行了几次都不成功(使用python3),转用Python2之后,发送成功 2.代码样例: 参考教程:http://www.runoob.com/python/pytho ...

  7. Linux c获取任意路径的硬盘使用情况

    没有什么好说的,其实就是获取硬盘的statfs信息结构 代码如下: #include <stdio.h> #include <stdlib.h> #include <sy ...

  8. 页面显示LCD液晶字体或者其他特殊字体

    如果web项目中需要用到LCD液晶字体显示数值(如下图所示)该怎么办? 在这就需要用到@font-face(具体看一下语法) /* 定义 */ @font-face { font-family: 'M ...

  9. C# foreach 值类型及引用类型迭代变量改变的方式

    C#中foreach不能改变迭代变量的值 然而此种说法只适用与值类型,更改值类型时会改变在栈上的内存分布 引用类型由于是引用地址的变更,不影响内存分布,所以能够在foreach中更改 至于引用类型中的 ...

  10. C++对象模型复习

    本文写于2017-02-24,从老账号迁移到本账号,原文地址:https://i.cnblogs.com/EditPosts.aspx?postid=6440685 一:对象模型 C++面向对象的实现 ...