仅使用CSS在HTML元素之间添加空间


105

我有几个相同的HTML元素相继出现:

<span>1</span>
<span>2</span>
<span>3</span>

我正在寻找使用CSS在元素之间添加空间的最佳方法

[no space]  [1]  [space 10px]  [2]  [space 10px]  [3]  [no space]

另外:

  • 请写下您收据的浏览器兼容性

更新

看来我不清楚。我不想使用任何其他HTML标记,例如

<span></span>  <span></span>  <span class="last_span"></span>

我不想用桌子

我希望CSS可以自动定位第一个和最后一个跨度

我不想使用JavaScript

可选要求:last span可以不是父标记的LAST LAST LD,但是它将是父标记的LAST SPAN。跨度之间没有任何其他标签。


也许您应该考虑使用表格。取决于要输入的数据text
Madara的Ghost

spans 的数量是否可变?
2011年

@Truth最后的选择应该是桌子。
Tim Joyce

span元件通过Web服务,我没有获得产生。所以我不能更改标记。但是,我可以完全使用CSS

遇到类似这样的问题,您应该始终指定所需的浏览器支持。“我需要IE7支持”将收到与“我仅使用Chrome”完全不同的答案。
2011年

Answers:


244

一个好的方法是:

span + span {
    margin-left: 10px;
}

每个span前面都有一个span(因此,span除第一个之外的每个)都具有margin-left: 10px

这是一个类似问题的更详细的答案:元素之间的分隔符,没有hack


10
这是一个很好的解决方案,但是如果您的容器将跨越多行,则会失败。
Savas Vedova 2014年

它也可用于类,如下所示:.sidebar-img + .sidebar-text { margin-left: 40px; }
parsecer

2
当项目换行到下一行时,如何处理?
thdoan

@thdoan:这取决于您的布局等。您可以尝试这样的操作
thirtydot

1
我更喜欢reddtoric使用grid和grid-gap的解决方案。
Alex Salomon

28

只需使用边距或填充。

在您的特定情况下,您margin:0 10px只能在2nd上使用<span>

更新

这是一个不错的CSS3解决方案(jsFiddle):

span {
    margin: 0 10px;
}

span:first-of-type {
    margin-left: 0;
}

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

高级元素选择使用选择喜欢:nth-child():last-child:first-of-type等因为Internet Explorer 9的支持。


Simone,您的回答很好,但是您可以不span手动指定最后一个就解决这个问题吗?这应该是CSS的工作
丹,

需要澄清一点的人:@thirtydot的回答很棒,我非常喜欢,但是margin-left最后一个产生了额外的回答span,这并不是OP想要的。
西蒙妮(Simone)

这是一个无用的黑客,它是以下各项的“单词间隔”属性:w3schools.com/cssref/pr_text_word-spacing.asp检查Ben的答案
arieljuod 2013年

OP需要跨度之间的空间,因此可以为内联元素提供解决方案,此处不需要margin / padding / first / last属性,只会增加复杂性
arieljuod 2013年

实际上,OP表示他将使用spans和divs(它们是块元素)。如果将divs 定义为内联元素,则您的解决方案仍然有效……
Simone

16

将这些规则添加到父容器:

display: grid
grid-auto-flow: column
grid-column-gap: 10px

良好参考:https : //cssreference.io/

浏览器兼容性:https : //gridbyexample.com/browsers/


2
grid-auto-columns="max-content"可能也有用。它将使网格项目的大小与内容匹配。另外,浏览器兼容性也不再是问题:caniuse.com/#feat=css-grid
Alex Salomon

这应该是公认的答案。我知道评论不是要谢谢,我直到现在才使用“ flex”显示,而这个“ grid”的东西使得从父容器本身变得如此容易!为了避免完全没有用,请添加以下参考,这对希望了解更多信息的人有很大帮助: css-tricks.com/snippets/css/complete-guide-grid
Rohan Kumar

11

太简单了

您可以在一行代码中使用排除第一个元素的样式:

span ~ span {
padding-left: 10px;
}

并完成,无需任何类操作。


1
这一项工作表现。span + span没有工作,但是span〜span就像一个魅力!谢谢
juliusmh 16-4-24

就我而言,我有几个范围,其中一些可能不包含“ Showing”类,所以我需要的是span.Showing ~ span.Showing代替span.Showing + span.Showing~是通用的同级选择器,其中一个不需要直接跟随另一个。
埃里克

10

您可以利用以下事实:span内联元素

span{
     word-spacing:10px;
}

但是,如果您的跨度中有多个文字,则此解决方案将失效



3

您可以这样写:

span{
 margin-left:10px;
}
span:first-child{
 margin-left:0;
}

2

<span>是一个内联元素,因此您不能在它们之间留出间距而不会使其成为块级。试试这个

卧式

span{
    margin-right: 10px;
    float: left;
}

垂直

span{
    margin-bottom: 10px;
}

与所有浏览器兼容。


2

您应该将元素包装在容器中,然后使用CSS3的新功能,如css gridfree course,然后使用grid-gap:value针对特定问题而创建的功能

span{
  border:1px solid red;
}
.inRow{
  display:grid;
  grid-template-columns:repeat(auto-fill,auto);
  grid-gap:10px /*This add space between elements, only works on grid items*/
}
.inColumn{
  display:grid;
  grid-template-rows:repeat(auto-fill,auto);
  grid-gap:15px;
}
<div class="inrow">
  <span>1</span>
  <span>2</span>
  <span>3</span>
</div>
<div class="inColumn">
  <span>4</span>
  <span>5</span>
  <span>6</span>
</div>


我想使用CSS样式在div类的元素之间添加空间。我用您的示例为此构建了代码。像魅力一样工作。谢谢!
Elias EstatisticsEU

1

或者,您可以使用以下组合直接设置适当的边距,而不是设置边距并覆盖它:

span:not(:first-of-type) {
    margin-left:  5px;
}

span:not(:last-of-type) {
    margin-right: 5px;
}

回答得好,限制是浏览器的支持:first-of-type:last-of-typeCSS选择器。

...还请检查是否支持not表达式浏览器
2014年

1
@丹实际上是伟大的,所有过去数年的浏览器都包括在内。但是我必须承认,yzoja的解决方案甚至更聪明:)
jalooc 2014年

在特定情况下,此解决方案是优越的,因为您还将在元素之间包括边框作为分隔符(例如,在nav中是UL),因为它将边界正确地放置在间距的中间。
2015年

0
span.middle {
    margin: 0 10px 0 10px; /*top right bottom left */
}

<span>text</span> <span class="middle">text</span> <span>text</span>

0

如果要对齐各种项目,并且希望所有面都具有相同的边距,则可以使用以下内容。container不论类型如何,withing的每个元素都会获得相同的周围边距。

在此处输入图片说明

.container {
  display: flex;
}
.container > * {
  margin: 5px;
}

如果您希望将项目连续对齐,但第一个元素接触的最左边缘container,并且所有其他元素均等间距,则可以使用以下方法:

在此处输入图片说明

.container {
  display: flex;
}
.container > :first-child {
  margin-right: 5px;
}
.container > *:not(:first-child) {
  margin: 5px;
}

2
尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以改善其长期价值。
β.εηοιτ.βε
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.