【问题标题】:Why and how exactly margin: auto; affects css grid items? [duplicate]为什么以及如何准确保证金:自动;影响CSS网格项目? [复制]
【发布时间】:2021-02-19 09:40:36
【问题描述】:

在处理网格时,我意识到为网格项设置 margin: auto; 会极大地改变它们的行为。

我创建了一个简单的例子来说明发生了什么。

如果不为网格项目设置任何marginwidthheight,每个项目的高度和宽度都与我预期的一样。

仅添加margin: auto;,每个网格项的行为似乎都像inline 元素:框采用内容的大小(加上我添加的填充)。但是添加height: 100%;width: 100%;,保留margin: auto; 可以修复它。

所以,我并不是说这是错误的,我猜这是预期的行为,我只是不明白。

谁能解释正在发生的事情并可能链接到它的记录位置?

* {
  box-sizing: border-box;
}

.grid {
  display: grid;
  grid-gap: 1.5rem;
  grid-template-columns: repeat(4, minmax(0, 1fr));
}


.grid > div {
  border: 1px solid;
  padding: 1.5rem;
  
  /*
  margin: auto;
  height: 100%;
  width: 100%;
  */
}
<div class="grid">
  <div>1</div>
  <div><h1>text</h1></div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
</div>

【问题讨论】:

  • 因为这正是 auto 的作用,不是吗? auto 会根据其内容进行相应调整。设置宽度和高度只是意味着您已经覆盖了自动设置的尺寸。你看过这个帖子吗? stackoverflow.com/questions/4471850/…
  • 嗯,我知道margin: auto; 是如何工作的,但我认为我说明的情况有所不同:如果你有一个块元素并将margin: auto; 应用于它,则elemenet 的大小不会改变,它仍然会占据所有可用的水平空间
  • 您是完整阅读副本还是只阅读标题?因为第一个副本很好地解释了为什么 margin 表现得那么为什么网格项
  • 我已经读过了。我错过了它,因为相关部分甚至不在接受的答案中。我仍然认为它并没有真正回答我的问题,因为它只是在说明行为,我也做过,但它没有说明。发生这种情况的技术原因是什么?它记录在哪里?

标签: css css-grid margin


【解决方案1】:

自动对浮动、内联和绝对元素不起作用,如 article 所示

直接引自网站:

如前所述,auto 在浮动、内联和 绝对元素。所有这些元素已经决定了它们的 布局,因此使用 auto 作为边距和 期望它像那样居中。

这将破坏使用浮动之类的东西的最初目的。 因此 auto 在这些元素中的值为 0px。

如果没有典型的块元素,auto 也将无法工作 一个宽度。到目前为止,我向您展示的所有示例都有宽度。

值为 auto 的宽度将具有 0px 边距。块元素的宽度 通常在自动或 100% 时覆盖其容器,因此 在这种情况下,margin auto 将被计算为 0px。

也看看这个post

【讨论】:

  • 我没有对您投反对票,我认为您链接到的信息很有趣,但它们似乎包含不准确和误导性信息。一个有边距的元素:auto;不占用可用空间,如果有可用空间,它只会放置相同大小的边距。你也开始说“显示:块;没有宽度”,这不是真的。
猜你喜欢
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
相关资源
最近更新 更多