作者:王小志2602928087 | 来源:互联网 | 2023-02-12 14:33
我正在尝试制作一个带标题的固定大小的内容阅读器.即使内容滚动,也应显示标题.在这种情况下,我尝试使用CSS3 flexbox制作这样的结构:
.flex {
display: flex;
flex-direction: column;
width: 100%;
height: 150px;
border: 1px solid #ddd;
}
.title {
height: 50px;
line-height: 50px;
background: #eee;
}
.text-wrap {
flex: 1 0 0;
}
.text {
height: 100%;
overflow-y: auto;
}
Title
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas faucibus justo vitae urna lacinia pharetra. Quisque nulla lorem, laoreet quis dapibus nec, vehicula vitae lorem. Nunc fringilla justo vel metus rhoncus, at congue leo dictum. Morbi congue tortor lacinia, mollis sapien indsadsadf, rutrum purus. Nam ornare dapibus mi, vitae varius diam tincidunt id. Donec maximus sem nec luctus euismod. Morbi a volutpat diam. In sapien orci, auctor et facilisis eu, finibus ac mauris. Vivamus eu nunc porta, congue libero quis, rutrum nibh. Proin feugiat vel augue mattis cursus.
这样无论flex
容器的大小如何,内容都会得到其余的高度.但是,正如您所看到的,内容已从容器中移出,并且该overflow-y
属性不起作用.
但是,如果我将高度指定为0 text-wrap
,我可以看到我的代码正常工作,如下所示:
.flex {
display: flex;
flex-direction: column;
width: 100%;
height: 150px;
border: 1px solid #ddd;
}
.title {
height: 50px;
line-height: 50px;
background: #eee;
}
.text-wrap {
flex: 1 0 0;
height: 0;
}
.text {
height: 100%;
overflow-y: auto;
}
Title
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas faucibus justo vitae urna lacinia pharetra. Quisque nulla lorem, laoreet quis dapibus nec, vehicula vitae lorem. Nunc fringilla justo vel metus rhoncus, at congue leo dictum. Morbi congue tortor lacinia, mollis sapien indsadsadf, rutrum purus. Nam ornare dapibus mi, vitae varius diam tincidunt id. Donec maximus sem nec luctus euismod. Morbi a volutpat diam. In sapien orci, auctor et facilisis eu, finibus ac mauris. Vivamus eu nunc porta, congue libero quis, rutrum nibh. Proin feugiat vel augue mattis cursus.
我无法理解这种行为.我理解这flex-basis
是一个决定元素初始高度的属性(因为flex-direction
设置为column
),并且flexbox根据flex-grow
属性将剩余高度除以元素.
那么在这种情况下,因为text-wrap
's flex-basis
(初始高度)被设置为0
并且它是唯一具有该属性的元素,所以flex-grow
不应该将高度固定到flex
容器的其余部分吗?为什么会发生这种情况?
另外,为什么我要指定height: 0
属性text-wrap
以使我的代码工作?
非常感谢.
1> Michael_B..:
您的代码是正确的并且可以正常工作。
您只需要考虑一个Flexbox功能:
flex容器的初始设置是 min-height: auto
。这意味着,默认情况下,弹性项目不能短于其内容。覆盖此设置后,布局将按预期工作。
您可以使用height: 0
,但这是标准方法:
.text-wrap {
flex: 1 0 0;
min-height: 0; /* new */
}
此处有完整说明:为什么弹性项目不会缩小到内容大小以上?
.text-wrap {
flex: 1 0 0;
min-height: 0; /* new */
}
.flex {
display: flex;
flex-direction: column;
width: 100%;
height: 150px;
border: 1px solid #ddd;
}
.title {
height: 50px;
line-height: 50px;
background: #eee;
}
.text-wrap {
flex: 1 0 0;
min-height: 0; /* new */
}
.text {
height: 100%;
overflow-y: auto;
}