所以我有一个带有列和最大高度的flexbox,使列在3列中彼此相邻.
这在Chrome中运行良好,但在Safari中,它似乎只使用最后(最右边)列来设置容器的实际高度.
我在这里举了一个例子:
section {
display: flex;
flex-direction: column;
flex-wrap: wrap;
max-height: 400px;
padding: 10px;
border: 1px solid green;
}
div {
flex-basis: 100px;
width: 100px;
background-color: red;
margin: 10px;
}Run Code Online (Sandbox Code Playgroud)
<section>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</section>Run Code Online (Sandbox Code Playgroud)
Chrome和Safari中的结果将在下方进行屏幕截图.
铬:
苹果浏览器:
这似乎是一个明显的错误,但我找不到任何有关它的信息.
我想知道的是:
我正在创建一个大型动态导航菜单,我希望看起来像这样:
[----------- 100% PAGE WIDTH -----------]
| GROUP A | GROUP C | GROUP F | GROUP G |
| item | item | item | item |
| item | | item | item |
| | GROUP D | item | item |
| GROUP B | item | item | |
| item | | | |
| item | GROUP E | | |
| | item | | |
|---------------------------------------|
| |
| |
[------------- …
我正在创建一种卡式布局,其中各个卡片垂直堆叠.在更高的屏幕宽度下,使用越来越多的卡片 - 使用尽可能小的垂直空间.
我正在使用flex-flow: column wrap布局来做到这一点.但是,我发现容器需要有height或者max-height为了鼓励卡片包装.考虑到卡片的数量和它们各自的尺寸可能会发生变化,我无法确定这个高度在没有切断物品或下面有多余空间的情况下最佳状态.
任何人都可以告诉我这是否可能,或者我做错了什么?
附加片段.
.card-container {
display: flex;
flex-flow: column wrap;
align-items: stretch;
}
.card {
flex: 0 0 auto;
width: 15rem;
margin: 0.5rem;
background-color: #f4f4f4;
/* max-height: ??? */
}Run Code Online (Sandbox Code Playgroud)
<div class="card-container">
<div class="card" style="height: 20em"></div>
<div class="card" style="height: 17em"></div>
<div class="card" style="height: 5em"></div>
<div class="card" style="height: 10em"></div>
<div class="card" style="height: 21em"></div>
<div class="card" style="height: 10em"></div>
<div class="card" style="height: 17em"></div>
<div class="card" style="height: 8em"></div>
<div class="card" style="height: 20em"></div>
<div …Run Code Online (Sandbox Code Playgroud)当使用列换行作为弹性流时,它似乎会对 chrome 中的容器尺寸造成问题。
HTML 示例:
<div class="root">
<div class="outer">
<div class="inner">A</div>
<div class="inner">B</div>
<div class="inner">C</div>
<div class="inner">D</div>
<div class="inner">E</div>
<div class="inner">F</div>
<div class="inner">G</div>
<div class="inner">H</div>
<div class="inner">I</div>
<div class="inner">J</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS: 正文{ 边距: 0; 填充:0;}
.root{
display: flex;
}
.outer{
background-color: red;
display: flex;
flex-flow: column wrap;
align-content: flex-start;
flex: 1 0 auto;
max-height: 400px;
}
.inner{
background-color: violet;
border: 1px solid black;
height: 100px;
width: 100px;
flex: 1 0 auto;
color: white;
text-align: center;
font-size: 50px;
}
Run Code Online (Sandbox Code Playgroud)
为什么 …
我使用 flexbox 在列中显示列表项。项目应在特定高度后环绕成更多列,列应水平居中,每列中的列表项应左对齐。我正在使用max-height来限制列表高度、flex-flow: column wrap构建环绕列以及align-content: center使列居中。
我意识到多列解决方案可能更明显,但我不想定义column-widthor column-count,所以我选择了 flexbox 解决方案。
当项目换行到多列时,问题列仅水平居中。如果只有一列,则该列不居中。我在 Windows 10 Home 和 MacOS Sierra 上的 Chrome 63 中都看到了这种行为。在 Firefox 中,它看起来像我想要的那样(下面的屏幕截图)。
我错过了什么吗?
如何让列始终水平居中、跨浏览器?
.filter_drop {
display: flex;
flex-flow: column wrap;
align-content: center;
list-style: none;
margin: 0;
padding: 0;
max-height: 7em;
border-bottom: 1px solid black;
}
.filter_drop li {
margin: 0 1em 0 0;
line-height: 1.2;
}Run Code Online (Sandbox Code Playgroud)
<ul class="filter_drop">
<li>One</li>
<li>Two </li>
<li>Three</li>
<li>Four</li>
<li>Five</li>
<li>Six</li> …Run Code Online (Sandbox Code Playgroud)如何使 ulin的 .menu-sub-col宽度等于内容宽度?
https://fiddle.jshell.net/j9ujfL2n/3/
.menu {
position: absolute;
z-index: 90;
display: flex;
flex-direction: row;
top: 40px;
left: 0;
transition: transform 0.25s ease-in-out;
transform: translateY(-100%);
visibility: hidden;
}
.menu--visible {
transform: translateY(0);
visibility: visible;
}
.menu ul {
list-style-type: none;
padding: 0;
margin: 0;
}
.menu li {
cursor: pointer;
}
.menu-main {
background-color: #3E5AE2;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2);
height: max-content;
}
.menu-main li {
position: relative;
padding: 10px 20px;
border-bottom: 1px solid rgba(0, 0, …Run Code Online (Sandbox Code Playgroud)当我使用时flex-flow: column wrap,父元素的宽度不会被拉伸。


*{
margin: 0;
padding: 0;
}
.box{
background: #f03;
position: relative;
display: inline-block;
/* top:10px; */
/* left: 10px; */
padding: 20px;
}
.in{
display: flex;
align-items: center;
flex-flow: column wrap;
max-height: 300px;
align-content: flex-start;
justify-content: space-between;
}
.item{
background: #fe3;
width: 100px;
margin-bottom: 20px;
height: 100px;
}
.item:last-child{
margin-left: 15px;
}
<body>
<div class="box">
<div class="in">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
https://jsfiddle.net/p4oLk7dz/5/
父级只有display: flex和flex-wrap: wrap,而子级有固定的height和。其行为如下:width150px
父容器的高度垂直扩展以方便包裹子元素。
但是,将父级更改为 hasflex-direction: column不会在水平方向上产生相同的行为:
父元素不是扩展以适应包装内容,而是重新排列子元素以方便在父元素中使用。
我希望通过垂直环绕内容实现的行为如下所示:
嗯,差不多就是这样。想象一下父级垂直填充空间,并水平扩展以包裹内容。第一个 gif 的水平版本。
这可以通过弹性盒实现吗?
我在使用 flexbox 时遇到了问题。
我正在使用带有 的容器flex-direction: column; flex-wrap: wrap,因此我的内部项目实际上可以放置在多列中。
问题是浏览器仍然将容器的宽度计算为内部项目宽度的总和!
我的容器块应该有一个较小的宽度(基于内容大小),但它实际上是巨大的。
无论如何,在使用列而不是行时,以这种方式计算容器的宽度也很不自然。
看看我的代码中的绿色块。它有一个巨大的,但它不应该有。此外,当您从容器中移除项目时,它会变小。
我期望的是具有小宽度的容器,因此它不会占用超过可用空间的一半。
在最新的 OS X 上的最新 Safari 和 Chrome 上进行了检查。
.container {
display: flex;
flex-wrap: wrap;
flex-direction: column;
background: #aa0000;
height: 100px;
}
.group {
display: flex;
flex-wrap: wrap;
flex-direction: column;
align-content: flex-start;
}
.g1 {
background: #00aa00;
}
.g2 {
background: #0000aa;
}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="group g1">
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
</div> …Run Code Online (Sandbox Code Playgroud)我有以下结构,我想了解为什么我的行不会随其内在内容而增长.
.row {
border:solid red;
display: flex;
flex-direction: row;
}
.cell {
border: solid green;
flex: 0 0 400px;
}Run Code Online (Sandbox Code Playgroud)
<div class="row">
<div class="cell">
cell 1
</div>
<div class="cell">
cell 2
</div>
<div class="cell">
cell 3
</div>
</div>Run Code Online (Sandbox Code Playgroud)
我不希望细胞生长或收缩,它们应该总是400px宽.父进程应该增长并溢出窗口,并且预计会出现水平滚动条.
在上面的示例中,红色边框应位于绿色边框周围.绿色边框具有预期尺寸,而不是红色边框.
出于与我的用例相关的可维护性原因,我不想为我的行设置静态宽度.
我对非flexbox解决方案持开放态度(参见内联块尝试),但会更喜欢一个flexbox(因为我需要align-items: center行上的行为)