非万能的vertical-align

CSS属性中的vertical-align估计你并不陌生,小图标和文字不对齐,你肯定想到vertical-align:middle;,inputbox和文字不对齐,也可以用vertical-align:middle;解决,先说说怎么解决的吧,再谈谈不能用的时候。

特别强调的是,下面的这些情况主要是针对IE6的,个别不是专指IE6的会提出来。

图片和文字中间对齐

图片和文字在同一行,那么肯定会默认低端对齐,如果图片的高度比较高,那就会显得不入格。可以直接给图片加个vertical-align:middle;实现中间对齐。这个基本上都知道,而且各个浏览器都需要这么做。

图片和文字中间对齐

数字与中文的对齐问题

曾经遇到过这样的问题:下划线和文字贴得太紧,数字和中文不在同一水平线上。
影响原因:vertical-align属性的设置,影响到中英文不对齐。
解决方法:给中英文对象链接加vertical-align:baseline就可以解决

英文和中文对齐问题

顺便说下英文和中文的对齐问题,本来用line-height基线与基线之间的距离控制文字在中间。但汉字的基线和英文字母不用,所以不起到作用。
解决方法:从字体下手,simsun是宋体,在windows字体文件夹下宋体就是simsun,simhei是黑体。
把font-family设置成sinmsun,汉字和英文字母在同一平行线了。

inputbox和文字中间对齐问题

这个问题好像也是只在IE6中出现过,设置方法也是简单的使用vertical-align:middle;解决。不过jucelin在测试的时候发现也不存在这样的问题了,真让我晕死,算了,记录下,防止下次遇到。这个需要同时添加2个vertical-align:middle;才能解决好像。Mark一下,下次再找找问题所在。

<input name="" type="checkbox" value="" style="vertical-align:middle" /><span style="vertical-align:middle;">好地方</span>

汉字+数字或者汉字+字母不对齐问题

先看图:

汉字和数字不对齐

图 :不对齐的情况

调整好之后

图 : 调整后的情况

今天开始发现这个问题也是因为有inputbox的原因,可是写测试代码到时候发现和inputbox没有什么关系。出现这样的情况其实也是因为使用了vertical-align:middle;的原因。解决办法你也应该能想到,删除即可。另外jucelin还发现,不对齐的原因还与上面提到的字体问题。因此如果你出现这样的情况,应该检查2个方面,一个是不是添加了vertical-align,另一个就是字体的问题,建议使用用中文的字体。

贴一下测试的代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>非万能的vertical-align - power by jucelin</title>
<style>
.main{font-family:Arial;font-size:12px; vertical-align:middle;}
span{ display:block; width:100px; float:left;height:22px; line-height:22px;}
</style>
</head>
<body>
<div class="main">
<div style="width:100%">
	<span><input name="" type="checkbox" value="" />&nbsp;hao123</span>
	<span><input name="" type="checkbox" value="" />&nbsp;好123</span>
	<span><input name="" type="checkbox" value="" />&nbsp;好hao</span>
</div>
<div style="width:100%; clear:both;">
	<span><input name="" type="checkbox" value="" />hao123</span>
	<span><input name="" type="checkbox" value="" />好123</span>
	<span><input name="" type="checkbox" value="" />好hao</span>
</div>
<div style="width:100%; clear:both;">
	<span><input name="" type="checkbox" value="" />&nbsp;<a href="#">hao123</a></span>
	<span><input name="" type="checkbox" value="" />&nbsp;<a href="#">好123</a></span>
	<span><input name="" type="checkbox" value="" />&nbsp;<a href="#">好hao</a></span>
</div>
<div style="width:100%; clear:both;">
	<span><a href="#">hao123</a></span>
	<span><a href="#">好123</a></span>
	<span><a href="#">好hao</a></span>
</div>
</div>
</body>
</html>

今天出现这个问题其实主要是因为为了让文字和inputbox对齐,加了vertical-align属性,结果导致了汉字和数字、汉字和字母的不对齐。最后的解决方法是删除所有的vertical-align,结果文字和inputbox它也对齐了,相对于白折腾了半天。算了,Mark下,希望对以后有帮助。

关于vertical-align可以参考的文章

不同浏览器下vertical-align的显示效果:http://www.blueidea.com/tech/web/2008/5892.asp

关于vertical-align的基本知识:http://www.cnblogs.com/huanzhi/archive/2010/08/23/1806829.html

其他资料:http://hi.baidu.com/%E6%8C%AFting/blog/item/f08e211c4f249eed1bd576c3.html

 

2 thoughts on “非万能的vertical-align

  1. 心淡若水

    哎 没有经过正规的学习
    我写这些CSS代码的时候最头疼的就是规范性的书写问题
    总是各个浏览器下都不同
    兼容性太要人命了

    回复
    1. jucelin 文章作者

      我也没有正规的学过,自己瞎倒腾。
      主要是网络现在的教程真的很不错,共享万岁啊

      回复

发表评论

邮箱地址不会被公开。 必填项已用*标注