CSS 在 <dd> 之间添加逗号
CSS to add commas between <dd>s
迄今为止的最佳尝试
dd { display: inline; margin: 0; }
dd + dd::before {
content: ', ';
}
<dl>
<dt>One</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
<dt>Two</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</dl>
我想使用 CSS 伪元素在 <dd>
元素之间添加逗号。上述尝试的唯一问题是每个逗号前都有一个 space。
当我使用 <li>
s 执行此操作时,我可以使用 ::after
伪元素和目标 li:last-of-type
来删除最后一项的逗号,但我想不通在我的示例中找到一种方法来定位最后一个 <dd>
。我认为提议的 has
选择器可能有所帮助(例如 dd:has(+ dd)
)。 CSS3 中有任何解决方法吗?
或者有什么好的方法可以去掉 space?如果必须的话,我会使用负边距将逗号拉回前面的单词。
您在元素之间看到的 space 由父元素的 font-size
决定。内联元素尊重标记中的白色space。
One way to remove this would be to set the parent element's font-size
to 0
, and then reset the children element's font-size
. See this answer 替代方法。
dl {
font-size: 0;
}
dd, dt {
font-size: 16px;
}
dd {
display: inline;
margin: 0;
}
dd + dd::before {
content: ', ';
}
<dl>
<dt>One</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
<dt>Two</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</dl>
您可以对 em
中的伪元素应用负左边距。 -0.2em
似乎效果不错:
dd, dt {
font: 16px verdana;
}
dd {
display: inline;
margin: 0;
}
dd+dd::before {
content: ', ';
margin-left: -0.2em;
}
<dl>
<dt>One</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
<dt>Two</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</dl>
在元素前加上 ', '
对我来说似乎是错误的。恕我直言,它应该在元素之后,但当然不在最后一个元素上。
接下来,首先删除 space 然后再添加,这对我来说似乎有点奇怪。
如何让 space 保持原样并在使用 ::after
.
的元素后简单地添加一个逗号?
你 运行 遇到的问题是最后一个元素仍然包含一个逗号,但是你没有遇到 ,
漂浮在某处的问题,作为奖励,它就在它所在的地方应该是。
所以基本上您不希望最后一个元素匹配。幸运的是,我们有一些东西可以用于此。
通过使用 :not(:last-child)
可以定位除括号内使用的选择器之外的所有元素。
dd, dt {
font: 16px verdana;
}
dd {
display: inline;
margin: 0;
}
dd:not(:last-of-type)::after {
content: ',';
}
<dl>
<div class="group">
<dt>One</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</div>
<div class="group">
<dt>Two</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</div>
</dl>
迄今为止的最佳尝试
dd { display: inline; margin: 0; }
dd + dd::before {
content: ', ';
}
<dl>
<dt>One</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
<dt>Two</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</dl>
我想使用 CSS 伪元素在 <dd>
元素之间添加逗号。上述尝试的唯一问题是每个逗号前都有一个 space。
当我使用 <li>
s 执行此操作时,我可以使用 ::after
伪元素和目标 li:last-of-type
来删除最后一项的逗号,但我想不通在我的示例中找到一种方法来定位最后一个 <dd>
。我认为提议的 has
选择器可能有所帮助(例如 dd:has(+ dd)
)。 CSS3 中有任何解决方法吗?
或者有什么好的方法可以去掉 space?如果必须的话,我会使用负边距将逗号拉回前面的单词。
您在元素之间看到的 space 由父元素的 font-size
决定。内联元素尊重标记中的白色space。
One way to remove this would be to set the parent element's font-size
to 0
, and then reset the children element's font-size
. See this answer 替代方法。
dl {
font-size: 0;
}
dd, dt {
font-size: 16px;
}
dd {
display: inline;
margin: 0;
}
dd + dd::before {
content: ', ';
}
<dl>
<dt>One</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
<dt>Two</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</dl>
您可以对 em
中的伪元素应用负左边距。 -0.2em
似乎效果不错:
dd, dt {
font: 16px verdana;
}
dd {
display: inline;
margin: 0;
}
dd+dd::before {
content: ', ';
margin-left: -0.2em;
}
<dl>
<dt>One</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
<dt>Two</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</dl>
在元素前加上 ', '
对我来说似乎是错误的。恕我直言,它应该在元素之后,但当然不在最后一个元素上。
接下来,首先删除 space 然后再添加,这对我来说似乎有点奇怪。
如何让 space 保持原样并在使用 ::after
.
你 运行 遇到的问题是最后一个元素仍然包含一个逗号,但是你没有遇到 ,
漂浮在某处的问题,作为奖励,它就在它所在的地方应该是。
所以基本上您不希望最后一个元素匹配。幸运的是,我们有一些东西可以用于此。
通过使用 :not(:last-child)
可以定位除括号内使用的选择器之外的所有元素。
dd, dt {
font: 16px verdana;
}
dd {
display: inline;
margin: 0;
}
dd:not(:last-of-type)::after {
content: ',';
}
<dl>
<div class="group">
<dt>One</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</div>
<div class="group">
<dt>Two</dt>
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</div>
</dl>