【问题标题】:Flex: Justify-content: space-around but full size on both ends?Flex: Justify-content: 空间环绕但两端全尺寸?
【发布时间】:2014-08-01 13:20:16
【问题描述】:

提示
假设我们想在一个灵活宽度的 div 内分配一行 inline-block 元素,我们认为第一个和最后一个元素远端的空间很重要,应该是间距的一部分。


标记

<div id="whole-thing">
<!-- inline-block element, width shrinks to widest row -->
    
    <div id="row1" class="row">
    <!-- block element (100% width) -->

        <div id="box1" class="box">
        <div id="box2" class="box">
        ..
    </div>
    <div id="row2" class="row">
        ..
    </div>
    ..
</div>

图片
IE。转成这样

进入这个:

在这种情况下,整个事物的宽度会缩小到第二行(最宽),因此该行上的任何框之间都没有间距。
但每个方框内的内容可能会有所不同,必要时间距应相应调整:


尝试

  1. justify-content: space-between(或其他具有相同效果的样式/解决方法):
    不是我们想要的。

  2. justify-content: space-around 应该是除了它分配空间with half-size spaces on either end 的事实之外,这又不是我们想要的,但几乎是..
    比较:

  3. js 破解。嗯,它有效,但我仍然希望有一种干净的方式来实现它。

  4. 在每行div的开头和结尾添加一个空div,然后使用space-between
    也有效,这就是我获得上述解决方案图片的方式。但是我最终会得到一堆空的 div。

我应该为此使用表格布局(在 css 中,而不是在标记中)?如果有,怎么做?

这让我哭了。我将感谢您为解决此问题提供任何帮助。

Here's a link to fiddle


Solution

Fiddle

放置 content:'' ::before::after 行(这些伪元素是选定的直接子元素)有效地实现了上面的第 4 点(space-between + 两端的空元素),没有多余的标记.

【问题讨论】:

  • +1 - 快速提问 - #2 (justify-content: space-around) 的图片是否与理想图片相同? (我一直在看,我看不出有什么区别。)
  • 一开始我也看不懂,但更容易看出整个东西的宽度是否比盒子的宽度宽。我已经更新了图片以使其更清晰:)

标签: css flexbox


【解决方案1】:

我同意这应该由 flexbox 本身涵盖。 目前我们只有空间,但它只是不完整的。 ATM 对您来说最好的解决方案是将行包装在两个伪元素中。基本上这是您的解决方案,但您无需触摸实际标记,因为它是生成的内容。

http://jsfiddle.net/5rmUj/

.row::before, .row::after
{
    content:'';display:block;
    width:0;height:0;
    overflow:hidden;
}

【讨论】:

  • 哦,这很整洁,非常感谢!在这种情况下,除了content:'' 之外的其他样式有什么意义?我尝试过类似的方法(firstbox::before + lastbox::after),但没有成功。但是,您的回答是否表明 ::before 和 ::after 作为所选元素的直接子元素(因此 space-between 技巧起作用)?
  • 我添加它们只是为了确保它们不占用任何空间。你永远不知道 UA 可以为他们的默认样式添加什么。但是现在您显然可以安全地删除它们,content 除外。同样是的,这两个伪元素名称具有误导性,它们应该重命名为foo::before-contentsfoo::after-contents,因为它们被放置在foo 中,而不是foo 的兄弟姐妹:P
  • 啊,我明白了!我还尝试在行上放置边框并再次显示 ::before/after 内容,实际上它们被包含在边框内。确实有误导性的名字,但再次感谢伙计!除了答案本身,还学到了很多东西:)
  • 这太棒了。我花了一点时间才意识到 justify-contentspace-between 的变化,但一旦我做到了,它就像一个魅力!我们如何请求修复规范?或者至少添加一个space-around-forreal 选项!!
猜你喜欢
  • 2017-08-14
  • 2021-12-11
  • 2017-01-28
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2022-01-15
相关资源
最近更新 更多