【问题标题】:Flexbox container is not including margin-bottomFlexbox 容器不包括 margin-bottom
【发布时间】:2020-12-13 09:46:02
【问题描述】:

我刚刚开始学习 flexbox 布局并实现了一个示例,但是当我将 margin 20px 设置为我的 flexbox 容器时卡住了。顶部、左侧和右侧边距按预期工作,但我不知道底部边距没有意外设置。

我已将容器的高度设置为 100%,它采用父级(主体元素)的高度,也是 100%。

虽然当我将填充设置为 20px 到我的身体并从容器中删除 20px 边距时它工作正常。

只是想知道这种行为。

为什么边距在这里不起作用而不是填充?

*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
html,
body {
  background: #011627;
  height: 100%;
}

.container {
  margin: 20px;
  border: solid 2px #f9f871;
}

.container > div:nth-child(odd) {
  padding: 10px;
  background: #ff6a67;
}

.container > div:nth-child(even) {
  padding: 10px;
  background: #007277;
  color: azure;
}

/* overwrite css */
.container {
  display: flex;
  height: 100%;
  align-items: center;
  justify-content: center;
}
 <div class="container">
    <div class="home">Home</div>
    <div class="search">Search</div>
    <div class="view">View</div>
    <div class="logout">Logout</div>
  </div>

【问题讨论】:

  • 溢出:自动到正文,html
  • 这也有效,但我想要理由,以便我会再次犯这个错误
  • 你有一个溢出,你将 body 和 html 固定为 100%,但由于边距,里面的元素占用了 100% 以上,所以你需要启用滚动才能看到它
  • 元素如何占据超过 100% 的高度?是不是因为box-sizing: border-box属性不包含计算余量?
  • 是的,不包括边距

标签: css flexbox


【解决方案1】:

box-sizing 属性不包括计算边距:

https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing

box-sizing CSS 属性设置如何计算元素的总宽度和高度。

你可以把外边距变成父级的内边距

*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  background: #011627;
  height: 100%;
}

body {
  padding: 20px;
}

.container {
  /* margin: 20px; */
  border: solid 2px #f9f871;
}

.container>div:nth-child(odd) {
  padding: 10px;
  background: #ff6a67;
}

.container>div:nth-child(even) {
  padding: 10px;
  background: #007277;
  color: azure;
}


/* overwrite css */

.container {
  display: flex;
  height: 100%;
  align-items: center;
  justify-content: center;
}
<div class="container">
  <div class="home">Home</div>
  <div class="search">Search</div>
  <div class="view">View</div>
  <div class="logout">Logout</div>
</div>

或使用calc()将其从父级的高度移除

https://developer.mozilla.org/en-US/docs/Web/CSS/calc()

calc() CSS 函数允许您在指定 CSS 属性值时执行计算。它可以在任何允许使用&lt;length&gt;, &lt;frequency&gt;, &lt;angle&gt;, &lt;time&gt;, &lt;percentage&gt;, &lt;number&gt;&lt;integer&gt; 的地方使用。

*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  background: #011627;
  height: 100%;
}

body {
  height:calc( 100% - 40px );
}

.container {
  margin: 20px;
  border: solid 2px #f9f871;
}

.container>div:nth-child(odd) {
  padding: 10px;
  background: #ff6a67;
}

.container>div:nth-child(even) {
  padding: 10px;
  background: #007277;
  color: azure;
}


/* overwrite css */

.container {
  display: flex;
  height: 100%;
  align-items: center;
  justify-content: center;
}
<div class="container">
  <div class="home">Home</div>
  <div class="search">Search</div>
  <div class="view">View</div>
  <div class="logout">Logout</div>
</div>

由于bodyhtml 都设置了height:100%,您将看不到下面的空白区域。您可以为body 指定高度,仅允许html 滚动。

*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  background: #011627;
}

body {
  height:100vh;
}

.container {
  margin: 20px;
  border: solid 2px #f9f871;
}

.container>div:nth-child(odd) {
  padding: 10px;
  background: #ff6a67;
}

.container>div:nth-child(even) {
  padding: 10px;
  background: #007277;
  color: azure;
}


/* overwrite css */

.container {
  display: flex;
  height: 100%;
  align-items: center;
  justify-content: center;
}
<div class="container">
  <div class="home">Home</div>
  <div class="search">Search</div>
  <div class="view">View</div>
  <div class="logout">Logout</div>
</div>

【讨论】:

  • 答案的第一行给了我我不知道的原因的实际原因。现在我有四种方法可以做到这一点。 :)
猜你喜欢
  • 2010-09-22
  • 2012-06-19
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2010-09-06
  • 2013-04-12
  • 2012-12-21
相关资源
最近更新 更多