【问题标题】:How to use CSS in order to make a container float on the right side with prioritization for vertical height如何使用 CSS 使容器浮动在右侧并优先考虑垂直高度
【发布时间】:2021-01-30 20:32:51
【问题描述】:

我正在尝试在 CSS 中创建以下设置,但没有运气:https://gyazo.com/42e85e7bd7823839bf738eece8c3e588

我基本上想要一个最大高度为 300px 的容器,然后让这个红色框为空白空间,并让蓝色框中的一些元数据浮动在这个 300px 容器的右侧。我的目标是让蓝色容器占据所有垂直空间,然后在需要更多空间时水平扩展。如果容器中的内容很少,那么它将具有较低的宽度,但如果可能的话,仍会使用所有 300 像素的高度。如果有更多内容(例如在屏幕截图中的第三个示例中),则它会水平扩展直到需要为止。

所以它应该:

  1. 尝试使用所有可用的垂直空间将内容推入蓝色框中(假设您开始时宽度为 1px)
  2. 扩展蓝色的水平宽度,因为它垂直方向的内容空间不足(例如,所有 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 范围

标签: html css flexbox


【解决方案1】:

只需设置蓝色框的高度即可。无需做任何其他事情。还是我误会了?

.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;
  height: 300px;
}
<div class="container">
  <div class="box1">
    
  </div>
  <div class="box2">
    <div class="fakeBox">
      <h1>
        Garbage
      </h1>
      <p>
        I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS I love CSS 
      </p>
      <button>
        Example Button
      </button>
    </div>
  </div>
</div>

【讨论】:

  • 嘿。感谢您及时的回复。我遇到的另一个问题是我希望它首先对垂直空间贪婪。所以我希望它首先尝试使用蓝色容器中可用的所有垂直空间,然后只有在所有垂直空间都消失时才开始水平扩展。我将在我最初的问题中澄清这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多