所以我从 stackoverflow 获得了这个三列布局示例,但我正在尝试使用 flexbox 获取列和行。
我的最终目标是拥有三栏布局(左侧是图片,右侧两栏是文本)。
但是,我需要所有内容都对齐(文本和图像在同一轴上对齐)。
但我的问题是,当我尝试使用 margin-bottom
分隔列中的元素时,只有文本列(而不是图像列)有效,但我做不到找出原因。
我希望左栏 margin-bottom
也能正常工作。但即使我为所有列添加 margin-bottom
,也只有带有 div 的列才有效。
我是否也应该将我的图片放在 div 中?
这是我面临的问题的图片:
* {
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/