gpt4 book ai didi

javascript - flex 元素不包装在列方向 flex 盒中

转载 作者:太空狗 更新时间:2023-10-29 16:39:31 24 4
gpt4 key购买 nike

我有一个 outerWrapperinnerWrapper 和子项。 outerWrapper 的高度为300px,并且是display: flexinnerWrapper 也是display: flex,并且是flex-direction: column

当我将 align-items 的值除 stretch 之外的任何值添加到 outerWrapper 时,子项显示一长列。他们忽略了 300px 高度。这是它如何显示的图像:

enter image description here

它应该像这样显示:

enter image description here

只需使用 align-items: flex-end

为什么会这样,我如何使用 align-items: flex-end 并让子项像第二张图片一样显示?

JSFiddle

#outerWrapper {
height: 300px;
background-color: lightgreen;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: flex-end;
}
ul {
padding: 0;
margin: 0;
display: flex;
align-items: center;
flex-wrap: wrap;
flex-direction: column;
}
li {
list-style-type: none;
width: 100px;
height: 100px;
background-color: lightblue;
border: 1px solid;
}
<div id="outerWrapper">
<ul id="innerWrapper">
<li class="child">I'm #01</li>
<li class="child">I'm #02</li>
<li class="child">I'm #03</li>
<li class="child">I'm #04</li>
<li class="child">I'm #05</li>
</ul>
</div>

更新

这个问题的答案,就是给innerWrapper添加一个210px的高度。但我需要使用 JavaScript 获取该数字,因为框的数量是动态的。

我尝试了以下代码:

innerWrapper.style.height = (lastChild.offsetTop - innerWrapper.offsetTop + lastChild.offsetHeight) + 'px';

但它并没有解决它。它只是将高度设为:5 * 102(5 = 框数;102 = 高度 + 边框)。

如何使用 JavaScript 为 innerWrapper 设置正确的高度? (我不能设置 height: 100% 因为我无法设置 align-items: flex-end 或 center。)

JSFiddle

var innerWrapper = document.getElementById('innerWrapper');
var lastChild = innerWrapper.lastElementChild;
newHight = lastChild.offsetTop - innerWrapper.offsetTop + lastChild.offsetHeight;
innerWrapper.style.height = newHight + 'px';
#outerWrapper {
height: 300px;
background-color: lightgreen;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: flex-end;
}
ul {
padding: 0;
margin: 0;
display: flex;
align-items: center;
flex-wrap: wrap;
flex-direction: column;
/*height: 206px;*/
}
li {
list-style-type: none;
width: 100px;
height: 100px;
background-color: lightblue;
border: 1px solid;
}
<div id="outerWrapper">
<ul id="innerWrapper">
<li class="child">I'm #01</li>
<li class="child">I'm #02</li>
<li class="child">I'm #03</li>
<li class="child">I'm #04</li>
<li class="child">I'm #05</li>
</ul>
</div>

最佳答案

您已经为 #outerWrapper 定义了一个高度:height: 300px

只需给 child - #innerWrapper - 一个相等的高度:height: 100%。现在他们包装。

然后,如果您希望元素位于容器底部,请在奇数元素上使用 flex auto 边距。

使用不可见的伪元素使最后的奇数项始终与顶行对齐。

#outerWrapper {
height: 300px;
background-color: lightgreen;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: flex-end;
}

ul {
padding: 0;
margin: 0;
display: flex;
align-items: center;
flex-wrap: wrap;
flex-direction: column;
height: 100%; /* NEW */
}

li {
list-style-type: none;
width: 100px;
height: 100px;
background-color: lightblue;
border: 1px solid;
}

li:nth-child(odd) { margin-top: auto; } /* NEW */

ul::after {
content: ""; /* NEW */
width: 100px; /* NEW */
height: 100px; /* NEW */
border: 1px solid; /* NEW */
visibility: hidden; /* NEW */
}
<div id="outerWrapper">
<ul id="innerWrapper">
<li class="child">I'm #01</li>
<li class="child">I'm #02</li>
<li class="child">I'm #03</li>
<li class="child">I'm #04</li>
<li class="child">I'm #05</li>
</ul>
</div>

Revised Fiddle

关于javascript - flex 元素不包装在列方向 flex 盒中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37928322/

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