我正在努力实现以下目标:
我的第一次尝试是使用辅助 div(绿色):
我可以在这里做的是使用 JavaScript 将 puple 和 orange 元素移出移动屏幕上的助手。 但是必须有一个简单的CSS方式。
我的第二次尝试是删除助手并构建移动布局:
有没有办法在 flex-direction: row
两个元素放在一起? ( 第二次尝试)
原文由 Marc 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是,如果您使用辅助包装器,那么您将只能重新排序其中的项目,但不能将它们与它们的叔叔混合。
如果您不使用辅助包装器,则需要列布局。正如 Nenad Vracar 所建议的,唯一被广泛支持的打破列的方法是硬编码容器的高度。但有时你不能这样做。
我会建议两个更好的选择,但它们的支持很差(基本上是 Firefox):
display: contents
摆脱它 document.querySelector('button').addEventListener('click', function() {
document.querySelector('main').classList.toggle('mobile');
});
main {
display: flex;
width: 600px;
height: 400px;
}
.wrapper {
display: flex;
flex-direction: column;
}
div {
flex: 1;
}
[data-color=orange] {
background-color: #FFAD77;
}
[data-color=yellow] {
background-color: #FFE377;
}
[data-color=purple] {
background-color: #FF77C8;
order: 3;
}
main.mobile {
flex-direction: column;
}
main.mobile .wrapper {
display: contents;
}
main.mobile [data-color=orange] {
order: -1;
}
<main>
<div data-color="yellow"></div>
<div class="wrapper">
<div data-color="orange"></div>
<div data-color="purple"></div>
</div>
</main>
<button>toggleLayout</button>
document.querySelector('button').addEventListener('click', function() {
document.querySelector('main').classList.toggle('mobile');
});
main {
display: flex;
flex-flow: column wrap;
width: 600px;
height: 400px;
}
div {
flex: 1;
}
[data-color=orange] {
background-color: #FFAD77;
page-break-after: always;
break-after: always;
}
[data-color=yellow] {
background-color: #FFE377;
}
[data-color=purple] {
background-color: #FF77C8;
order: 3;
}
main.mobile {
flex-wrap: nowrap;
}
main.mobile [data-color=orange] {
order: -1;
}
<main>
<div data-color="yellow"></div>
<div data-color="orange"></div>
<div data-color="purple"></div>
</main>
<button>toggleLayout</button>
原文由 Oriol 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答5.2k 阅读✓ 已解决
5 回答2k 阅读
4 回答3.4k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.5k 阅读
2 回答1k 阅读✓ 已解决
您可以使用
Flexbox
来执行此操作,但您需要在弹性容器上使用固定的height
。这是 小提琴基本上你使用
flex-wrap: wrap
和flex-direction: column
并让第一个项目采用 100% 的高度并设置width
的百分比。然后你用媒体查询和高度改变顺序。