【发布时间】:2021-01-30 20:32:51
【问题描述】:
我正在尝试在 CSS 中创建以下设置,但没有运气:https://gyazo.com/42e85e7bd7823839bf738eece8c3e588
我基本上想要一个最大高度为 300px 的容器,然后让这个红色框为空白空间,并让蓝色框中的一些元数据浮动在这个 300px 容器的右侧。我的目标是让蓝色容器占据所有垂直空间,然后在需要更多空间时水平扩展。如果容器中的内容很少,那么它将具有较低的宽度,但如果可能的话,仍会使用所有 300 像素的高度。如果有更多内容(例如在屏幕截图中的第三个示例中),则它会水平扩展直到需要为止。
所以它应该:
- 尝试使用所有可用的垂直空间将内容推入蓝色框中(假设您开始时宽度为 1px)
- 扩展蓝色的水平宽度,因为它垂直方向的内容空间不足(例如,所有 1px 宽度都被使用,所以扩展为 2px、3px、4px...直到它有足够的空间来显示内容)。同时垂直空间仍然始终为 300 像素。
我目前拥有的是这样的:
.container {
display: flex;
flex-direction: row;
width: 100%;
height: 300px;
margin: 0;
}
.box1 {
background-color: red;
flex-grow: 1;
min-height: 100px;
width: 100%;
}
.box2 {
background-color: blue;
min-width: 100px;
min-height: 100px;
flex-shrink: 5;
}
<div class="container">
<div class="box1">
</div>
<div class="box2">
<div class="fakeBox">
<h1>
Garbage
</h1>
<p>
I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS I hate CSS
</p>
<button>
Example Button
</button>
</div>
</div>
</div>
但正如您所见,它会溢出并且没有按需要扩展蓝色部分。
有这方面经验的人能给我指出正确的方向吗?
谢谢。
【问题讨论】:
-
您对 CSS 的要求很高。对你来说不幸的是,它不能那样工作。即使使用 JS,您也很难实现这样的事情.. 一个简单的算法 (1) 将宽度固定为 1px (2) 填充所有空间 (3) 如果所有空间都覆盖正常,如果没有返回 (1) 和再试一次[将宽度增加1px](4)重复直到内容在里面
-
^ 这是一个幼稚的实现。更聪明的做法是根据您的内容采用与 1px 不同的步骤,但您还需要大量迭代,并且可能需要反复来回才能获得最佳价值。好吧,这可能是一个很好的练习,但显然超出了 CSS 范围