将保证金应用于弹性项目

时间:2016-07-18 17:48:52

标签: html css css3 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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您使用的选择器是否存在应用下边距的问题:

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

这个选择器说:

  • 将保证金应用于.left
  • 将保证金应用于.right
  • 将保证金应用于 .middle
  • 的所有后代

这就是为什么你的文本框获得边距 - 他们是.middle的后代 - 而你的图片不是 - 他们是.left的后代,但是你的CSS中的.left不是针对后代的。

进行此调整:

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

另外,保持心情,Flexbox规范不鼓励在处理弹性项目时使用边距和填充的百分比(read more)。