滚动正文和块后的 space
Scroll in the body and the space after the block
我不明白为什么在正文中有一个卷轴,在.example
块之后有一个space。按照我的逻辑,我把 margin-bottom 设为 100px,然后从 block height 中减去这 100px max-height: calc(100% - 100px);
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
html,
body {
height: 100%;
}
.example {
padding: 20px;
width: 60%;
margin: 100px auto 0;
max-height: calc(100% - 100px);
border: 1px solid black;
overflow-y: scroll;
}
p{
padding: 100vh 0;
}
</style>
</head>
<body>
<div class="example">
<div class="text">
<p>Lorem</p>
<p>Lorem</p>
</div>
</div>
</body>
</html>
删除 p
元素上的 padding
:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
html,
body {
height: 100%;
}
.example {
padding: 20px;
width: 60%;
margin: 100px auto 0;
max-height: calc(100% - 100px);
border: 1px solid black;
overflow-y: scroll;
}
</style>
</head>
<body>
<div class="example">
<div class="text">
<p>Lorem</p>
<p>Lorem</p>
</div>
</div>
</body>
</html>
正确答案是 Collapsing margins xD。要解决问题,您可以在正文中添加以下内容之一:
- 边框
- 填充
- 溢出
您 运行 陷入了 广泛继承的边距 问题,该问题源自流行的 collapsed margins - issue (当两个元素具有垂直边距时,两个 碰撞 边距合并为一个) - 不是您的 确切 情况,但本质上相同。
阅读更多关于 w3.org Collapsing Margins
由于您使用了 html, body {height: 100%}
并且高 .example
元素的上边距为 100% - 移动了 body
元素,向下折叠了 100 像素! 它基本上“疯狂地”继承了(至少在视觉上)那些 100 像素的边距。
具有垂直边距的元素可能会导致祖先流出现不需要的结果。解决此问题的一种常见方法是巧妙地避免垂直 margin
,或者在您的特定情况下将 overflow: auto
添加到受该问题 html, body
影响的祖先。
html, body {
height: 100%; /* Why would you want this? */
overflow: auto; /* FIX for wild margins */
}
其他解决方案(我相信还有很多其他解决方案)是不使用html, body {height: 100%}
而是 html 上的 min-height
(如果确实需要)和 .example
元素上的 body 和 vh
(视口高度)单元
html, body {
/* min-height: 100%; /* use min-height, but not needed */
}
.example {
/* .... other styles */
margin: 100px auto 0;
height: calc(100vh - 100px); /* 100vh minus 100px margin-top */
}
长话短说 - 使用 margin
时要小心。我个人只在使用 flexbox 或水平 space 时使用它(通常在使用内联块元素时),否则我总是使用带有填充的包装器来创建所需的间距,这要归功于 box-sizing: border-box
(不需要计算任何东西)-或者在真正需要的时候-我会特别小心地对待它们。
我不明白为什么在正文中有一个卷轴,在.example
块之后有一个space。按照我的逻辑,我把 margin-bottom 设为 100px,然后从 block height 中减去这 100px max-height: calc(100% - 100px);
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
html,
body {
height: 100%;
}
.example {
padding: 20px;
width: 60%;
margin: 100px auto 0;
max-height: calc(100% - 100px);
border: 1px solid black;
overflow-y: scroll;
}
p{
padding: 100vh 0;
}
</style>
</head>
<body>
<div class="example">
<div class="text">
<p>Lorem</p>
<p>Lorem</p>
</div>
</div>
</body>
</html>
删除 p
元素上的 padding
:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
html,
body {
height: 100%;
}
.example {
padding: 20px;
width: 60%;
margin: 100px auto 0;
max-height: calc(100% - 100px);
border: 1px solid black;
overflow-y: scroll;
}
</style>
</head>
<body>
<div class="example">
<div class="text">
<p>Lorem</p>
<p>Lorem</p>
</div>
</div>
</body>
</html>
正确答案是 Collapsing margins xD。要解决问题,您可以在正文中添加以下内容之一:
- 边框
- 填充
- 溢出
您 运行 陷入了 广泛继承的边距 问题,该问题源自流行的 collapsed margins - issue (当两个元素具有垂直边距时,两个 碰撞 边距合并为一个) - 不是您的 确切 情况,但本质上相同。
阅读更多关于 w3.org Collapsing Margins
由于您使用了 html, body {height: 100%}
并且高 .example
元素的上边距为 100% - 移动了 body
元素,向下折叠了 100 像素! 它基本上“疯狂地”继承了(至少在视觉上)那些 100 像素的边距。
具有垂直边距的元素可能会导致祖先流出现不需要的结果。解决此问题的一种常见方法是巧妙地避免垂直 margin
,或者在您的特定情况下将 overflow: auto
添加到受该问题 html, body
影响的祖先。
html, body {
height: 100%; /* Why would you want this? */
overflow: auto; /* FIX for wild margins */
}
其他解决方案(我相信还有很多其他解决方案)是不使用html, body {height: 100%}
而是 html 上的 min-height
(如果确实需要)和 .example
元素上的 body 和 vh
(视口高度)单元
html, body {
/* min-height: 100%; /* use min-height, but not needed */
}
.example {
/* .... other styles */
margin: 100px auto 0;
height: calc(100vh - 100px); /* 100vh minus 100px margin-top */
}
长话短说 - 使用 margin
时要小心。我个人只在使用 flexbox 或水平 space 时使用它(通常在使用内联块元素时),否则我总是使用带有填充的包装器来创建所需的间距,这要归功于 box-sizing: border-box
(不需要计算任何东西)-或者在真正需要的时候-我会特别小心地对待它们。