【问题标题】:In CSS, how to place seperators between items if they are on the same line? [duplicate]在 CSS 中,如果项目在同一行,如何在项目之间放置分隔符? [复制]
【发布时间】:2020-09-21 21:59:30
【问题描述】:

我有一个块容器内的inline-block 元素列表。根据屏幕大小,这些元素可能会或可能不会覆盖多行。这正是我想要发生的事情。

但是,如果其中两个元素彼此相邻在同一行,我想在它们之间放置一个项目符号或其他分隔符。我知道我可以将+ 运算符与::before 伪元素结合使用,在元素之间放置分隔符。我使用这种方法的唯一问题是将分隔符伪元素放在连续行的开头,这是我不想要的。我只想要元素之间的分隔符 if 它们在同一行。

我怎样才能做到这一点?

编辑:另外,我的文字在这种情况下居中对齐

【问题讨论】:

  • 如何将+ 放在(::after 而不是::before)之后,并为:last-child 加上一个额外的样式,在最后一个之后抑制+ 符号?这会让你更接近吗?
  • 这会将分隔符放在行尾而不是开头,但情况大致相同。
  • 重复处理中心对齐
  • 哇,真是天才,谢谢!

标签: css


【解决方案1】:

我认为您可以通过一些巧妙的负边距和溢出隐藏来实现目标。

下面的 sn-p 为 inline-block 项目设置负边距,这具有将它们拉到容器边界框之外的效果,该边界框已将溢出设置为隐藏。然后,这些项目使用等效的左侧填充将内容推到右侧,因此它会出现在正常位置。

::before 伪元素仍然存在于该行的第一项,但它被容器剪裁了。

ul {
  overflow: hidden;

  /* boilerplate. not relevant to the question */
  list-style: none;
  margin: 0;
  padding: 0;
}

li {
  position: relative;
  display: inline-block;
  padding: 1rem;
  margin-left: -1rem;
}

li::before {
  content: '+';
  position: absolute;
  left: 0;
}
<ul>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
</ul>

【讨论】:

  • 这是一个聪明的想法,效果很好,但在我的情况下,项目是居中的,这仅适用于左对齐的文本...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 2016-03-09
相关资源
最近更新 更多