为什么a标签中使用img后的高度多了几个像素?
Posted on1y_rL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么a标签中使用img后的高度多了几个像素?相关的知识,希望对你有一定的参考价值。
这是一个很多前端初学者遇到的问题! 1、首先,<a>
标签是inline的,框模型是:行内框。行内框没有包含图片的表现,<img>
的标签就好像放在一条公路上一样。所以要使img能像放进一个盒子一样,就应该使用块级框:比如:
display:block;
/*或者*/
display:inline-block;
关于框模型!推荐你去看看css的官方
2、<img>
标签为什么会有底下的空白呢?这你要理解所谓的“基线(baseline)”。这是一个英文排版概念。我这里还是引用下知乎人的链接吧! 讲得很周到!
3、总结这个问题的几种解法:
[a]处理基线
adisplay:block;
imgvertical-align: bottom;
[b]强行去掉<a>
标签的行高
adisplay:block;line-height:0px;
[c]没有设置行高的时候可以去掉字体大小;
a元素下有一个匿名文本,这个文本外有一个匿名行级盒子,它有的默认vertical-align是baseline的,而且往往因为上文line-height的影响,使它有个line-height,从而使其有了高度,因为baseline对齐的原因,这个匿名盒子就会下沉,往下撑开一些距离,所以把a撑高了。
解决办法一是消除掉匿名盒子的高度,也就是给a设置line-height:0或font-size:0;
解决办法二是给两者vertical-align:top,让其top对齐,而不是baseline对齐
解决办法三是给img以display:block,让它和匿名行级盒子不在一个布局上下文中,也就不存在行级盒的对齐问题
其他解决办法也有,但这些都是从根本上解决问题
以上是关于为什么a标签中使用img后的高度多了几个像素?的主要内容,如果未能解决你的问题,请参考以下文章
关于div包裹imgiframe等标签会多3px或4px的问题