我有两个并排的面板。右侧的包含物种名称,不应换行(它们足够小,仅占屏幕的一小部分)。左侧面板包含更多内容,并占据了大部分屏幕。这是我的代码。
html,body {
height: 100%;
}
body {
display: flex;
margin: 0;
overflow-y: hidden;
}
#left {
background-color: skyblue;
flex-grow: 1;
padding: 1em;
}
#right {
background-color: indianRed;
white-space: nowrap;
padding: 1em;
display: flex;
flex-direction: column;
}Run Code Online (Sandbox Code Playgroud)
<div id='left'>
Some text wide enough to compete with the red panel -- some more words needed.
</div>
<div id='right'>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
</div>Run Code Online (Sandbox Code Playgroud)
当没有滚动条时,右侧面板的宽度是正确的。但是一旦我添加了一个垂直滚动条 ( overflow-y: auto),它的宽度就会变得更小,同时也创建了一个水平滚动条。为什么?以及如何解决?我只想要垂直滚动条。面板的宽度应足以包含其上的所有文字。
html,body {
height: 100%;
}
body {
display: flex;
margin: 0;
overflow-y: hidden;
}
#left {
background-color: skyblue;
flex-grow: 1;
padding: 1em;
}
#right {
background-color: indianRed;
white-space: nowrap;
padding: 1em;
display: flex;
flex-direction: column;
overflow-y: auto;
}Run Code Online (Sandbox Code Playgroud)
<div id='left'>
Some text wide enough to compete with the red panel -- some more words needed.
</div>
<div id='right'>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
</div>Run Code Online (Sandbox Code Playgroud)
您当前的 Flex 属性如下:
div#左
flex-grow:1;
flex-shrink:1;
flex-basis:auto;
Run Code Online (Sandbox Code Playgroud)
这意味着:
div 的宽度将首先填充内容,flex-basis:auto;然后填充剩余空间flex-grow:1;
div#right
flex-grow:0;
flex-shrink:1;
flex-basis:auto;
Run Code Online (Sandbox Code Playgroud)
这意味着:
div 的宽度将首先是内容flex-basis:auto;并缩小以适应flex-shrink:1;
这就是为什么在添加垂直滚动时您会看到水平滚动条,因为它会占用整体宽度。
flex-basis:0;在左侧 div 上,这将使其首先填充剩余空间,然后放置内容
flex-grow:1;
flex-shrink:1;
flex-basis:auto;
Run Code Online (Sandbox Code Playgroud)
flex-grow:0;
flex-shrink:1;
flex-basis:auto;
Run Code Online (Sandbox Code Playgroud)
flex-shrink:0;放在右边的 div 上,这样可以防止它缩小
html,
body {
height: 100%;
}
body {
display: flex;
margin: 0;
overflow-y: hidden;
}
#left {
background-color: skyblue;
flex-grow: 1;
flex-basis: 0;
padding: 1em;
}
#right {
background-color: indianRed;
white-space: nowrap;
padding: 1em;
display: flex;
flex-direction: column;
overflow-y: auto;
}Run Code Online (Sandbox Code Playgroud)
<div id='left'>
Some text wide enough to compete with the red panel -- some more words needed.
</div>
<div id='right'>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
</div>Run Code Online (Sandbox Code Playgroud)
这个解决方案的问题是如果左边div的内容太长就会溢出
html,
body {
height: 100%;
}
body {
display: flex;
margin: 0;
overflow-y: hidden;
}
#left {
background-color: skyblue;
flex-grow: 1;
padding: 1em;
}
#right {
background-color: indianRed;
white-space: nowrap;
padding: 1em;
flex-shrink: 0;
display: flex;
flex-direction: column;
overflow-y: auto;
}Run Code Online (Sandbox Code Playgroud)
<div id='left'>
Some text wide enough to compete with the red panel -- some more words needed.
</div>
<div id='right'>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
<p>Some names.</p>
<p>Some names a little larger.</p>
</div>Run Code Online (Sandbox Code Playgroud)