复选框单选框与文字对齐问题的研究与解决方法

复选框单选框与文字对齐问题的研究与解决方法

前言

目前中文网站上面的文字,就我的个人感觉而言,绝大多数网站的主流文字大小为 12px,因为在目前高分辨率显示器屏幕下,11px 的汉字,其像素点开始不规整,文字不如 12px 来的显示良好。12px 大小的文字就是主流也是底线。然而 12px 的文字与单选框和复选框是不对齐的。例如下面这张雅虎中国首页在火狐浏览器下的截图:

雅虎中国首页单选框复选框与文字不对齐

雅虎中国首页单选框复选框与文字不对齐


这里,不是说,雅虎中国的团队不够认真,而因为这 12px 大小文字与单选框和复选框对齐的问题不是好解决的。考虑到兼容性,控件本身的特殊性以及代码成本的控制等,使得这个问题不是简单就能解决的。
这不是我第一次研究单选框复选框对齐的问题了,因为平时对这个问题注意的比较多,也经常做些测试,对这个问题还是有一定的了解,也总结了不少自己的解决方法。今天我就写下来,供交流与参考。

一、问题产生的条件
对于 14 像素大小的字体是没有本篇所要探讨的单(复)选框与文字对齐的问题的。(见下图)

14像素大小文字与单复选框无对齐的问题

14 像素大小文字与单复选框无对齐的问题


但是,对于 12 像素大小的文字,则就存在对齐问题了,尤其在 Firefox 火狐浏览器以及 chrome 谷歌浏览器下。(见下图)
12像素文字相对于单复选框位置偏下不对齐

12 像素文字相对于单复选框位置偏下不对齐


这就是本文所要研究与解决的问题。这种不对齐的根本原因我不清楚,但我可以肯定的是单复选框与文字默认以 vertical-align:baseline 的方式对齐的。

二、解决方案
下面我将提供五种解决方案,有三个方案没有使用任何 hack,且 IE6,IE7,Firefox,chrome 浏览器下表现都很好的,有一种方案使用了一个 IE hack,但成本较低,各个浏览器表现良好。还有一种方案,代码成本很低,但在 chrome 浏览器下文字稍微偏上,使用 input 类型选择器,或 chrome hack 可以解决这个问题,但是对于单复选框这类控件,代码一多反而不划算,权衡之下,不针对 chrome 浏览器单独处理。
这些方案都是经过平时积累,反复试验得出的结论,其兼容性值得信赖。要使用的话就给单复选框命名一个 class,该 class 样式为下面方案提供的 css 样式即可。

1. 以 vertical-align:text-bottom 为基础的
css 代码如下:vertical-align:text-bottom; margin-bottom:2px; *margin-bottom:-2px;
css 代码如下:vertical-align:text-bottom; margin-bottom:2px; margin-bottom:-2px\9;
结果如下图(以 IE6 浏览器和 Firefox 浏览器示例):

IE6浏览器下的样式表现

IE6 浏览器下的样式表现


Firefox浏览器下的样式表现

Firefox 浏览器下的样式表现

2. 以 vertical-align:text-top 为基础的
css 代码如下:height:13px; vertical-align:text-top; margin-top:0;
结果如下图(以 IE7 浏览器和 chrome 浏览器截图示例):

IE7下的样式表现

IE7 下的样式表现


chrome下的样式表现

chrome 下的样式表现

3. 以 vertical-align:bottom 为基础的
css 代码如下:height:15px; vertical-align:bottom; margin-bottom:3px; margin-top:-1px;
结果如下图(以 IE6 和 Firefox 浏览器截图做示例):

IE6下的表现

IE6 下的表现


Firefox下的表现

Firefox 下的表现

4. 以 vertical-align:top 为基础的
css 代码如下:height:14px; vertical-align:top;
结果如下图(chrome 下文字略微偏上,其他浏览器下很完美,以 IE7 和 chrome 浏览器示例):

IE7下的表现

IE7 下的表现


chrome下的表现-文字偏上

chrome 下的表现 - 文字偏上

5. 以 vertical-align:middle 为基础的
css 代码如下:vertical-align:middle; margin-top:-2px; margin-bottom:1px;
结果如下截图(以 IE6 和 Firefox 示例):

IE6下的样式表现

IE6 下的样式表现


Firefox浏览器下的表现

Firefox 浏览器下的表现

最后的说明
* 未显示在 opera 浏览器下测试的结果,原因一是 opera 市场份额奇怪的小,即使不管它也影响不大;二是减轻自己的截图,对比处理的工作量。这里就直接用文字表述在 opera 浏览器下的表现吧。opera 是个怪胎,应该来说,它对标准的支持应该是很好的,但是 14 像素的文字和单选框复选框却是不对齐的,当然,12 像素更不用说了。但是,在方案 3 和方案 5 下的表现却是意外的好,所以方案 3 和方案 5 是不错的方案。
*IE8 浏览器下未测试,不是不想测,而是现在手头上就一台电脑,IE8 由于系统原因,测不了,抱歉。
* 以上方案不一定是最优的方法,我没有加入 padding 进行测试,还有其他一些属性,只要有时间,将各类组合一个一个的试验,可能会找到另外的方法。
*Firefox 浏览器和 chrome 浏览器下的单选框和复选框默认是由一个 margin 值的。其两者的值大小近乎一致,拿 chrome 浏览器举例。在 chrome 谷歌浏览器下,radio 单选框的默认 margin 值是:margin:3px 3px 0 5px;checkbox 复选框的 margin 值为 margin:3px 3px 3px 4px; 而 IE 浏览器下似乎没有 margin 值,但是对 margin 敏感。这是不用 hack 解决对齐问题的难点之一。
* 最后,说句结论性的话,方案 3 和方案 5 从兼容性,代码的利用率,css 的消耗等来讲都是我非常推荐的两种方法。建议您试试!

作者补充于 11 月 3 号凌晨 2:40,曾在人人网的 css 代码中看到使用 vertialc-align:-3px 解决此问题,我试过,虽然表现不能用完美形容,但确实缓解了对齐的问题,是个性价比非常高的方法。我是建议您试试的。

尾声,献上本文的终极 demo 实例页面,狠狠地点击这里吧。

原创文章,转载请注明来自 张鑫旭 - 鑫空间 - 鑫生活 [http://www.zhangxinxu.com]



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery攻略目录 图书信息 内容简介 作者简介 图书目录 编辑本段图书信息    书 名: jQuery攻略   作 者:哈瓦尼(B.M.Harwani)   出版社: 人民邮电出版社   出版时间: 2010年10月1日   ISBN: 9787115238306   开本: 16开   定价: 59.00元 编辑本段内容简介   《jQuery攻略》对使用jQuery过程中遇到的各类问题给出了解决方案,比如,如何使用jQuery框架、CSS选择器、DOM、事件处理、动画效果,以及如何开发Ajax应用程序、如何使用jQuery工具函数、如何使用插件扩展jQuery。   《jQuery攻略》非常适合想利用最少的代码创建交互性网站的开发人员学习和参考,也适合懂少量HTML知识又想创建动态网站的初学者学习。 编辑本段作者简介   作者:(印度)哈瓦尼(B.M.Harwani) 译者:侯伯薇 陈宁   B.M.Harwani,印度阿杰梅尔的微芯计算机教育中心(MCE)总经理。他毕业于Pane大学的计算机工程系获得学士学位,拥有印度政府机构DOEACC颁发的C级证书(计算机硕士文凭)。在教学领域工作的15年多来,他开发出了富有艺术性的教学方法,以人人都能懂的方式去解释哪怕最复杂的课题。 编辑本段图书目录   第1章 jQuery基础知识 1   1.1 jQuery的安装 1   1.2 选择DOM节点 2   1.3 延迟JavaScript的执行 3   1.4 把CSS应用到元素上 3   1.5 选择一系列非标准的HTML元素 4   1.6 计数DOM节点和显示其文本 5   1.7 获得一个元素的HTML代码 7   1.8 改变DOM节点的内容 8   1.9 快速创建DOM节点 9   1.10 为不同HTML元素分配相同类名并对它们应用样式 12   1.11 小结 13   第2章 数组和字符串 14   2.1 利用数组在列表中显示名字 14   2.2 操作数组元素 17   2.3 筛选数组元素,只显示所需的数据 19   2.4 字符串数组和数值数组的排序 22   2.5 拆分数组 24   2.6 合并数组 26   2.7 把数值数组转换成字符串,并查找其子字符串 27   2.8 创建对象数组 28   2.9 为对象数组排序 30   2.10 小结 32   第3章 事件处理 33   3.1 查找被点击的按钮 34   3.2 自动触发事件 37   3.3 点击之后禁用按钮 39   3.4 处理鼠标事件 40   3.5 查明哪个鼠标键被按下 43   3.6 查找鼠标按下时的屏幕坐标 44   3.7 动态地突出显示文本 45   3.8 随着鼠标移动使图像明亮或模糊 47   3.9 查明元素何时获得和失去焦点 49   3.10 在按钮上应用悬停效果 50   3.11 切换应用一个CSS类 52   3.12 创建基于图像的变换 54   3.13 为响应事件而添加和删除文本 57   3.14 应用样式作为对事件的响应 58   3.15 显示文字气球 60   3.16 创建“返回顶部”链接 63   3.17 提供“更多……”链接 64   3.18 以动画效果显示文本 67   3.19 以滑动效果来替换文本 70   3.20 使图像滚动 71   3.21 确定被按下的键 75   3.22 防止事件冒泡 77   3.23 链接多个活动 80   3.24 小结 81   第4章 表单验证 82   4.1 确认必需字段不留空 82   4.2 验证数字字段 84   4.3 验证电话号码 88   4.4 验证用户ID 90   4.5 验证日期 92   4.6 验证电子邮件地址 94   4.7 检查复选框是否被选中 96   4.8 检查单选按钮是否被选中 99   4.9 检查select元素中的选项是否被选中 101   4.10 把样式应用到选项和表格按钮 104   4.11 一步选择或取消所有的复选框 107   4.12 验证两个字段 110   4.13 验证密码和确认密码字段是否匹配 113   4.14 禁用某些字段 116   4.15 验证整个表单 118   4.16 表单数据序列化 128   4.17 小结 132   第5章 页面导航 133   5.1 编写面包屑菜单 133   5.2 把悬停效果添加到菜单项 135   5.3 创建上下文菜单 137   5.4 创建具有快捷键的导航菜单 140   5.5 创建一个右键单击上下文菜单 144   5.6 创建具有独立菜单项的两个菜单 147   5.7 建立包含子菜单项的两个菜单 149   5.8 创建折叠式菜单 153   5.9 创建动态可视化菜单 156   5.10 小结 161   第6章 视觉特效 162   6.1 水平和垂直显示图片 162   6.2 创建水平滑动的图片浏览器 165   6.3 显示一幅图片,点击时向左滚动并消失 166   6.4 创建图片,使它向左滚动消失,然后从右侧重新出现 169   6.5 使图片在浏览器窗口中间滚动 171   6.6 在鼠标悬停时依次显示图片 172   6.7 垂直滚动图片 175   6.8 水平滚动图片 179   6.9 创建新闻滚动浏览器 183   6.10 在鼠标悬停时显示放大的图片 188   6.11 按页显示图片 193   6.12 在任意两个方向上切换图片 196   6.13 编写钟摆式滚动器 199   6.14 使用数组来滚动图片 202   6.15 小结 205   第7章 处理表格 206   7.1 在鼠标悬停时突出显示行 206   7.2 交替突出显示相邻列 207   7.3 过滤行 211   7.4 隐藏选定列 213   7.5 分页显示表格 215   7.6 展开和折叠列表项 218   7.7 展开和折叠行 221   7.8 对列表项目排序 226   7.9 对表格排序 227   7.10 过滤表格中的行 233   7.11 小结 235   第8章 Ajax 237   8.1 显示欢迎信息 237   8.2 执行认证 241   8.3 验证用户名 243   8.4 验证邮件地址 246   8.5 使用自动完成 252   8.6 导入HTML 256   8.7 取得JSON数据 259   8.8 取得XML数据 261   8.9 分页显示表格 265   8.10 小结 268   第9章 使用插件 269   9.1 对表格的任一列进行过滤,并且可以设置每页的行数 269   9.2 为图片添加注解 271   9.3 拖放表格中的行 273   9.4 取得、序列化并清理表单控件 275   9.5 通过Ajax提交表单 277   9.6 找到元素的准确位置和大小 281   9.7 以传送带的方式显示图片 284   9.8 使用datepicker选择日期 286   9.9 对表格排序 288   9.10 小结 289   第10章 使用CSS 290   10.1 区分HTML元素 291   10.2 向内嵌在一个元素中的另一个元素应用样式 292   10.3 缩进段落 293   10.4 将段落的首字母设为大写 294   10.5 去除标题和段落之间的间隔 295   10.6 向标题文字应用样式 297   10.7 缩进多个段落的第一行 297   10.8 创建带有悬挂缩进的段落 298   10.9 创建带有边框的提取引用 299   10.10 创建带有图片的提取引用 301   10.11 向列表项应用列表属性 302   10.12 只对选定的列表项应用样式 303   10.13 在列表项之间放置分隔线 306   10.14 向列表应用图片标记 307   10.15 创建水平显示的列表 308   10.16 在超链接上应用样式 309   10.17 为HTML元素赋予不同的尺寸 311   10.18 放置HTML元素 313   10.19 创建多栏的布局 314   10.20 使文字围绕图片显示 316   10.21 在图片背后放置阴影 317   10.22 当鼠标移过链接的时候改变鼠标样式 319   10.23 在指定的区域中显示长文字 320   10.24 创建圆角的栏 322   10.25 应用文字装饰 323   10.26 缩放图片 324   10.27 设置背景图片 326   10.28 使背景图片在浏览器中央显示 327   10.29 保持背景图片固定 328   10.30 小结 330

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值