Satır sonlarını kullanırken HTML öğeleri arasındaki boşlukları kaldırma


110

Yaklaşık 10 imgsaniyelik satır içeren bir sayfam var . HTML'nin okunabilirliği için, her imgetiket arasına bir satır sonu koymak istiyorum , ancak bunu yapmak, resimler arasında istemediğim bir boşluk oluşturuyor. Etiketlerin arasında değil ortasında kırılmaktan başka yapabileceğim bir şey var mı?

Düzenleme: Şimdiye kadar sahip olduğum şeyin bir ekran görüntüsü. Kitap sırtı resimlerinin PHP kullanarak rastgele kombinasyonlarda görüntülenmesini istiyorum. Bu yüzden ayrı imgetiketlere ihtiyacım var .

Ekran görüntüsü


Smarty kullanıyorsanız , kullanabilirsiniz {strip}. Diğer şablon motorlarının benzer etiketleri olmalıdır.
kullanıcı

Yanıtlar:


68

CSS kullanabilirsin. Görüntülerin üzerinde gösterimi ayarlama: blok veya float: solda kendi aralığınızı tanımlamanıza ve HTML'yi istediğiniz gibi biçimlendirmenize izin verir, ancak mizanpajı uygun olabilecek veya olmayabilecek şekillerde etkiler.

Aksi takdirde, satır içi içerikle uğraşıyorsunuzdur, bu nedenle HTML biçimlendirmesi önemlidir - resimler etkili bir şekilde kelimeler gibi davranacaktır.


Bu benim en sevdiğim yaklaşım. Yine de, daha sonra alt öğeler için bir yazı tipi boyutu tanımlamayı unutursam, bazen metnin neden görünmediğini merak etmeye yol açabilir.
Astrotim

159

Bu eskiyse üzgünüm ama bir çözüm buldum.

font-size0'a ayarlamayı deneyin. Böylece, resimler arasındaki beyaz boşluklar genişlik olarak 0 olur ve resimler etkilenmez.

Bunun tüm tarayıcılarda çalışıp çalışmadığını bilmiyorum, ancak Chromium ve bazı <li>öğelerle denedim display: inline-block;.


9
Bunun Mac OSX'te Firefox ve Safari'de ve Chrome'da çalıştığını doğrulayabilirim. Bunun en iyi yanıt olmadığına inanamıyorum. Ne harika bir fikir, bence soruyu gerçekten cevaplayan tek fikir / soruyu sorana aradıklarını veriyor.
Doug

16
Bunun dışında, embirimleri kullanan düzenleri bozacaktır .
devius

6
font-size0 olarak ayarlamak , embirimi bu noktadan sonra ölçeklenebilir tasarım için kullanamayacağınız anlamına gelir . Bazı insanlar için bu cevap işe yaramaz.
LB

3
Bunun işe yaramayabileceği diğer örneklerle ilgili bazı ayrıntılar için Chris Coyier'in sayfasındaki "Yazı tipi boyutunu sıfıra ayarla" bölümündeki analizine de bakardım
Chris Kempen

Ve artık flexbox'a sahip olduğumuza göre, bunların hepsi artık gerekli değil :) Nihayet iyi bir yerleşim
opatut

70

Yorumları kullanabilirsiniz.

 <img src="..." alt="..."><!--
 --><img src="..." alt="..."><!--
 --><img src="..." alt="..."><!--
 --><img src="..." alt="...">

Yine de bir dizi görüntünün yan yana olmasının anlamsallığı konusunda endişelenirdim.


1
İyi bir fikir. Görüntüler dekorasyon içindir - anlamsal olarak önemli mi?
Skilldrick

13
Dekoratif resimler HTML'ye değil CSS'ye aittir!
Konrad Rudolph

11
Görüntülerin ne kadar dekoratif olduğuna bağlı. Güzel bir sınır mı? Bu CSS'de olmalıdır. Bir sitede uçmakla ilgili bir dizi küçük uçak fotoğrafı mı? Muhtemelen metin eşdeğeri gerektirmeyen içerik.
Quentin

1
@ MihaiAlexandruBîrsan - mirasınızı kaybettiğiniz font-size:0için birçok durumda korkunçtur. evet, rembirimleri kullanabilirsiniz , ancak yine de, medya sorgularınız o öğe için çalışmayı durduracak ve hepsini değiştirmeniz gerekecek
vsync

1
Bu küçük numarayı yeni keşfettim, sonra cevabınızı gördüm. Biraz sorun ama HTML'nin tek bir uzun satırda toplanmamasının uzun bir yolu var.
Nick Bedford

26

CSS ile yaklaşık şeyler yapmadan iki seçeneğiniz var. İlk seçenek, yalnızca boşluk içeren alt öğeleri etiketlerden kaldırmak için javascript kullanmaktır. Yine de daha güzel bir seçenek, etiketlerin içinde bir anlamı olmadan boşlukların var olabileceği gerçeğini kullanmaktır. Şöyle:

<div id="[divContainer_Id]"
    ><img src="[image1_url]" alt="img1"
    /><img src="[image2_url]" alt="img2"
    /><img src="[image3_url]" alt="img3"
    /><img src="[image4_url]" alt="img4"
    /><img src="[image5_url]" alt="img5"
    /><img src="[image6_url]" alt="img6"
/></div>

2
Aslında bu stili tercih ediyorum. Evet, çirkin ama her türlü yan etkiye sahip olabilecek CSS korsanlığı gerektirmez.
Stijn de Witt

24

Flexbox bu eski sorunu kolayca çözebilir:

.image-wrapper {
  display: flex;
}

Flexbox hakkında daha fazla bilgi: https://css-tricks.com/snippets/css/a-guide-to-flexbox/


4
Günümüzde Flexbox, en temiz ve en kolay çözümdür. Sanırım buradaki en iyi cevap bu olmalı. { flex-direction: row; flex-wrap: nowrap; }daha fazla okunabilirlik için eklenebilir.
Robert Kusznier

2
Bu en modern cevap
Nate

@RobertKusznier Belirtmeye katılmıyorum flex-direction: rowve flex-wrap: nowrapzaten onlar varsayılandır. Basit tutmak genellikle en iyisidir! Ayrıca, çoğu zaman kullanıcı aslında isteyecektir flex-wrap: wrap.
Marc. 2377

13

Çok fazla araştırma, deneme ve yanılmadan sonra, iyi çalışıyor gibi görünen ve yazı tipi boyutunu alt öğeler üzerinde manuel olarak yeniden ayarlamayı gerektirmeyen bir yol buldum, bu da tüm belgede standartlaştırılmış bir em yazı tipi boyutuna sahip olmama izin veriyor .

Firefox'ta bu oldukça basittir, sadece word-spacing: -1emana öğeye göre ayarlanır . Bazı nedenlerden dolayı, Chrome bunu görmezden geliyor (ve test ettiğim kadarıyla, değerden bağımsız olarak kelime aralığını yok sayıyor). Bunun yanında letter-spacing: -.31emebeveyne ve letter-spacing: normalçocuklara da ekliyorum . Bir em'in bu fraksiyonu, YALNIZCA em boyutunuz standartlaştırılmışsa alanın boyutudur . Buna karşılık Firefox, harf aralığı için negatif değerleri göz ardı eder, böylece kelime aralığına eklemez.

Bunu Firefox 13 (android üzerinde win / ubuntu, 14), Google Chrome 20 (win / ubuntu), Android Tarayıcısı ICS 4.0.4 ve IE 9'da test ettim. Ve bunun Safari'de de çalışabileceğini söylemeye can atıyorum. ama gerçekten bilmiyorum ...

İşte bir demo http://jsbin.com/acucam


1
Profesyonel görüşüme göre en iyi çözüm budur. Masaüstünde Safari 5 ve 6'da ve ikinci nesil iPad'de Mobil Safari'de test ettim. İşe yarıyor, ancak bir çocukta harf aralığını sıfırlarken ayrıca sözcük aralığı eklemeniz gerekir: normal; Safari bunu onurlandırdığı gibi. Harika iş, Flatline!
hndcrftd

2
word-spacing: -1emTarzı Chrome geçerli sürümünde kelimeleri örtüşme yapmak gibi görünüyor.
Sam

@Sam, inanılmaz derecede uzun gecikme için özür dilerim: PI, kelime aralığını 0,05 olarak değiştirdi, firefox'un yeni sürümlerinin bu özelliği daha az önemsemediği görülüyor, harf aralığı yeterli. Şu anda Ubuntu'dayım, bu yüzden onu pencerelerde test etmedim. İşte güncellenmiş sürüm jsbin.com/acucam/14
Flatline

1
Bunu farklı yazı tipleriyle denediniz mi? Bu inanılmaz derecede alışılmadık görünüyor ve çok, çok muhtemel.
dudewad

12

Çok geç kaldım (sadece bir soru sordum ve ilgili bölümde zayıf buldum) ama sanırım display: table-cell; daha iyi bir çözüm

<style>
img {display:table-cell;}
</style>

<img src="img1.gif">
<img src="img2.gif">
<img src="img3.gif">

tek sorun, IE 7 ve Önceki sürümlerde çalışmayacak, ancak bu bir hack ile düzeltilebilir


Bu iyidir, ancak tek kusur, öğelerin üst öğesi text-align: center'a sahipse merkezde kayma yeteneklerini yitirmesidir;
Mladen Janjetovic

İşe yarıyor, ancak img'leri sağ tarafa basitçe text-align: right (ebeveyn üzerinde ve float olmadan) ile hizalamak isteyebilirsiniz - Çözüm ne yazık ki uymuyor.
Herr_Hansen

2
İşe yarayabilir, ancak bazı ekran okuyucular display: table-*anlamsal olarak yorumluyor ve kullanıcı bir masada geziniyormuş gibi okuyor.
Tarka

5

Bu sorunu çözmek için aşağıdaki kod gibi CSS stil sayfası kullanın.

[divContainer_Id] img
{
    display:block;
    float:left;
    border:0;
}

alt metin http://rabu4g.bay.livefilestore.com/y1pWoAOBMiLumd2iQTAreYjQCDIkHImh2g_b2g9k4AnxtDNrCjvzL6bK7skG8QKMRNWkMG7N8e5Xm7pgle3tdRJdPLy/Capture

Firefox 3.5 Final'de test ediliyor!

PS. html'niz bunu beğenmelidir.

<div id="[divContainer_Id]">
    <img src="[image1_url]" alt="img1" />
    <img src="[image2_url]" alt="img2" />
    <img src="[image3_url]" alt="img3" />
    <img src="[image4_url]" alt="img4" />
    <img src="[image5_url]" alt="img5" />
    <img src="[image6_url]" alt="img6" />
</div>

"Sütun" değil, "satır" dedi ve HTML örneğiniz geçersiz.
Quentin

3
'Sütunlar'da birkaç resim içeren tek bir satır istiyor. Bu yanıt aslında sorunu çözmektedir, ancak "display: block" gereksizdir.
Bobby Jack

3

Etiketlerin arasında değil ortasında kırılmaktan başka yapabileceğim bir şey var mı?

Pek sayılmaz. Yana <img>gereksiz boşluklar (ve satır sonu) kesilmiş olacak ama tek alanlar - s içi unsurları, bu elemanların arasındaki boşluklar doğru metin boşluklar olarak HTML oluşturucu tarafından kabul edilmektedir olacak bir metin elemanının karakter verileri içine sokulabilir.

<img>Etiketlerin konumlandırılması kesinlikle bunu önleyebilir, ancak buna karşı bir tavsiyede bulunuyorum çünkü bu, her bir görüntünün manuel olarak bazı piksel ölçülerine göre konumlandırılması anlamına gelir ki bu çok iş olabilir.


1

Başka bir çözüm, boşlukların bulunduğu yerlerde alışılmadık satır kesmeleri kullanmak olabilir. Bu, ilk çift cevaplarına benzer ve unsurları sıraya koymanın alternatif bir yoludur. Ayrıca, işaretlemenizdeki boşlukları satır başı dönüşleriyle değiştirdiği için bir süper kenar optimizasyon tekniğidir.

<img
src="image1.jpg"><img
src="image2.jpg"><img
src="image3.jpg"><img
src="image4.jpg">

Bu kodun hiçbirinde boşluk olmadığını unutmayın. Normalde HTML'de boşlukların kullanıldığı yerler, satır başlarıyla değiştirilir. Paul de Vrieze'nin önerdiği gibi yorumları kullanmaktan ve beyaz boşlukları kullanmaktan daha az ayrıntılıdır.

Bu yaklaşım için tech.co'ya kredi verin.


1

beyaz boşluk: başlangıç; Benim için çalışıyor.


0

Öğeler arasındaki boşluk, yalnızca görsel biçimlendirme amacıyla HTML düzenleyicisi tarafından buraya yerleştirilir. Beyaz boşluğu kaldırmak için jQuery'yi kullanabilirsiniz:

$("div#MyImages").each(function () {

    var div = $(this);
    var children= div.children();
    children.detach();
    div.empty();
    div.append(children);

});

Bu, alt öğeleri ayırır, alt öğeleri tekrar eklemeden önce kalan boşlukları temizler.

Bu sorunun diğer yanıtlarından farklı olarak, bu yöntemi kullanmak, miras alınan css displayve font-sizedeğerlerin korunmasını sağlar. Ayrıca kullanmaya gerek yoktur floatve cleardaha sonra gerekli olan hantaldır . Elbette jQuery kullanmanız gerekecek.


10
Bu çözüm işe yarasa da. Javascript ile boşlukları kaldırmanın gereğinden fazla olduğunu düşünüyorum.
Lashae

1
Üzgünüm ama uggghhhh ... Öncelikle HTML'yi doğru bir şekilde kodlamayı hedeflemelisiniz, sonradan JS ile karıştırmamalısınız. İkincisi, JS'nin [öksürük] ​​mucizesinin bunu daha sonra düzeltebileceği fikriyle baştan savma uygulamaları teşvik ediyor.
underscore_d

0

Kişisel olarak, bunu yapmanın kesin bir yolu olmadığını belirten kabul edilmiş cevabı beğendim, herhangi bir şekilde bir numara kullanmadan değil.

Bana göre, bazen can sıkıcı bir sorun, örneğin bir dizi onay kutusunun neden doğru şekilde hizalanmadığını merak ederek bir saatinizi boşa harcamanıza neden olabilir .. Bu nedenle hızlı bir google'a sahip olmalıydım ve kendim bir css kuralı olup olmadığını kontrol etmeliydim hatırlamadığım ... ama hayır gibi görünüyor :(

Yazı tipi boyutunu kullanmanın bir sonraki en iyi cevabına gelince ... bana göre bu, metninizin neden görünmediğini merak ettiğinizde sizi ısıracak kötü bir hack.

Genellikle PHP ile çok şey geliştiriyorum ve bir onay kutuları ızgarası oluşturduğum durumda, PHP tarafından oluşturulan içerik herhangi bir boşluk / boşluk eklemediği için bu sorunu ortadan kaldırıyor.

Basitçe, ya tek bir satırda bulunan görüntülerle uğraşmak zorunda kalmayı ya da içeriği / görüntüleri oluşturmak için bir sunucu tarafı komut dosyasını kullanmayı öneririm.


0

Öğeler arasında bir CR / LF'yi kaldırmak için kullanmak yerine, SGML işleme talimatını kullanıyorum çünkü küçülticiler genellikle yorumları kaldırır, ancak XML PI'yi kaldırmaz. PHP PI, PHP tarafından işlendiğinde, aradaki CR / LF ile birlikte PI'yi tamamen kaldırma ve böylece en az 8 bayt tasarruf etme gibi ek bir avantaja sahiptir. X (HT) ML gibi herhangi bir keyfi geçerli talimat adını kullanabilir ve iki bayt kaydedebilirsiniz.



-1

Anlamsal olarak konuşursak, sıralı veya sırasız bir liste kullanmak ve ardından CSS kullanarak uygun şekilde biçimlendirmek en iyisi olmaz mıydı?

<ul id="[UL_ID]">
    <li><img src="[image1_url]" alt="img1" /></li>
    <li><img src="[image2_url]" alt="img2" /></li>
    <li><img src="[image3_url]" alt="img3" /></li>
    <li><img src="[image4_url]" alt="img4" /></li>
    <li><img src="[image5_url]" alt="img5" /></li>
    <li><img src="[image6_url]" alt="img6" /></li>
</ul>

CSS kullanarak, bunu istediğiniz şekilde biçimlendirebilir ve kitaplar arasındaki boşlukları kaldırabilirsiniz.


4
Görüntüleri liste öğelerine koymanın, daha anlamsal olsa bile beyaz boşluk üzerinde hiçbir etkisi yoktur.
tehlikelidave
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.