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同级其实多出来了一个所谓的“空白节点”,而父元素的高度是由这个“空白节点”撑开的, 这个“空白节点”永远透明,不占据任何宽度,看不见也无法通过脚本获取,就好像幽灵一样,但又确确实实地存在,表现如同文本节点一样。 这个“空白节点”我们称之为“幽灵空白节点”
解决方案:
- 子元素box1设置 display: block;
- 父元素box:font-size: 0;(font-size是有继承性的,子元素需要重新设置一下font-size)
回答上边的问题1:
因为box1的display设置成inline-block,父元素下边其实多了一个有一定高度的空白节点,父元素高度200px,子元素box1高度也是200px,那父元素下边实际内容高度其实是 子元素内容高度+空白节点高度,内容高度大于父元素高度,又因为父元素设置了overflow-x设置了auto(overflow-y也会变成auto),所以就出现了纵向滚动条