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を使用したくない

オプションの要件:最後のスパンは親タグの最後の子にすることはできませんが、親タグの最後のスパンになります。スパンの間に他のタグはありません。


たぶん、あなたはテーブルの使用を検討すべきです。どんなデータが入るかによるtext
マダラのゴースト

spans の数は変数ですか?
thirtydot

@真の最後の手段はテーブルでなければなりません。
Tim Joyce、

span要素は、私がアクセス権を持たないWebサービスによって生成されます。したがって、マークアップを変更することはできません。ただし、CSSを完全に使用することができます
Dan

このような質問では、必要なブラウザーサポートを常に指定する必要があります。「IE7サポートが必要」は「Chromeのみを使用している」とはまったく異なる回答を受け取ります。
thirtydot

回答:


244

それを行う良い方法はこれです:

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

span前にaが付いているものすべてspanspanつまり、最初のものを除くすべて)にはがありmargin-left: 10pxます。

同様の質問に対するより詳細な回答を次に示します。ハックなしの要素間のセパレーター


10
これは良い解決策ですが、コンテナが複数行にまたがる場合は失敗します。
Savas Vedova 14

次のようなクラスでも機能します.sidebar-img + .sidebar-text { margin-left: 40px; }
。–パーサー

2
アイテムが次の行に折り返されるとき、どのように処理しますか?
thdoan

@thdoan:レイアウトなどに依存します。このようなものを試すことができます。
thirtydot

1
私はグリッドとグリッドギャップを使用したreddtoricのソリューションを好みます。
Alex Salomon

28

マージンまたはパディングを使用してください。

特定のケースでmargin:0 10pxは、2日にのみ使用できます<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以降でサポートされています。


すばらしい答えです、シモーネ、しかし最後をspan手動で指定せずに質問を解決していただけませんか?これはCSSの仕事である必要があります
Dan

ダウンボーターについて少し説明:@thirtydotの答えは素晴らしいですし、私はそれがとても好きですがmargin-left、最後spanので追加を生成します。
Simone

これは、「単語間隔」だunnededハック、あるのプロパティ:w3schools.com/cssref/pr_text_word-spacing.aspベンの答えをチェック
arieljuod

OPはスパン間にスペースを必要としていたため、インライン要素のソリューションを提供しても問題ありません。マージン/パディング/最初/最後のプロパティはここでは必要なく、複雑さを追加するだけです
arieljuod

実際、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
Alex Salomon

これは受け入れられる答えになるはずです。私はコメントが感謝の気持ちではないことを知っています。私はこれまで「フレックス」ディスプレイを使用していました。この「グリッド」のおかげで、親コンテナー自体からすべてがとても簡単になりました。まったく役に立たないようにするには、次の参照を追加します。これは、詳細を知りたい人に大いに役立ちます。css
Rohan Kumar

11

とても簡単です。

コードの1行だけで、最初の要素を除外して要素をスタイルできます。

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

クラスを操作することなく完了します。


1
これは完璧に動作します。スパン+スパンは機能しませんでしたが、スパン〜スパンは魅力のように機能します!ありがとう
juliusmh

私の場合、いくつかのスパンがあり、そのうちのいくつかには「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

要素をコンテナ内にラップし、CSSグリッド無料コースなどの新しいCSS3機能を使用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クラスの要素間にスペースを追加しようとしていました。私はあなたの例を使ってそのためのコードをビルドしました。魅力のように働いた。ありがとうございました!
エリアスEstatisticsEU 2018年

1

または、マージンを設定してオーバーライドするのではなく、次のコンボですぐに適切に設定できます。

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

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

正解です。制限は、:first-of-typeおよび:last-of-typeCSSセレクターのブラウザーサポートです。
Dan

...また、not式ブラウザーのサポートも確認してください
Dan

1
@Dan それは実際に素晴らしいです、去年のブラウザすべてがカバーされています。しかし、私は認めなければなりません。yzojaのソリューションはさらに賢いです:)
jalooc 14年

このソリューションは、要素間の境界線をセパレーターとして含める場合(たとえば、ナビゲーションのULのように)、間隔の中央に境界線を適切に配置するため、優れています。
ミール

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タイプに関係なく、を持つ各要素は、同じ周囲マージンを受け取ります。

ここに画像の説明を入力してください

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

項目を一列に整列させたいが、最初の要素がの左端に接してcontainerいて、他のすべての要素が等間隔になっている場合は、次のように使用できます。

ここに画像の説明を入力してください

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

2
このコードは質問に答えることがありますが、このコードが質問に答える理由や方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
β.εηοιτ.βε
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.