我正在尝试编写一个标题,其中包含月份名称和该月份的所有日期,就在该名称的正下方。
天元素有固定的宽度,所以我想:为什么不使用 flexbox?
由于某些原因,.day
元素正在从其父元素中掉落,而父元素不会增长。
你能给我一个提示,为什么 flex-basis: auto
不会让 month-slot 在 days's slot 溢出后增长吗?
至于实现,我已经找到了使用 float: left
而不是使用 flexbox 的解决方法。但我无法理解为什么它会这样工作。
.main {
display: flex;
}
.month {
flex: 0 0 auto;
}
.days {
display: flex;
}
.day {
flex: 0 0 2em;
}
<div class='main'>
<div class='month'>
<div class='name'>Jan</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
<div class='day'>3</div>
<div class='day'>4</div>
<div class='day'>5</div>
<div class='day'>6</div>
</div>
</div>
<div class='month'>
<div class='name'>Feb</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
<div class='day'>3</div>
<div class='day'>4</div>
<div class='day'>5</div>
<div class='day'>6</div>
<div class='day'>7</div>
<div class='day'>8</div>
<div class='day'>9</div>
<div class='day'>10</div>
</div>
</div>
<div class='month'>
<div class='name'>Mar</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
</div>
</div>
</div>
代码笔:http://codepen.io/skyboyer/pen/MyzeLW
jsFiddle:https://jsfiddle.net/azizn/ytt7jb85/
最佳答案
使用 width: 2em
而不是 flex: 0 0 2em
。
.main {
display: flex;
}
.month {
flex: 0 0 auto;
}
.days {
display: flex;
}
.day {
width: 2em;
}
<div class='main'>
<div class='month'>
<div class='name'>Jan</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
<div class='day'>3</div>
<div class='day'>4</div>
<div class='day'>5</div>
<div class='day'>6</div>
</div>
</div>
<div class='month'>
<div class='name'>Feb</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
<div class='day'>3</div>
<div class='day'>4</div>
<div class='day'>5</div>
<div class='day'>6</div>
<div class='day'>7</div>
<div class='day'>8</div>
<div class='day'>9</div>
<div class='day'>10</div>
</div>
</div>
<div class='month'>
<div class='name'>Mar</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
</div>
</div>
</div>
您的代码的问题是 Firefox 和 Chrome 大小 .month
考虑了内容的宽度,但没有考虑 flex-basis
。
.main {
display: flex;
}
.month {
flex: 0 0 auto;
}
.days {
display: flex;
overflow: hidden;
}
.main.big .day {
flex: 0 0 2em;
}
.main.big > .month:after {
content: '';
position: absolute;
top: 0;
bottom: 0;
border: 1px solid red;
}
<div class='main grow'>
<div class='month'>
<div class='name'>Jan</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
<div class='day'>3</div>
<div class='day'>4</div>
<div class='day'>5</div>
<div class='day'>6</div>
</div>
</div>
<div class='month'>
<div class='name'>Feb</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
<div class='day'>3</div>
<div class='day'>4</div>
<div class='day'>5</div>
<div class='day'>6</div>
<div class='day'>7</div>
<div class='day'>8</div>
<div class='day'>9</div>
<div class='day'>10</div>
</div>
</div>
<div class='month'>
<div class='name'>Mar</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
</div>
</div>
</div>
<hr />
<div class='main big'>
<div class='month'>
<div class='name'>Jan</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
<div class='day'>3</div>
<div class='day'>4</div>
<div class='day'>5</div>
<div class='day'>6</div>
</div>
</div>
<div class='month'>
<div class='name'>Feb</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
<div class='day'>3</div>
<div class='day'>4</div>
<div class='day'>5</div>
<div class='day'>6</div>
<div class='day'>7</div>
<div class='day'>8</div>
<div class='day'>9</div>
<div class='day'>10</div>
</div>
</div>
<div class='month'>
<div class='name'>Mar</div>
<div class='days'>
<div class='day'>1</div>
<div class='day'>2</div>
</div>
</div>
</div>
这是一个错误。根据Line Length Determination , 当 determining the flex base size .month
案例 E 适用:
size the item into the available space using its used flex basis in place of its main size, treating a value of
content
asmax-content
.
计算最大内容大小的复杂问题已移至 CSS Sizing 4:
max-content inline size: The box’s “ideal” size in the inline axis. Usually the narrowest inline size it could take while fitting around its contents if none of the soft wrap opportunities within the box were taken. (See §4 Intrinsic Size Determination.)
如果是 non-replaced block ,
The max-content inline size of a block container box is the inline-size of the box after layout, if all children are sized under a max-content constraint.
它明确表示“布局后”。它没有说“在 flex 布局之前”之类的话。所以 flex-basis: 2em
不应该被忽略,并且应该有助于容器的最大内容大小。
关于html - 嵌套的 flex 元素不会使父级增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36968138/