inline-block 之 “幽灵空白节点”

1. 问题&现象

上代码:

<!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></title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            overflow-x: auto;
        }
        .box::-webkit-scrollbar {
            background-color: aqua;
        }
        .box1 {
            display: inline-block;
            height: 100%;
            width: 100%;
            background-color: antiquewhite;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="box1"></div>
    </div>
</body>
</html>

 

效果展示:

  问题1:看效果图,子元素box1的高度是100%,计算出来应该200px,为什么纵轴还多了个滚动条呢?

 

2. “幽灵空白节点”的产生&解决

上代码

<!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></title>
    <style>
        .box {
            background-color: antiquewhite;
        }
        .box1 {
            display: inline-block;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="box1"></div>
    </div>
</body>
</html>

 

效果图:

            从效果图中我们可以看出:父子元素都未设置高度,但是父元素box明显有高度

 

原因:

  将子元素box1设置成inline-block后,子元素box1同级其实多出来了一个所谓的“空白节点”,而父元素的高度是由这个“空白节点”撑开的, 这个“空白节点”永远透明,不占据任何宽度,看不见也无法通过脚本获取,就好像幽灵一样,但又确确实实地存在,表现如同文本节点一样。 这个“空白节点”我们称之为“幽灵空白节点”

 

解决方案:

  1. 子元素box1设置 display: block;
  2. 父元素box:font-size: 0;(font-size是有继承性的,子元素需要重新设置一下font-size)

 

回答上边的问题1:

  因为box1的display设置成inline-block,父元素下边其实多了一个有一定高度的空白节点,父元素高度200px,子元素box1高度也是200px,那父元素下边实际内容高度其实是 子元素内容高度+空白节点高度,内容高度大于父元素高度,又因为父元素设置了overflow-x设置了auto(overflow-y也会变成auto),所以就出现了纵向滚动条

posted @ 2022-06-17 13:31  艾若菲  阅读(540)  评论(0编辑  收藏  举报