a标签高度问题?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        a {
            display: inline-block;
        }
    </style>
</head>
<body>
    <a href="">
        <img src="https://picsum.photos/200/300" alt="">
    </a>
</body>
</html>

这个a标签的高度为什么会高一点点?

阅读 1.9k
4 个回答

多了一个空格,可以

  1. 改成 flex
  2. font-size: 0;
  3. 改 vertical-align: top; 或 vertical-align: bottom;
  4. 或者手动把空格都干掉
a {
    display: inline-block;
    vertical-align: top; /* 或者设置为 middle */
    line-height: 1;
}

在网上搜索了半天,终于找到了原因和解决方法,为什么a标签嵌套img标签多出了几个像素:

a元素下有一个匿名文本,这个文本外有一个匿名行级盒子,它有的默认vertical-align是baseline的,而且往往因为上文line-height的影响,使它有个line-height,从而使其有了高度。而img是行内元素,即默认display: inline; 所以,由于行级盒的对齐问题(baseline对齐)的原因,a标签下匿名盒子就会下沉,往下撑开一些距离,所以把a撑高了。

解决办法一

消除掉匿名盒子的高度,也就是将a标签的display设置为block或者inline-block,并且a设置line-height:0或font-size:0;

这个方法,作者测试发现display:inline-block;line-heihgt:0px;的情况下,多出的7像素会跑到a标签的父标签里去,不知道为啥。而使用display:block则不会出现这种情况

解决办法二

a标签和img标签都设置vertical-align:top,让其top对齐,而不是baseline对齐

解决办法三

给img设置display:block,让它和a标签下的匿名行级盒子不在一个布局上下文中,也就不存在行级盒的对齐问题。

推荐使用第三种方法,给img设置display:block,这是a标签中使用img标签多出几个像素的根本解决方案。

参考文章:https://blog.csdn.net/weixin_30703633/article/details/118324527

样式加个*{padding: 0px;margin: 0px}就可以了。
html默认是有一些默认样式的,我们做页面一般会把这些默认样式做一下设置。
像很多标签都是有边距的,字体的系统默认大小等,
可以看下这个网站:https://meyerweb.com/eric/tools/css/reset/
image.png
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题