html - CSS中的负边距仅在容器元素设置了边框或填充时才适用于元素
问题描述
根据 Mozilla 文档:
https
://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model#margin
负边距应该可以正常工作。
但是Mozilla提供的例子已经border
设置在.container
元素上。
事实证明,负边距仅在容器元素上设置border
或设置时才有效。padding
如果容器没有border
或没有padding
设置,则子元素上的负边距不起作用。
它是错误还是功能?
它的工作方式非常违反直觉。
我在规范https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#mpb-examples中找不到这种行为背后的任何合理解释
我在所有主流浏览器中重现了这种行为:Chrome、Firefox、Safari 和 Edge。
<div class="container">
<div class="box"></div>
</div>
.container {
background-color: blue;
height: 300px;
width: 500px;
margin: 200px auto;
/* border or padding is required for negative margin to work */
/* border: 1px solid transparent; */
padding: 1px;
}
.box {
background-color: red;
height: 200px;
width: 400px;
margin: -100px auto 0 auto;
}
.container {
background-color: blue;
height: 300px;
width: 500px;
margin: 200px auto;
/* border or padding is required for negative margin to work */
/* border: 1px solid transparent; */
/* padding: 1px; */
}
.box {
background-color: red;
height: 200px;
width: 400px;
margin: -100px auto 0 auto;
}
代码笔: https ://codepen.io/adrianbienias/pen/MWJNYyw ?editors=1100
解决方案
推荐阅读
- mysql - mysql服务器不见了
- java - 尽管没有显示错误,Java Array 元素仍未插入 MySQL 表
- python - 检查类是否在类中 - Python
- python - 使用 Python 打印和连接 Json 的元素
- python - Python子进程:进程终止后获取所有标准输出数据
- firebase-hosting - firebase cli 工具 firebase init 不工作
- angular - Angular - 如何解析 event.path 内部的对象
- c# - Azure B2C Graph API:为用户错误的登录尝试设置帐户锁定
- r - Merge two tables with no relation on columns
- java - 正则表达式同时选择特定字符之后和直到特定字符