【问题标题】:Flex: Align two items side by side without max widthFlex:并排对齐两个项目,没有最大宽度
【发布时间】:2018-07-30 18:15:06
【问题描述】:

我不知道这是否可以使用 flex,但我需要的是一个并排有两个项目的列表,每个项目的宽度取决于内容。喜欢这里:

<div class="items">
  <div class="item">Item 1 with text</div>
  <div class="item">Item 2 with more text</div>
  <div class="item">Item 3 with some text</div>
  <div class="item">Item 4 without text</div>
  <div class="item">Item 5 lorem</div>
  <div class="item">Item 6 ipsum</div>
  <div class="item">Item 7 with lorem</div>
  <div class="item">Item 8 with ipsum</div>
</div>

.items {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
}

.item {
  align-self: flex-end;
  box-sizing: border-box;
  background: #e0ddd5;
  color: #171e42;
  padding: 10px;
}

.item:nth-child(even) {
  background-color: darkgrey;
}

我怎么能意识到无论我有多少 li 项目,总是有两个项目并排?没有限制宽度的外部容器。我不想使用浮动。是否有使用网格模板列的灵活解决方案?

像这样的最终结果(但向右对齐):

【问题讨论】:

  • 浮动有什么问题?这看起来是一个理想的地方。

标签: html css flexbox alignment


【解决方案1】:

你试过css列吗?

.items {
  columns: 2
}
<div class="items">
  <div class="item">Item 1 with text</div>
  <div class="item">Item 2 with more text</div>
  <div class="item">Item 3 with some text</div>
  <div class="item">Item 4 without text</div>
  <div class="item">Item 5 lorem</div>
  <div class="item">Item 6 ipsum</div>
  <div class="item">Item 7 with lorem</div>
  <div class="item">Item 8 with ipsum</div>
</div>

【讨论】:

  • 列项目不正确并排应该是项目1和项目2并排,每个项目的宽度取决于内容...
  • 你能提供一张你期望结果的图片吗?
  • 图片添加见顶部:)
  • 为什么不想使用浮点数?似乎是一个非常合理的解决方案。
  • 因为我一直在寻找一个没有任何浮动的智能解决方案......但如果没有其他方法我不得不使用它。
【解决方案2】:

如果float 被禁止,我有一个简单的解决方案给你! :)
我们将使用inlineblock:nth-child::after

我们去:

.item {
  display: inline;
}

.item:nth-child(2n)::after {
  display: block;
  content: '';
}
<div class="items">
  <div class="item">Item 1 with text</div>
  <div class="item">Item 2 with more text</div>
  <div class="item">Item 3 with some text</div>
  <div class="item">Item 4 without text</div>
  <div class="item">Item 5 lorem</div>
  <div class="item">Item 6 ipsum</div>
  <div class="item">Item 7 with lorem</div>
  <div class="item">Item 8 with ipsum</div>
</div>

简单,不是吗?

【讨论】:

  • 如果您向 .item 类添加填充,所有内容都会重叠。似乎浮动是这个的“最佳”......
【解决方案3】:

除了theAlexandrian's 答案之外,如果您可以添加内部包装器,这里有一个选项,您可以使用内部div,显示为inline-block,用于样式,例如填充等。

由于我们处理的是内联元素,它们和字符一样,可以在它们之间有一个空格。一种方法是使用负边距将其取出,这里有几个选项:

注意,由于空间宽度是基于字体的,负边距可能需要调整。


堆栈sn-p

.items {
  text-align: right;
}

.item {
  display: inline;
  margin-right: -4px;        /*  take out inline element space  */
}

.item div {
  display: inline-block;
  background: #e0ddd5;
  color: #171e42;
  padding: 10px;
}

.item:nth-child(even) div {
  background-color: darkgrey;
}

.item:nth-child(even)::after {
  content: '\A';
  white-space: pre;
}
<div class="items">
  <div class="item"><div> Item 1 with text </div></div>
  <div class="item"><div> Item 2 with more text </div></div>
  <div class="item"><div> Item 3 with some text </div></div>
  <div class="item"><div> Item 4 without text </div></div>
  <div class="item"><div> Item 5 lorem </div></div>
  <div class="item"><div> Item 6 ipsum </div></div>
  <div class="item"><div> Item 7 with lorem </div></div>
  <div class="item"><div> Item 8 with ipsum </div></div>
</div>

【讨论】:

  • 感谢这个例子!是的,我必须设置 font-size: 0 因为 inline-block ;)
  • 我会投赞成票,但我今天的投票配额已用完。我太慷慨了。也许明天:) 很好的修复
猜你喜欢
  • 2017-05-22
  • 2022-11-19
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
相关资源
最近更新 更多