html - 外部元素的边框会影响内部元素的边距如何显示,为什么?

标签 html css

我想我只是部分地理解了它,现在我有另一个我不明白的问题。我有一个 id="signin"的 div,它位于其他 2 个 div 中。这 2 个 div 没有任何填充或边框,当我将 margin-top 应用于 id="signin"的 div 现在它不会在上面创建任何空白。为什么? id="signin"旁边的 div 是否会以任何方式影响它?

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Test</title>
    <style type="text/css">
        body {margin: 0px;}

        #top-bar {
            background-color: #690203;
            height: 40px;

        }

        .fixed-width {
            width: 950px;
            margin: auto;
        }

        #logo {
            float: left;
        }

        #logo img {
            border-right: 2px solid #752124;
            padding: 9px;
        }
        
        #signin {
            float: left;
            width: 200px;
            margin-left: 15px;
            margin-top: 10px;
            border: 1px solid deepskyblue;
        }
    </style>
</head>
<body>
    <div id="top-bar">
        <div class="fixed-width">
            <div id="logo">
                <img src="images/logo.png" width="20">
            </div>
            <div id="signin">
                <!--<img src="images/signin.png" width="13">-->
                <span>test test</span>
            </div>
        </div>
    </div>
</body>
</html>

最近开始学习css,遇到了一个看不懂的问题。我将一个 div 嵌套在另一个 div 中,当外部 div 有边框时,将边距与内部 div 一起使用会导致将内部 div 移动到外部 div 中,这就是我认为它应该工作的方式。但是,当外部 div 没有任何边框时,对内部 div 使用 margin 会导致外部 div 也移动,并在其上方创建一些空间。请看看并尝试解释为什么会这样。谢谢。

边框在#bigger

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        #bigger {
            width: 100px;
            height: 100px;
            background-color: deepskyblue;
            border: 1px dashed black; /* border I use or don't use with the outer div */
        }

        #smaller {
            margin-top: 10px;
            width: 50px;
            height: 50px;
            background-color: deeppink;
            padding-top: 10px;
        }
    </style>
</head>
<body>
    <div id="bigger">
        <div id="smaller"></div>
    </div>

</body>
</html>

在#bigger 中没有边框

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        #bigger {
            width: 100px;
            height: 100px;
            background-color: deepskyblue;
        }

        #smaller {
            margin-top: 10px;
            width: 50px;
            height: 50px;
            background-color: deeppink;
            padding-top: 10px;
        }
    </style>
</head>
<body>
    <div id="bigger">
        <div id="smaller"></div>
    </div>

</body>
</html>

最佳答案

这是由于 CSS 使用 collapsing margins 造成的.

那个链接会比我更好地解释它,所以我建议你读一读,但给你一个简短的总结:

CSS 中的边距旨在显示在元素的外部。当处理其他元素中的元素时,这种行为会变得有点模糊,因为无论是在父元素内还是在父元素之外,都可以将边距视为在子元素之外。确定 margin's 也将始终寻求在所有父元素之外,除非该父元素具有阻止此逻辑为真的样式。例如,如果父级有边框,现在它上面有一些东西将子级与外界隔开,这意味着子级的边距必须属于父级的内部。如果不是,则没有分离,因此 child 的边缘会向外冒险。

如果您希望始终在父元素内留有边距,更好的选择可能是对父元素应用内边距,而不是对子元素应用边距。

关于html - 外部元素的边框会影响内部元素的边距如何显示,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611420/

相关文章:

javascript - 当屏幕尺寸改变时调整固定物体的尺寸

html - 如何添加基于文本的单位,如 "lbs" float 到输入元素的内部(或外部)?

javascript - Jquery 变异插件

javascript - float 元素溢出容器

javascript - 删除 Slick Slider 淡入淡出过渡中的白色闪光

javascript - JSPDF 图片放不下而且太大了

html - 我如何在html中使用css

html - 将悬停效果应用于响应图像

javascript - 为什么第一个复选框起作用但第二个复选框不起作用?

html - 如何将右侧填充添加到水平滚动?