高度塌陷问题,出现了间隙

高度塌陷问题中,父级元素(d1)包含2个子级元素(d2,d3),d2设置浮动后,
为了解决塌陷的问题,采用了方法之一,再添加一个元素d3,这样解决了塌陷问题。
但是突然又想让这个d3显示出来,然后采用了开启BFC方法之一的,display:inline-block,确实d3显示出来了,
但有引发了另一个问题,d1的content多出了4px,请问一下,这个4px是哪里多出来的?
chrome,firefox,explorer中都出现了这个问题……

d1红色,d2黄色,d3蓝色

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>高度塌陷</title>
    <style>
        body {
            margin: 0;
        }
        #d1 {
            width: 200px;
            background-color: red;
            border: 20px solid green;
        }
        #d2 {
            width: 200px;
            height: 200px;
            background-color: yellow;
            float: left;
        }
        #d3 {
            width: 200px;
            height: 200px;
            background-color: blue;
            display: inline-block;
        }
    </style>
</head>
<body>
    <div id="d1">
        <div id="d2"></div>
        <div id="d3"></div>
    </div>
</body>
</html>

这是页面显示效果图片描述

这是父级d1的盒子图片描述

多出了4px

阅读 3.4k
5 个回答

这是因为display:inline-block后 ,元素就会默认 vertical-align:baseline
如果各#d3 添加 

 /* 添加这个不会有4像素 */
   vertical-align: top;
  /* 添加这个不会有4像素 */
  vertical-align: bottom;
  /* 添加这个会有4像素 */
 vertical-align: baseline;
 
 前面两个中的一个就不会多4像素。
 
 下面是效果:


图片描述

还有一种解决方式是给父元素,在这个例子里是id为d1的盒子加一个font-size:0px。
加了的话,记得有字体的地方需要设置font-size,不然会不显示字体的。

这个空隙是div里 inline-block之间的空格导致的。
消除方法有两种
1 :给父级一个字号=0的设置;
2 :div标签之间相连 不要换行跟缩进

我有试出来一种方法:给d3添加 margin-bottom: -4px;虽然不知道为啥,但间隙也消除了。

如果要把d3显示出来,只需要让d3清除浮动就可以了clear:both;

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