对于比较复杂的表单,要填写的内容相对较多,采用水平布局显然不合适。因此,垂直布局的表单更加常用。垂直对齐的表单中,标签和输入框可以使用三种对齐方式,包括顶对齐、左对齐和右对齐。

顶对齐可以缩短用户填写表单的时间,由于标签和输入框非常靠近,处理起来毫不费力,用户只需顺着表单向下移动,就可完成整个表单。如图 7‑22 所示:

图7-22 顶对齐的表单

但是,顶对齐的标签会占用额外的垂直空间。因此,如果可供使用的垂直屏幕空间较小,应当谨慎使用顶对齐标签。另外,顶对齐的表单还应当采用合适的垂直距离,输入框之间的垂直距离太小或太大都会影响填写。一般而言,最好使用输入框高度的50%到70%,作为相邻输入框的间距。

如果人们不熟悉表单要收集的数据,或者在逻辑上分组有困难,左对齐的标签浏览起来可能更容易。用户只需要上下看看左侧的标签就可以了,而不会被输入框打断思路。如图 7‑23 所示:

图7-23 左对齐的表单

左对齐可以占用较少的垂直屏幕空间,但有些长标签会增加标签和输入框之间的距离,用户必须左右来回跳转目光,来找到标签对应的输入框,因而影响填写表单的时间。

于是产生了一种替代的方案,右对齐标签的布局,它使得标签和输入框之间的联系更紧密,有助于快速填写表单。如图 7‑24 所示:

图7-24 右对齐的表单

然而,右对齐会导致左边参差不齐,会降低浏览表单的效率。对于西方国家,人们习惯于从左至右的书写,右对齐会给这些用户造成阅读障碍。

由此可知,三种对齐方式各有利弊,在实际应用中,到底采用哪种对齐方式,则由应用场景和具体的目标而定,不能一概而论。根据中文的语言习惯,以及大多数网站的情况,右对齐的表单比较常用。

接下来,通过一个实例,来简单介绍一下垂直布局表单的实现方法。众所周知,表格本身是一种网格结构,其最大特点是同一列都具有相同的宽度,因此,表格本身是一种很好的布局工具。

由于表单内容相对简单,每行一般只包含一项内容,都是在一个标签后,紧跟一项待填写的表单元素。因此,表单的就相当于 n 行两列的布局,一列是标签,一列是待填写的表单元素。

如果把表单的每一行放在一个块级容器中(如,div、p等),并让每一列都具有固定宽度,则表单的内容就具有表格的特点,其布局也就非常简单。

在表单元素中,label 元素默认生成一个行内框,其他元素则生成一个原子行内级框。因此,如果把 label 元素的 display 属性设置为 inline-block,它也会生成一个原子行内级框。这样的话,就可以为表单上的所有元素设置固定宽度,实现网格布局。

当然,对于复杂的表单,一行内可能有三列、四列,甚至更多列。无论有多复杂,都可以沿用这种思想,让每一列生成一个原子行内级框,来采用网格布局。如,以下表单:

  1. <form action="" method="post">
  2.     <p><label>姓名: </label><input type="text" name="name" /></p>
  3.     <p><label>E-Mail: </label><input type="email" name="email" /></p>
  4.     <p><label>所在城市: </label>
  5.        <select name="city">
  6.            <option value="1">北京</option>
  7.            <option value="2">上海</option>
  8.        </select>
  9.     </p>
  10.     <p><label>性别: </label>
  11.        <input type="radio" name="sex" value="male" checked />男
  12.        <input type="radio" name="sex" value="female" />女
  13.     </p>
  14.     <p><label>个人爱好: </label>
  15.        <input type="checkbox" name="music" value="music" checked />音乐
  16.        <input type="checkbox" name="swimming" value="swimming" />游泳
  17.        <input type="checkbox" name="football" value="football" checked />足球
  18.        <input type="checkbox" name="skating" value="skating" />轮滑
  19.            </p>
  20.     <p><label>自我介绍: </label><textarea name="introduce" ></textarea></p>
  21. </form>

在没有进行布局设计之前,运行结果如图 7‑25 所示:

图7-25 没有应用样式的表单

事实上,网格布局的核心,就是行和列的布局,行布局负责元素在行内的水平摆放整齐,列布局负责相同的列能够正确对齐。

首先,进行行格式化。为了防止行之间过于拥挤,可以为 p 元素添加 10px 的上下外边距。由于相邻的 p 元素会发生外边距合并,则所有行之间的距离都将是 10px。

  1. form p {
  2.    margin: 10px 0;
  3. }

在一行内,如果 label 和 input 元素生成的框垂直居中对齐,会比较美观。这样的话,无论行有多高,这些元素会始终保持居中对齐。

  1. label, input {
  2.    vertical-align: middle;
  3. }

其次,进行列格式化。列格式化的目的,是实现网格中列的对齐。如果相同的列都等宽的话,网格自然就会对齐。因此,只需把 label 元素的 display 属性设置为 inline-block,再为 label 和 input 元素设置合适的宽度,即可实现列的对齐。

  1. label {
  2.    width: 80px;
  3.    display: inline-block;
  4. }
  5. input {
  6.    width: 240px;
  7. }

当为 input 元素设置宽度 240px 后,预览就会发现,所有的input 元素(如radio、checkbox、提交按钮等)的宽度都将变成 240px。

解决这个问题的一个办法是,使用属性选择器寻找特定类型的表单元素,专门设置宽度。如,专门设置文本输入框的宽度:

  1. input[type="text"] {
  2.    width: 240px;
  3. }

或者如果希望大多数的 input 元素的宽度都是 240px,只有 radio 和 checkbox 使用其它宽度,则可以将这些元素的宽度设置为 auto,来覆盖前面对 input 元素的设置:

  1. input[type="radio"],
  2. input[type="checkbox"] {
  3.    width: auto;
  4. }

遗憾的是,属性选择器在IE6及更低版本中是无效的。因此,在属性选择器得到广泛支持之前,区分输入元素最好的方法,是给他们分配一个类。如,为单选按钮分配类名 radio,为复现框分配类名 checkbox:

  1. .radio, .checkbox {
  2.    width: auto;
  3. }

再为 label元素设置  text-align: right 来实现标签的右对齐,并通过右侧的外边距,使 label 和 input 之间保持适当的距离,防止标签和输入框过于拥挤。

  1. label {
  2.    text-align: right;
  3.    margin-right: 10px;
  4. }

好了,表单元素现在已经按照网格排列整齐。然后,再按照前面介绍的方法,对每个表单元素的细节进行处理,来实现需要的表单效果。运行结果如图 7‑26 所示:

图7-26 垂直布局的表单

从上图可以看出,本节所实现的表单非常朴素。这是因为本节的重点,是介绍表单的布局方法,而不是表单的美工方法。掌握基本布局方法之后,设计师可以充分发挥想象,通过更多的美工元素,来实现美轮美奂、精彩绝伦的表单。

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

垂直布局的HTML表单相关推荐

  1. 水平布局的HTML表单

    对于非常简短的表单,用户要填写的内容比较少,表单本身也不会占用太多空间,比如网站顶端的快捷登录表单,它只包含用户名.密码和登录按钮: <form action="" meth ...

  2. Qt布局管理器之表单布局(QFormLayout)

    QFormLayout顾名思义,主要用来做表单的输入及显示.和前面讲到的QBoxLayout.QGridLayout类似,QFormLayout可以插入widget.layout,直接用QGridLa ...

  3. Bootstrap表单的默认布局

    Bootstrap 自带了基本的表单样式,不需要添加任何辅助类,即可使用表单的默认布局.默认布局中,表单元素采用垂直布局,标签和输入框使用顶对齐方式.如: <form>   <fie ...

  4. JEECG 3.7.8 新版表单校验提示风格使用升级方法(validform 新风格漂亮,布局简单)

    JEECG 表单校验新提示风格使用讲解&升级方法 (validform 新风格漂亮,布局简单) JEECG 表单校验采用的是validform,默认的校验提示需要占用页面布局,提示效果较传统. ...

  5. JavaFX官方教程(五)之在JavaFX中创建表单

    翻译自  在JavaFX中创建表单 在开发应用程序时,创建表单是一项常见活动.本教程将向您介绍屏幕布局的基础知识,如何将控件添加到布局窗格以及如何创建输入事件. 在本教程中,您将使用JavaFX构建如 ...

  6. Bootstrap3 表单

    表单 Bootstrap 为表单和表单控件提供了一些全局样式,不需要添加任何辅助类,即可让表单使用默认布局.默认布局中,表单元素采用垂直布局,标签和输入框采用顶对齐方式. Bootstrap 中创建表 ...

  7. React 表单源码阅读笔记

    1 概念 1.1 什么是表单 实际上广义上的表单并不是特别好界定,维基上讲表单是一系列带有空格的文档,用于输写或选择.更具体的,在网页中表单主要负责数据采集的功能,我们下文中所提到的表单都指后者.如下 ...

  8. 网页注册表单设计原则

    如果你想最大化你的服务所带来的效益,你就必须最大化你网站表单的成功率.仅仅简单的让用户在你网站上注册是不够的,除非你有能够让访问你网站的人一看就映像深刻的点子.为了让服务达到最大化的体现,我们设计师需 ...

  9. android 漂亮的表单界面,面向ArcGIS for Android的表单界面生成器的设计与实现

    孙俊英 陈忠超 摘 要:基于ArcGIS for Android的采集系统作为当下主要的野外采样方式之一,被广泛的应用于各类场景,针对不同采集内容,采集系统的主要差异在于采样的属性数据所有不同,使用传 ...

最新文章

  1. non-local神经网络:通过非局部操作解决深度神经网络核心问题
  2. css3选项卡样式,css3选项卡标题样式设计1
  3. angular指令:tm.tags添加/删除标签
  4. 微信小程序——小程序的能力
  5. C++中的虚函数与纯虚函数
  6. java reduce.mdn_reduce高级用法
  7. 联想云:借助云计算助力中国企业数字化转型
  8. 值得收藏的45个Python优质资源
  9. java 框架架构图_java框架之Spring 核心框架体系结构
  10. Scala学习笔记06:自定义控制结构
  11. linux下判断网络是否连接
  12. NLP之路-继续书本上的实验
  13. 为MongoDB添加身份验证
  14. 易宝典——玩转O365中的EXO服务 之四十二 导出就地电子数据展示搜索结果
  15. 【bzoj4974】字符串大师 逆模拟KMP
  16. Windows XP pro with sp2(x64)VOL版(英文原版)光盘镜像 + 简繁中文语言包 + 有效安装密钥 一些网友都有这样的困惑,Windows XP sp3在安装
  17. 每天CookBook之Python-047
  18. OAuth2.0认证流程原理
  19. 结构专业规范大全_建筑业最新规范大全!拿着手机看规范、查标准,超级方便...
  20. iphone图片编辑画笔_苹果手机截屏后怎么编辑,这么实用你可一定要知道

热门文章

  1. leetCode 110. Balanced Binary Tree 平衡二叉树
  2. linux ubuntu 12.04 下默认是安装了openjdk的
  3. javac编译java文件之后 java运行找不到类的处理
  4. iphone编译警告
  5. MS SQL数据库备份和恢复存储过程
  6. 剑指Offer面试题:30.第一个只出现一次的字符
  7. elfutils cc1: all warnings being treated as errors
  8. Swift实现OC中的单例模式
  9. 数通手稿留档——Multicast
  10. ScrollView 里面嵌套 listview 使得listview只显示一行问题解决