Yalnızca CSS kullanarak HTML öğeleri arasında boşluk ekleyin


109

Birbiri ardına giden birkaç aynı HTML öğem var:

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

Yalnızca CSS kullanan öğeler ARASINA boşluk eklemenin en iyi yolunu arıyorum

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

Bunlara ek olarak:

  • Lütfen faturalarınızın tarayıcı uyumluluğunu not edin

GÜNCELLEME

Anlaşılan ben belirsizmişim. Gibi HERHANGİ BİR EK HTML İŞARETİ kullanmak istemiyorum

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

Masa kullanmak istemiyorum

İlk ve son aralığın CSS tarafından otomatik olarak hedeflenmesini istiyorum

Javascript kullanmak istemiyorum

İsteğe bağlı gereklilik: son aralık, üst etiketin SON ÇOCUK OLMAYACAKTIR, ancak üst etiketin SON ARALIĞI olacaktır. Aralıkların arasında başka etiket yoktur.


Belki bir masa kullanmayı düşünmelisiniz. Hangi verilerin girdiğine bağlıtext
Madara's Ghost

Sayısı spandeğişken mi?
otuz nokta

@Gerçek son çare tablolar olmalıdır.
Tim Joyce

spanElementler Ben erişimi yok web hizmeti tarafından oluşturulur. Bu yüzden işaretlemeyi değiştiremiyorum. Bununla birlikte, CSS'yi tam olarak kullanabilirim
Dan

Bunun gibi sorularla her zaman ihtiyacınız olan tarayıcı desteğini belirtmelisiniz. "IE7 desteğine ihtiyacım var", "Yalnızca Chrome kullanıyorum" sorusuna tamamen farklı yanıtlar alacak.
otuz nokta

Yanıtlar:


250

Bunu yapmanın iyi bir yolu şudur:

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

Her birinin spanönünde bir span(yani, spanilk hariç her biri ) olacaktır margin-left: 10px.

İşte benzer bir soruya daha ayrıntılı bir cevap: Kesintisiz öğeler arasında ayırıcılar


10
Bu güzel bir çözümdür, ancak kapsayıcınız birden çok satıra yayılırsa başarısız olur.
Savas Vedova

Ayrıca aşağıdaki gibi sınıflarla da çalışır:.sidebar-img + .sidebar-text { margin-left: 40px; }
parsecer

2
Öğeler bir sonraki satıra geçtiğinde nasıl başa çıkarsınız?
thdoan

@thdoan: Bu sizin vb düzeni, Sen gibi bir şey deneyebilirsiniz bağlıdır bu .
otuz nokta

1
Reddtoric'in grid ve grid-gap çözümünü tercih ederim.
Alex Salomon

29

Sadece kenar boşluğu veya dolgu kullanın.

Özel durumunuzda, margin:0 10pxyalnızca 2'de kullanabilirsiniz<span> .

GÜNCELLEME

İşte güzel bir CSS3 çözümü ( jsFiddle ):

span {
    margin: 0 10px;
}

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

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

Gelişmiş eleman seçimi kullanarak seçiciler gibi :nth-child(), :last-child, :first-of-typevb Internet Explorer 9'da beri desteklenmektedir.


Harika bir cevabın var Simone, ama son soruyu spanmanuel olarak belirtmeden soruyu çözebilir misin? Bu CSS'nin işi olmalı
Dan

bu unneded hack, bu "word-spacing" özelliğidir: w3schools.com/cssref/pr_text_word-spacing.asp check Ben'in cevabını kontrol et
arieljuod

OP aralıklar arasında boşluk istedi, bu nedenle satır içi öğeler için bir çözüm vermekte sorun yok, burada kenar boşluğu / dolgu / ilk / son özellikler gerekli değildir ve yalnızca karmaşıklık ekler
arieljuod

Aslında OP, spans ve divs'yi (blok öğelerdir) kullanacağını söyledi . Eğer divURL'leri satır içi öğeler olarak tanımlarsanız çözümünüz yine de geçerlidir ...
Simone

16

şu kuralları üst kapsayıcıya ekleyin:

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

İyi referans: https://cssreference.io/

Tarayıcı uyumluluğu: https://gridbyexample.com/browsers/


2
grid-auto-columns="max-content"ayrıca faydalı olabilir. Izgara öğesinin boyutunun içeriğe uymasını sağlayacaktır. Ayrıca, tarayıcı uyumluluğu artık sorun olmamalı: caniuse.com/#feat=css-grid
Alex Salomon

Kabul edilen cevap bu olmalıdır. Yorumların teşekkür için olmadığını biliyorum, şimdiye kadar sadece 'esnek' ekranı kullanıyordum ve bu 'ızgara' özelliği her şeyi ana kapsayıcıdan çok kolaylaştırıyor! Tamamen yararsız bırakmamak için, daha fazla bilgi edinmek isteyenler için çok yardımcı olacak şu referansı eklersiniz: css-tricks.com/snippets/css/complete-guide-grid
Rohan Kumar

11

Öğeleri, yalnızca tek bir kod satırında birincisini hariç tutarak biçimlendirebilirsiniz:

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

Herhangi bir sınıfı değiştirmenize gerek yok.


1
Bu mükemmel çalışıyor. span + span işe yaramadı ama span ~ span bir cazibe gibi çalışıyor! Teşekkürler
juliusmh

Benim durumumda, bazıları "Gösterilen" sınıfını içermeyen birkaç aralık var, yani ihtiyacım olan span.Showing ~ span.Showingbunun yerine span.Showing + span.Showing. ~birinin diğerini doğrudan takip etmesine gerek olmayan genel kardeş seçicidir.
Eric

10

spanSatır içi bir öğe olduğu gerçeğinden yararlanabilirsiniz

span{
     word-spacing:10px;
}

Ancak, aralığınızda birden fazla metin kelimeniz varsa bu çözüm bozulacaktır.



3

Şöyle yazabilirsiniz:

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

2

<span>satır içi bir öğedir, bu nedenle blok düzeyi yapmadan bunlar üzerinde boşluk bırakamazsınız. Bunu dene

Yatay

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

Dikey

span{
    margin-bottom: 10px;
}

Tüm tarayıcılarla uyumludur.


2

Öğelerinizi bir kabın içine sarmalı, ardından css ızgarası , ücretsiz kurs gibi yeni CSS3 özelliklerini kullanmalı ve daha sonra grid-gap:valueözel sorununuz için oluşturulmuş olanı kullanmalısınız .

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 stilini kullanarak bir div sınıfının öğeleri arasına boşluk eklemek istiyordum. Bunun için kodumu oluşturmak için örneğinizi kullandım. Bir cazibe gibi çalıştı. Teşekkür ederim!
Elias EstatisticsEU

1

Veya marjı ayarlamak ve onu geçersiz kılmak yerine, aşağıdaki combo ile hemen doğru şekilde ayarlayabilirsiniz:

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

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

İyi yanıt, kısıtlama, tarayıcı desteği :first-of-typeve :last-of-typeCSS seçicileridir.
Dan

... ayrıca notifade tarayıcı desteğini kontrol edin
Dan

1
@Dan , gerçekten harika, son yıllardaki tarayıcıların tümü kapsanmıştır. Ama itiraf etmeliyim ki, yzoja'nın çözümü daha da akıllıdır :)
jalooc

Bu çözüm, belirli bir durumda, ayırıcı olarak öğeler arasındaki sınırları da dahil edeceğinizden daha üstündür (örneğin, bir gezinmedeki UL gibi), çünkü sınırı, aralığın ortasına düzgün bir şekilde yerleştirecektir.
Mir

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

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

0

Çeşitli öğeleri hizalamak istiyorsanız ve her tarafta aynı kenar boşluğuna sahip olmak istiyorsanız, aşağıdakileri kullanabilirsiniz. Türden containerbağımsız olarak her bir öğe , aynı çevreleyen marjı alacaktır.

görüntü açıklamasını buraya girin

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

Öğeleri arka arkaya hizalamak, ancak ilk öğenin en sol kenarına dokunmasını containerve diğer tüm öğelerin eşit aralıklarla yerleştirilmesini istiyorsanız, bunu kullanabilirsiniz:

görüntü açıklamasını buraya girin

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

2
Bu kod soruyu yanıtlayabilirken, bu kodun soruyu neden ve / veya nasıl yanıtladığına ilişkin ek bağlam sağlamak, uzun vadeli değerini artırır.
β.εηοιτ.βε
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.