html - 将 margin 应用于 flex 元素

标签 html css layout flexbox

所以我从 stackoverflow 获得了这个三列布局示例,但我正在尝试使用 flexbox 获取列和行。

我的最终目标是拥有三栏布局(左侧是图片,右侧两栏是文本)。

但是,我需要所有内容都对齐(文本和图像在同一轴上对齐)。

但我的问题是,当我尝试使用 margin-bottom 分隔列中的元素时,只有文本列(而不是图像列)有效,但我做不到找出原因。

我希望左栏 margin-bottom 也能正常工作。但即使我为所有列添加 margin-bottom,也只有带有 div 的列才有效。

我是否也应该将我的图片放在 div 中?

这是我面临的问题的图片:

enter image description here

* {
  margin: 0;
}
html,
body {
  height: 100%;
}
.container {
  display: flex;
  flex-wrap: wrap;
  flex-direction: row;
  justify-content: flex-start;
  align-items: stretch;
  width: 80%;
  height: 100%;
  margin: 0 auto;
}
.left {
  display: flex;
  flex-flow: column wrap;
  align-items: flex-start;
  justify-content: flex-start;
  order: 1;
  background: red;
  flex-basis: 100%;
  height: 100%;
}
.middle {
  display: flex;
  flex-flow: column wrap;
  align-content: flex-start;
  justify-content: flex-start;
  order: 3;
  background: green;
  flex-basis: 100%;
  height: 100%;
}
.right {
  order: 2;
  background: yellow;
  flex-basis: 100%;
  height: 100%;
}
.box {
  display: flex;
  flex-flow: column wrap;
  align-items: flex-start;
  justify-content: flex-start;
  height: 50px;
  width: 50px;
}
@media screen and (min-width: 600px) {
  .container {
    flex-wrap: nowrap;
  }
  .left {
    flex-basis: 1;
    order: 1;
  }
  .middle {
    flex-basis: 1;
    order: 2;
  }
  .right {
    flex-basis: 1;
    order: 3;
  }
}
.left,
.right,
.middle * {
  margin-bottom: 25%;
}
<div class="container">
  <div class="left">
    <img src="cat1.jpeg" alt="cat">
    <img src="cat1.jpeg" alt="cat">
  </div>
  <div class="middle">
    <div class="box">`
      <p>texteiehiefief texteiehiefief texteiehiefief texteiehiefief</p>
    </div>
    <div class="box">`
      <p>texteiehiefief texteiehiefief texteiehiefief texteiehiefief</p>
    </div>
  </div>
  <div class="right"></div>
</div>

最佳答案

您用来应用下边距的选择器有问题:

.left,
.right,
.middle * {
    margin-bottom: 25%;
}

这个选择器说:

  • 将边距应用到 .left
  • 将边距应用于.right
  • 将边距应用到 .middle 的所有后代

这就是为什么你的文本框有边距——它们是 .middle 的后代——而你的图像不是——它们是 .left 的后代,但是.left 在您的 CSS 中没有针对后代。

进行此调整:

.left *,
.right,
.middle * {
    margin-bottom: 25%;
}

另外,请记住,在处理 flex 元素时,flexbox 规范不鼓励在边距和填充上使用百分比 (read more)。

关于html - 将 margin 应用于 flex 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38442998/

相关文章:

javascript - 数字计数器 - 制作动画计数器

javascript - 浏览器检测所需的实际图像大小

cocoa - 如何使用 Cocoa 实现布局编辑器

html - CSS - 如何编码流畅的 DIV 列,以响应 Bootstrap 3 的显示变化?

javascript - 小部件拖动图像

javascript - 使新元素匹配幻灯片 ui 设置

javascript - 使用复选框提交表单

html - 我如何将一些 <li> 包装在 <html> 中的某些内容中,以便我可以将一些放在左边,一些放在右边?

css - 防止主体在模式打开时滚动并跳到顶部

android - 为 fragment 设置新布局