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

该表格为两栏布局,第一栏中的文本左对齐,第二栏的表单控件右对齐,构成了最容易实现的表单布局设计。<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. hbase-0.92.1集群部署

    环境 主机名 IP地址 角色 安装目录 sht-sgmhadoopnn-01 172.16.101.55 NameNode.SecondaryNameNode. JobTracker.HMaster ...

  2. oracle中delete、truncate、drop的区别 (转载)

    一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表 ...

  3. 此博客不再更新和分享UiPath文章

    由于版权问题,将不再分享我的笔记 警告:任何人不得拷贝及挪用我的uipath笔记作为商业用途,一旦发现,立刻发律师函,请知悉及慎重!!!!

  4. lumion的物体系统5.30

    1.“自然"点击这棵树.可以打开自然库.不同的植物分类有很多页数. 选择一棵树,自动返回页面单击鼠标左键可以种植这个树.成排种树:点击”人群安置“点击我们想安置的起点.再点击终点.用鼠标右键 ...

  5. View事件体系

    View事件体系 文章目录 View事件体系 一.Android View基础知识 1.1 View简介 1.2 View分类 1.3 View的结构 1.4 View的坐标 1.4.1 Androi ...

  6. AngelToken钱包——值得投资与存币的钱包

    Angeltoken有多好? Angeltoken到底值不值得我们投资? 简而言之 Angeltoken结合了:钱包+机器人,钱包+币币交易,钱包+宠物,钱包+结算代币等等. 它颠覆传统的运营和赚钱模 ...

  7. aop表达式

    任意公共方法的执行: execution(public * *(..)) 任何一个以“set”开始的方法的执行: execution(* set*(..)) AccountService 接口的任意方 ...

  8. LVS初始使用步骤

    LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org. 现在L ...

  9. Unity协程实现伪加载页面

    先上效果图预览. ============================开始写实现方法================================ 1.我用的是UGUI,先在空场景中新建Slid ...

  10. linux修改主机名+免密认证+关闭防火墙

    在很多软件安装的时候都有这些需求,因此在这里一起讲一下 修改主机名 简单的使用 hostnamectl 命令就好了 hostnamectl set-hostname NAME 免密认证 准备工作,修改 ...