html - 为什么 div margin 不计算直接父级

标签 html css margin

<分区>

我正在练习基本的 CSS。我希望网页的页眉布局如下所示: wide top margin .

我的 html:

    <div class="header">
.
.
.
    </div>
    <div class="page">
        <div class="page-inside">
            <div class="row-apps">
                <div class="row-apps-item">
                    <img src="02.jpg" class="row-apps-img">
                    Kurikulum
                </div>
                <div class="row-apps-item">
                    <img src="03.jpg" class="row-apps-img">
                    Status Mahasiswa
.
.
.
                </div>
            </div>
        </div>
    </div>

还有 CSS:

.page {
    height: 1000px;
    padding: 0;
    background-color:rgb(31, 31, 31);
}

.page-inside {
    width: 1000px;
    margin: 30px auto;
}

.row-apps {
    padding: 10px;
    overflow: hidden;
}

.row-apps-item {
    color: rgb(57, 57, 207);
    width: 16.66%;
    float: left;
    padding: 5px 10px;
}

我打算使 .page-inside 与内容主容器 .page 的距离为 30px(保留黑色背景)。所以我添加了那个边距,但是我从 .page-inside.header 得到了 30px。它看起来像这样:broken top margin .我已经(通过 Chrome 开发工具)确保空白是由于 .page-inside 而不是 header.page

我知道我可以向 .page-inside.row-items 添加填充,但我相信添加边距也应该有效。我的理解有什么问题吗?

最佳答案

在 CSS 中,margin在元素周围创建空间。当您将 margin: 30px auto 添加到 .page-inside 容器时,您会在 .page-inside 周围添加 30px 的顶部和底部“空间” > 容器内容。这就是导致 .page 和导航栏之间出现 30px 空白的原因。发生这种情况的原因是因为 .page-inside 是父容器 .page 的第一个子容器,它在 之前的正常流中没有任何内容.page-inside 分区。因此,将 margin: 30px auto 赋予 .page-inside 与将其赋予 .page 本质上是一样的,因为它们“在同一时间”文档中的起点”。

另一方面,padding在元素内创建空间。如果您想将 .page-inside 中的主要内容向下推送 30px,只需使用像 padding: 30px 0 这样的填充。这将在 .page-inside 元素中创建 30px 的顶部和底部“空间”,以及 0px 的左右空间。

body {
  margin: 0;
}

.page {
    height: 1000px;
    padding: 0;
    background-color:rgb(31, 31, 31);
}

.page-inside {
    width: 1000px;
    padding: 30px 0;
    max-width: 95ch;
    margin: 0 auto;
    /*margin: 30px auto;*/
}

.row-apps {
    padding: 10px;
    overflow: hidden;
}

.row-apps-item {
    color: rgb(57, 57, 207);
    width: 16.66%;
    float: left;
    padding: 5px 10px;
}

nav {
  background: hsl(0, 0%, 20%);
}

.row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  max-width: 90ch;
  padding: .5rem 1rem;
  color: #fff;
  margin: 0 auto;
}

nav ul {
  display: flex;
  align-items: center;
  list-style-type: none;
}

nav ul li {
  padding: 0 .75rem;
}
<nav>
  <div class="row">
    <div>
      <span>Aplikasi</span>
    </div>
    <div>
      <ul>
        <li>ID</li>
        <li>EN</li>
        <li>Sulaiman</li>
      </ul>
    </div>
  </div>
</nav>
<div class="header">
    </div>
    <div class="page">
        <div class="page-inside">
            <div class="row-apps">
                <div class="row-apps-item">
                    <img src="02.jpg" class="row-apps-img">
                    Kurikulum
                </div>
                <div class="row-apps-item">
                    <img src="03.jpg" class="row-apps-img">
                    Status Mahasiswa

                </div>
            </div>
        </div>
    </div>

关于html - 为什么 div margin 不计算直接父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66667365/

相关文章:

php - 多个页面标题与一个头文件

javascript - Div 调整大小在 Internet Explorer 上不起作用

php - 如何让 HTML/CSS 在电子邮件中显示?

html - CSS 在两个元素之间创建弯 Angular ?

css - IE9 对 CSS 有文件大小限制吗?

当 DIV 为空时,CSS 属性向上传递给父元素

javascript - 检测子 div 是否比父 div 宽?

javascript - MS Edge Canvas 不支持 SVG 填充颜色

html - 填充将 div 扩展到屏幕外

html - 不能 magin-top 一个 div?