【问题标题】:Make container of inline blocks (that is inline-block on its own) to wrap its contents into 2 lines while resizing制作内联块的容器(本身就是内联块)以在调整大小时将其内容包装成 2 行
【发布时间】:2017-04-18 21:28:30
【问题描述】:

我面前有一个非常有趣的问题。我觉得用codepen来说明会更好:

https://codepen.io/BooleT/pen/bWdPWe/

在类名中,ib 表示“inline-block”,iib 表示“inner inline block”。

我创建了一些数字来说明我想要实现的目标。在接下来的 3 段中,我将参考这张专辑中的图片:

https://imgur.com/a/9CFAm

所以有三个内联块,其中一个实际上是其他三个内联块的容器:

我想要达到的效果是在我调整窗口大小的时候让容器的内容换成2行:

但我只设法将整个容器本身包装到第二行:

真的有办法实现我想要的吗?我尝试在外部内联块之间添加 nbsp 并将 white-space: nowrap 添加到 body 元素(并将其覆盖到容器的 white-space: normal ),但都没有奏效。 我知道我可以通过添加媒体查询或 js 来解决它,当我减小屏幕宽度时,它们只会减小容器的宽度(或最大宽度),但这似乎不是解决方案。我什至不知道我的真实布局中每个块的宽度。

我会尽量保持开放的心态,因为解决这个问题可能需要更改页面的整个布局,但我确实认为有一个。

【问题讨论】:

  • @Santi,不,我想你不明白我在做什么。我希望容器与左侧的两个块对齐。但与此同时,如果屏幕上没有足够的宽度将它们渲染成一条,我希望它的内部内联块渲染成两行,甚至三行。相反,我让整个容器跳到下一行。
  • 如果您可以使用 JavaScript,这应该不会太复杂。每次调整窗口大小时,您都可以将容器的大小调整为介于第三个外部块的可用宽度和最大内部块的宽度之间的任何值。
  • @11684 是的,我想过,但问题是我什至不知道容器内内容的实际宽度。当然,我可以使用相同的 javascript 来测量它,但是来吧...
  • 你能用弹性盒子吗?
  • @BooleT 那有什么问题?元素的渲染宽度在element.offsetWidth 中很容易获得。

标签: html css


【解决方案1】:

不是 flexbox 的粉丝——旧浏览器兼容性的负担仍然很重——这是我们为使右侧的容器占据所有剩余的水平空间所做的工作: Codepen

左边的固定大小的 div 被告知为float: left。 右侧的跨越 div 为display: block。 最小的内部 div 是display: inline-block

【讨论】:

  • 谢谢!这不是完美的解决方案,而是最接近的解决方案。我会在这个问题上睡觉,如果到早上没有更好的答案,我会将这个答案标记为最后一个。
  • 小幅改进:第三个div也要给overflow: hidden。这样,第三列中的项目将在视觉上保留在第三列内,而不是浮动在第一列下方。 codepen.io/anon/pen/jmbGag
【解决方案2】:

如果您可以使用 flexbox,那么这支笔:http://codepen.io/anon/pen/RVWwEP 似乎可以满足您的需求。不过请注意与 flexbox 一起使用的 compatibility caveats

为方便起见,我将display: flex; 放在body 上以创建顶级行,尽管@10nikov 的answer 绝对是更好的方法。

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2014-09-03
    • 2012-02-06
    相关资源
    最近更新 更多