gpt4 book ai didi

css - 我如何使用 "flex-flow: column wrap"?

转载 作者:数据小太阳 更新时间:2023-10-29 09:12:20 26 4
gpt4 key购买 nike

精简版

当使用 flex-flow: column wrapdisplay: inline-flex 时,它不会像 inline-block 那样 shrinkwrap:

enter image description here

(function() {
var ascending = true;
setInterval(function() {
var parent = document.getElementById('flex');
if (ascending) {
var child = document.createElement('p');
child.innerHTML = "foo";
parent.appendChild(child);
} else {
parent.removeChild(parent.children[0]);
}
if (parent.children.length <= 1) ascending = true;
if (parent.children.length >= 40) ascending = false;
}, 20);
})();
(function() {
var ascending = true;
setInterval(function() {
var parent = document.getElementById('failex');
if (ascending) {
var child = document.createElement('p');
child.innerHTML = "foo";
parent.appendChild(child);
} else {
parent.removeChild(parent.children[0]);
}
if (parent.children.length <= 1) ascending = true;
if (parent.children.length >= 40) ascending = false;
}, 20);
})();
#flexdesc {position: absolute; top: 25px;}
#flex {
top: 50px;
position: absolute;
display: inline-flex;
flex-flow: row wrap;
outline: 1px solid black;
padding: 3px;
max-height: 100%;
max-width: 180px;
align-content: flex-start;
transform: matrix(0, 1, 1, 0, 0, 0);
transform-origin: top left;
}

#flex > p {
margin: 0;
outline: 1px solid black;
height: 30px;
width: 30px;
align-self: flex-start;
transform: matrix(0, 1, 1, 0, 0, 0);
}
#failexdesc {position: absolute; top: 275px;}
#failex {
top: 300px;
position: absolute;
display: flex;
flex-flow: column wrap;
outline: 1px solid black;
padding: 3px;
max-height: 200px;
align-content: flex-start;
transform-origin: top left;
}

#failex > p {
margin: 0;
outline: 1px solid black;
height: 30px;
width: 30px;
align-self: flex-start;
}
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div id="flexdesc">What I expect it to do</div>
<div id="flex">
<p>foo</p>

<!-- add extra "<p>foo</p>" here. -->
</div>
<div id="failexdesc">What it does</div>
<div id="failex">
<p>foo</p>
</div>
</body>
</html>

注意每个 flex 容器的大小如何变化(或不变!)

我想要这种行为,因为我想为水平滚动的网站并排放置这些元素。

为什么它不收缩包装?如何使其收缩包装?






原始问题

flex-flow: row wrap 非常简单易懂。如果没有什么是“flexing”,它的行为类似于内联元素;它向右流动,直到它不能再流动为止,此时它会形成一个新行。

flex-flow: column wrapdisplay: flex 类似。它向下流动,直到它不能再向下流动(max-width?),然后开始一个新的列。当然,由于父元素是 display: flex,它是一个 block 级元素,因此由于 align-content 默认为 拉伸(stretch)。我可以轻松地将其更改为 flex-start 以使新列与前一列相邻。

...但是容器还是太宽了。它仍然是一个 block ,并填充了它父级的宽度。

我需要 flexbox 收缩以适应它的列。为什么?我正在尝试在水平滚动的网站中使用 flexbox。当然,我可以让 children 溢出,但溢出往往会……破坏东西。所以我想我需要 flex-flow: column wrapdisplay: inline-flex。我希望有一个“从上到下,从左到右”的效果,父级没有空白空间。

...然后 this发生了。在 chrome 中,父宽度等于子宽度的总和,否则,换行是正常的。在 firefox 中,父级是全宽的,只是长得更高以容纳元素(我认为 firefox 不支持换行)。在 IE11 中,宽度是正确的,但 child 只是向下溢出(甚至超出 body )。

我很困惑。

我在这里做错了什么?我知道 flexbox 是一个更新的功能,但我无法判断这是我的错还是浏览器的错。

顺便说一下,我正在用 chrome 测试这个。仅限 chrome 的解决方案对我来说很好。 (但是一个优雅的包罗万象的解决方案总是好的!)


这是 the code for the demo I linked to ,以防 jsbin 宕机:

var ascending = true;
setInterval(function() {
var parent = document.getElementById('flex');
if (ascending) {
var child = document.createElement('p');
child.innerHTML = "f";
parent.appendChild(child);
} else {
parent.removeChild(parent.children[0]);
}
if (parent.children.length <= 1) ascending = true;
if (parent.children.length >= 30) ascending = false;
}, 200);
#flex {
display: inline-flex;
flex-flow: column wrap;
outline: 1px solid black;
padding: 3px;
max-height: 100%;
align-content: flex-start;
}
p {
margin: 0;
outline: 1px solid black;
width: 10px;
}
body {
height: 150px;
width: 300px;
outline: 1px dashed black
}
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div id="flex">
<p>f</p>
<!-- add extra "<p>foo</p>" here. -->
</div>
</body>
</html>

最佳答案

如果您不知道每个元素的高度或您将拥有多少元素,一个更灵活的解决方案是:

.parent {
column-count: 4
}
.child {
display: inline-block;
width: 100%;
}

https://developer.mozilla.org/en-US/docs/Web/CSS/column-count

如果 .child:first-child 没有与顶部对齐,您可能还需要调整 margin-top

关于css - 我如何使用 "flex-flow: column wrap"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18669216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com