CSS ile <br> yoksayılsın mı?


115

<br>Bazı başlıklarda olduğu gibi satır sonu eklenmiş bir site üzerinde çalışıyorum . Kaynak HTML'yi düzenleyemeyeceğimi varsayarsak, CSS ile bu kesintileri görmezden gelebilmemin bir yolu var mı?

Siteyi mobil olarak optimize ediyorum, bu yüzden JavaScript'i gerçekten kullanmak istemiyorum.


1
@Ben Johnson mk2: Sorunuzun cevabı: "@Aneesh Karthik C'nin firefox ve opera cevabına bir çözüm istiyorum", brelementlerin kullanımıyla mümkün değil ! Sebepler zaten defalarca açıklanmıştır! Cevabımda size geçerli, sağlam ve tarayıcılar arası bir şekilde hedefe ulaşmak için alternatif bir yöntem gösterdim.
Netsurfer

Yanıtlar:


198

Css ile br etiketlerini "gizleyebilirsiniz" ve hiçbir etkisi olmaz:

br {
    display: none;
}

Yalnızca belirli bir başlık türü içinde bazılarını gizlemek istiyorsanız, css'nizi daha belirgin hale getirin.

h3 br {
    display: none;
}

11
Aneesh'in cevabına da bir göz attığınızdan emin olun, bu konuyla ilgilidir ve enobrev'in kendisinde dikkate almadığı bir sorunu düzeltir.
Rick Calder

3
Kabul edildi, Aneesh'in cevabı harika bir ektir. stackoverflow.com/a/18040142/14651
enobrev

2
Bu çözüm Firefox için çalışmıyor. Eğer <br/> etrafında boşluk yoksa, <br/> etrafındaki kelimeleri bir araya getirir. İşte örnek Bu
konudaki

1
Hedefiniz duyarlı tasarımsa, tarayıcılar arası tek çözüm @ Netsurfer'dır. Soruyu tam olarak belirtildiği gibi cevaplamıyor, ancak tüm modern tarayıcılarda hedefe ulaşıyor.
Andrew Lundin

94

Not: Bu çözüm yalnızca sahte öğeleri kendi kendine kapanan etiketlere hatalı şekilde uygulayan Webkit tarayıcıları için çalışır.

Yukarıdaki cevaplara bir ek olarak, bazı durumlarda kişinin yalnızca göz ardı etmek yerine bir boşluk eklemesi gerektiğini belirtmek gerekir <br>:

Örneğin yukarıdaki cevaplar dönecek

Monday<br>05 August

için

Monday05 August

haftalık etkinlik takvimimi biçimlendirmeye çalışırken doğruladığım gibi. "Pazartesi" den sonra boşluk bırakılması tercih edilir. Bu, CSS'ye aşağıdakileri ekleyerek kolayca yapılabilir:

br  {
    content: ' '
}
br:after {
    content: ' '
}

Bu yapacak

Monday<br>05 August

gibi görünmek

Monday 05 August

Değişebilirsin contentiçinde niteliğini br:afteriçin ', 'size virgülle ayırmak veya içinde istediğiniz her şeyi koymak istiyorsanız ' 'o sınırlayıcı yapmak için! Bu arada

Monday, 05 August

düzgün görünüyor ;-)

Referans için buraya bakın .

Yukarıdaki cevaplarda olduğu gibi, bunu etikete özel yapmak istiyorsanız yapabilirsiniz. Bu özelliğin etiket için çalışmasını istiyorsanız , örneğin her birinin öncesine <h3>bir ekleyin ve örneğin.h3brbr:after

Genellikle bir sözde etiket için çalışır.


2
çok çok dahice!
jon

1
Aferin, aslında onu devre dışı bırakmanın sonuçlarını düşünmek!
Rick Calder

10
İyi bir nokta, ancak bu yalnızca Firefox ve IE ile Webkit tarayıcılarda (Chrome ve Safari) çalışıyor gibi görünüyor, bu teknik çalışmıyor, jsfiddle.net/nicooprat/ZHxNA'yı Firefox ve IE ile kontrol edin ... tüm ana meraklılarla çalışması için bir boşlukla mı?
firepol

6
@firepol: Aslında, Firefox ve IE bir sözde öğenin üzerinde çalışmaması gereken<br /> bir öğe olduğu için işleri "doğru" yapıyorlar . Ve contentsadece sözde elemanlar üzerinde çalışır.
ScottS

7
Bu çok yanlış bir çözüm, esas olarak @ScottS'un zaten yazdıklarından dolayı. "İçeriğin" yalnızca sözde öğelerle çalışması gerekir ve sözde öğenin kendi kendine kapanan etiketlerle çalışmaması gerekir. Bu şimdilik işe yarayabilir, ancak bu çözüme geleceğe yönelik demeye cesaret edemem.
nd_macias

16

Stili eklerseniz

br{
    display: none;
}

O zaman bu işe yarayacak. Yine de IE'nin eski sürümlerinde çalışıp çalışmayacağından emin değilim.


3
bu daha önce yayınlandı ve daha az oy aldı .. nasıl olur?
Mr_Green

Bazen, sadece görmezden geliniriz; (
Tim B James

@TimBJames FIREFOX'ta çalışmıyor, yukarıdaki
yorumumu

12

Ben böyle yaparım:

br { 
    display: inline;
    content: ' ';
    clear:none;
}

7

Sen kullanabilirsiniz spanyerine elemanlarını bryerini aldığı elemanları "tanımlanmadı" olan sözde elemanları bağlıdır gibi, işe beyaz boşluk yöntemi istiyorum.

HTML

<p>
   To break lines<span class="line-break">in a paragraph,</span><span>don't use</span><span>the 'br' element.</span>
</p>

CSS

span {white-space: pre;}

span:after {content: ' ';}

span.line-break {display: block;}

span.line-break:after {content: none;}

DEMO

Satır sonu, basitçe uygun aralık öğesi olarak ayarlanarak elde edilir display:block.

HTML işaretlemenizde kimlikler ve / veya Sınıflar kullanarak, yayılma öğelerinin her bir tek veya kombinasyonunu CSS ile kolayca hedefleyebilir veya CSS seçicilerini kullanabilirsiniz. nth-child() .

Böylece, örneğin duyarlı bir düzen için medya sorgularını kullanarak farklı kesme noktaları tanımlayabilirsiniz.

Ayrıca, Javascript (jQuery) ile sınıfları kolayca ekleyebilir / kaldırabilir / değiştirebilirsiniz.

Bu yöntemin "avantajı" sağlamlığıdır - sözde öğeleri destekleyen her tarayıcıda çalışır (bkz: Kullanabilir miyim - CSS Oluşturulan içerik ).

Alternatif olarak sözde elemanlar aracılığıyla bir satır sonu eklemek de mümkündür:

span.break:before {  
    content: "\A";
    white-space: pre;
}

DEMO


4
Sorunun şu bölümünü kaçırdınız mı: "Kaynak html'yi düzenleyemeyeceğimi varsayarsak"?
ScottS

1
@ScottS: Hayır, yapmadım. Belki de şu bölümü kaçırdınız: '@Aneesh Karthik C'nin firefox ve opera cevabına bir çözüm istiyorum' (çünkü ödülü başlatan OP değil). Ve bunun cevabı <br>, en azından çapraz tarayıcı ile mümkün olmadığıdır. Bu yüzden bir alternatif gösterdim.
Netsurfer

2
Hayır, o kısmı kaçırmadım (bu OP ödülden farklı ve Aneesh'in cevabına odaklanma). Ancak Aneesh'in cevabı tüm soru bağlamında, "CSS ile <br> Yoksaymak mı?" Bu bir html fiili kontrolü vardır, sonra da sadece bu oldukça aşikardır silme<br> elemanları sorunu (muhtemelen boşluklu yerleştirme) çözer. Bu nedenle, sorunun bir bütün olarak ilgilendiği tüm mesele, html'nin kontrolünün olmadığı zamandır ; Bunu çözmek için javascript'i (herhangi bir nedenle) kullanmak istemediklerini ekleyen hüküm karmaşıklaştı.
ScottS

" <br>CSS ile nasıl görmezden gelinir?" Sorusu zaten cevaplandı. Ve sadece HTML'yi kontrol ediyorsanız, bu onu değiştirmek istediğiniz anlamına gelmez. Ancak duyarlı tasarımda, genellikle satır sonlarının kontrolünde olması istenir (otomatik sarma dışında). Ve bu gibi durumlarda, beyaz alana sahip olma veya CSS tarafından kontrol edilmeme yöntemi (medya sorguları), hedefe ulaşmak için en az "bir yöntem" dir.
Netsurfer

Yukarıdaki çözümler artık firefox'ta çalışmadığı için bu benim için daha iyi çalıştı.
Christos Hrousis

3

Benim için şöyle daha iyi görünüyor:

Some text, Some text, Some text

br {
  display: inline;
  content: '';
}

br:after {
  content: ', ';
  display: inline-block;
}
<div style="display:block">
  <span>Some text</span>
  <br>
  <span>Some text</span>
  <br>
  <span>Some text</span>
</div>


1

Bunun için şunu yapabilirsiniz:

br{display: none;}

ve eğer bir PRE etiketinin içindeyse, bunu yapabilirsiniz ve PRE etiketinin normal bir blok öğesi gibi davranmasını istiyorsanız, şu CSS'yi kullanabilirsiniz:

pre {white-space: normal;}

Veya Aneesh Karthik C'nin tarzını şöyle takip edebilirsiniz :

br  {content: ' '}
br:after {content: ' '}

Bence anladın


Sanırım sözde elemanların beğendiği ::beforeve ::afteren azından "değiştirilen elemanlar" için "tanımsız" olduğu noktayı kaçırdınız br. Bu yüzden asla güvenebileceğiniz tutarlı bir tarayıcı davranışı olmayacak! Yapabileceğiniz tek şey, sözde öğeleri bu öğelerle birlikte kullanmamaktır !
Netsurfer

1

Sorunuza göre Firefox ve Opera için bu sorunu Aneesh Karthik C yaklaşımını kullanarak çözmek için "float" right "özelliğini eklemeniz gerekir.

Kontrol örneği burada. Bu CSS, Firefox (26.0), Opera (12.15), Chrome (32.0.1700) ve Safari (7.0) ile çalışır

br {
   content: " ";  
   float:right; 
}

Umarım bu soru sorunuzu yanıtlar !!


Content özelliği yalnızca CSS sözde öğeleri üzerinde etkiye sahiptir. Yani demonuzda kesinlikle faydasız! Ve nasıl "etkisiz hale getirileceği" a brzaten yanıtlanmıştır (bir kereden fazla). Soru, koşullu beyaz boşlukla ilgili . Ve bu sözde elemanların kullanılmasını gerektirdiğinden, çalışmazbr .
Netsurfer

Soruyu dikkatlice okursanız. Cevabı anlayacaksın. Yukarıdaki cevabı, kaçınılması gereken en iyi <br>, sadece görüntülenecek şekilde ayarlayarak <br> gördüm: yok. Ancak FF ve Opera for Aneesh çözümünde gelen sorunu nasıl ele alabileceğini öğrenmek istediği ikinci soruya göre.
shinesecret

Sadece soruyu değil, tüm cevapları ve yorumları da çok dikkatli okudum. İçerik mülkü brtamamen saçmadır! Ve hala yanıtınızın geri kalanının "koşullu beyaz boşluk ve çizgi brekaları" ile ne ilgisi olduğunu göremiyorum? Belki biraz daha açıklarsın lütfen?
Netsurfer

1
brÖğelerin etrafında zaten boşluklar olduğu için örneğiniz yanıltıcıdır . Bunları kaldırırsanız, herhangi bir boşluk eklemek için çalışmadığını göreceksiniz.
ScottS

1
brÖrneğinizde, birinci ve sonuncudan önce ve sonra boşluklar olan üç öğeniz var . Aslında işe yaramasa da çözümünüzün işe yarıyormuş gibi görünmesini sağlayan bu boşluklardır. Gözden geçirilmiş örneğimde yaptığım gibi bu boşlukları kaldırdığınızda, çözümünüzün Firefox'ta hiç boşluk eklemediğini görebilirsiniz.
ScottS

0

Bu soru zaten çözülmüş gibi görünse de, kabul edilen cevap sorunu benim için Firefox'ta çözmedi. Firefox (ve muhtemelen IE, denememiş olsam da) "içerik" etiketinin içeriğini okurken boşlukları atlıyor. Mozilla'nın bunu neden yaptığını tam olarak anlasam da, kendi payına düşen sorunları da beraberinde getiriyor. Bulduğum en kolay çözüm, aşağıda gösterildiği gibi normal alanlar yerine kırılmaz alanlar kullanmaktı.

.noLineBreaks br:before{
content: '\a0'
}

Bir göz atın .


1
Kemancınız neden beforea üzerinde elemente sahip değil br? brKeman üzerinde html'niz bile yok . Sorunun bir kısmı, bazı tarayıcılarda beforea üzerinde çalışmamasıdır br.
ScottS

Spesifikasyonda belirtildiği gibi bu oldukça beklenen bir davranıştır: 2.5.1 Yaygın ayrıştırıcı deyimler
Netsurfer

Bu kesinlikle tuhaf, projeme uyguladığımda işe yarıyor. Metnimin tamamı HTML değil, ancak değiştirdiğim içerik bir veritabanından geliyor. Üzgünüm cevaplayıcım yardım etmedi.
Santo Guevarra

0

Evet, bunu görmezden gelebilirsiniz <br>. Buna özellikle mobil cihazlar için araları kaldırmanız gereken duyarlı tasarım durumunda ihtiyacınız olabilir.

HTML

<h2>

  Where ever you go <br class="break"> i am there.

</h2>

Mobil örnek için CSS

/* Resize the browser window to check */

@media (max-width: 640px) 
{
  .break {display: none;}
}

Bu Codepen'e göz atın:
https://codepen.io/fluidbrush/pen/pojGQyM


-1

Bunu bir yorumda kolayca dönüştürebilirsiniz ..

Ya da bunu yapabilirsiniz:

br {
display: none;
}

Ama istemiyorsan neden oraya koyuyorsun?

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.