【问题标题】:CSS selector and content property to add a space character between two inline-block elementsCSS 选择器和 content 属性在两个 inline-block 元素之间添加一个空格字符
【发布时间】:2016-12-11 19:48:42
【问题描述】:

我有一系列 tag 类的 span 元素(来自 bootstrap v4),它们彼此相邻,它们之间没有任何空格,因为它们来自 JSX 元素的 reacj.js 数组:

<span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><!-- ... -->

这是来自引导程序的 CSS:

.tag {
    display: inline-block;
    padding: 0.25em 0.4em;
    font-size: 75%;
    font-weight: bold;
    line-height: 1;
    color: #fff;
    text-align: center;
    white-space: nowrap;
    vertical-align: baseline;
    border-radius: 0.25rem;
}

这些元素可以在一个表格单元格中包含多行。我可以用一些 javascript (https://stackoverflow.com/a/23619085/3446439) 在中间添加一个空格字符,或者添加一个带有空格字符的包装元素(在 JSX 中只有一个根元素)。这两个选项都不能让我满意,我认为在 CSS 中应该很简单。

我尝试了以下方法,如果它有效,那将是理想的,但它不适用于内联块元素 (https://jsfiddle.net/qjbgzzLr/):

span.tag + span.tag::before {
    content: " ";
}

目前,我在span.tag + span.tag 上添加了margin-left,但这并不理想,因为每行中的第一个元素在其左侧都有一个边距。

有没有办法通过 CSS only 实现这一点?

【问题讨论】:

  • 看起来伪元素解决方案对我有用 - jsfiddle.net/vassuvw4
  • 伪元素解决方案不适用于 bootstrap jsfiddle.net/qjbgzzLr 将编辑问题
  • 所以您的文本周围确实有那些蓝色框,您希望它们之间有一个空格?
  • 是的,我希望它们之间有一个空格,但前提是它们在同一行文本中相邻。
  • 发现伪元素不起作用,因为它是inline-block

标签: css css-selectors pseudo-element css-content


【解决方案1】:

任何伪元素都将在 span 标签内,因此不会在标签之间创建水平空间。保证金是您唯一可用的解决方案。

我建议只为每个标签添加边距-right

span.tag {
  margin-right: .25em;
}

span.tag {
  margin-right: .25em;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.3/css/bootstrap.min.css" rel="stylesheet" />

<span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span
class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span
  class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span class="tag tag-primary">text</span><span
    class="tag tag-primary">text</span>

要从最终标签中删除边距,您可以使用

span:last-of-type {
margin-right:0;
}

【讨论】:

  • 好的,如果您添加 :last-of-typemargin-right 为 0,将接受此作为答案
  • 好的..但这并不是真正必要的答案。
  • 事实上,为了与在span 之间添加一个空格完全相同,每行的最后一个元素也应该没有右边距。在这种情况下这并不重要,但是在计算换行符时,边距将计入行长,如果它是空格字符则不会。 (如果我错了,请纠正我)
猜你喜欢
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
相关资源
最近更新 更多