<br /> kullanmadan css'den nasıl satır kesilir?


398

çıktı:

Merhaba
Nasılsın

kod:

<p>hello <br> How are you </p>

Aynı çıktıyı nasıl elde edebilirim <br>?

Yanıtlar:


385

Aynı HTML yapısına sahip İmkansız mı ayırt şey olmalı Hellove How are you.

Daha spansonra blok olarak göstereceğiniz s'yi kullanmanızı öneririm (tıpkı bir <div>gerçek gibi ).

p span {
  display: block;
}
<p><span>hello</span><span>How are you</span></p>


37
Ayrıca ne kadar ek işaretleme olduğuna dikkat edin - <br />eleman çok iyi bir nedenden dolayı var. Satır kesmesini ayrı paragraflar oldukları için istiyorsanız, bunları ayrı paragraflar olarak işaretlemeniz yeterlidir.
Rowland Shaw

8
Gerçekten paragraf kullanmadan yapılandırılmış satırlara ihtiyacınız olabilir. Bir şiiri, şarkıyı ya da adresi işaretlemek için
Vincent Robert

2
@VincentRobert Doğru, ama şiir <br>doğru biçimlendirmenin ne zaman olduğu için kanonik bir örnektir . Bir şiir için açıklıklar “yanlış” olacaktır.
Alan H.

8
Bir öğeye display: block atamanın, satır sonundan önce ve sonra zorlanacağını ve dolayısıyla tek satır sonu ile aynı olmayacağını unutmayın.
jerseyboy

17
Kesinlikle <p> öğelerini kullanın. Bir <span> öğesi display'e YAPILMAMALIDIR: blok, <span> 'ın bütün mesele satır içi olmasıdır. Bunu şu şekilde yaparım: <div><p>hello</p> <p> Nasılsınız </p> </div>. Kazanılan CSS gerekmez.
Miles

353

Yeni satırları koruyan white-space: pre;öğelerin gibi davranmasını sağlamak için kullanabilirsiniz <pre>. Misal:

p {
  white-space: pre;
}
<p>hello 
How are you</p>

IE için bunun yalnızca IE8 + 'da çalıştığını unutmayın.


133
genellikle daha iyi preolduğu pre-line, hangi kaydırması sağlar.
Alan H.


1
Benim durumumda önceden tercih ettim, çünkü metin taşmasını da kullanabilirim
Greg

Metin sonunda paketlendiğinden ve white-spaceCSS kuralını tetiklemeyecek aynı satıra yerleştirileceğinden bunun tepki ile çalışmadığını unutmayın .
Vadorequest

119

<br/>Normal olarak kullanın , ancak display: noneistemediğinizde gizleyin .

Bu soruyu bulan çoğu insanın belirli bir yerde satır sonu görünüp görünmeyeceğine karar vermek için css / Responsive design kullanmak istiyor. (ve kişisel bir şeyiniz yok <br/>)

Hemen belirgin olmasa da, aslında display:nonebir <br/>etikete gizlemek için uygulayabilirsiniz , bu da medya sorgularının semantik BR etiketleriyle birlikte kullanılmasını sağlar.

 <div>
   The quick brown fox<br />
   jumps over the lazy dog
 </div>

 @media screen and (min-width: 20em) 
 {
    br 
    { 
       display: none;   // hide the BR tag for wider screens (i.e. disable the line break)
    }
 }

Bu, metni kesin bir şekilde iki satıra zorlamanız gereken duyarlı tasarımda kullanışlıdır.

http://jsfiddle.net/nNbD3/1/


5
Simon, dikkatinizi çekiyorsunuz - adınıza örnek, bu soruyu araştırmamın tam nedeni ve display: noneçözüm açık ara en uygun ve kullanışlı.
abbottjam

8
Kelimelerin birlikte çalışmasına neden olacağı durumlarda, display: inline-block; width: 1em;yerine bir şey kullanabileceğinizi unutmayın none.
16'da Beejor

2
Daha <br class='foo'>fazla kontrole ihtiyaç duyuyorsanız bir sınıf bile uygulayabilirsiniz, ancak çok delirmeyin!
Simon_Weaver

Başka bir "neden bunu düşünmedim ?!" Cevap. <br/>yaptığı işte harikadır; tekerleği yeniden icat etmeye gerek yok. Teşekkürler!
rinogo

Benzer konsept esnek kutu yerleşimine de uygulanabilir: stackoverflow.com/questions/29732575/…
Simon_Weaver

106

Beyaz boşlukların ve satır kesmelerinin işlenmesini tanımlamak için birkaç seçenek vardır. İçeriği örneğin bir <p>etikete koyabilirse, istediği her şeyi elde etmek oldukça kolaydır.

Satır sonlarını korumak, ancak beyaz boşlukları korumak için aşağıdaki gibi kullanın pre-line(değil pre):

<style>
 p {
     white-space: pre-line; /* collapse WS, preserve LB */
   }
</style>

<p>hello
How are you</p>

Başka bir davranış isteniyorsa, bunlardan birini seçin (WS = WhiteSpace, LB = LineBreak):

     white-space: normal;   /* collapse WS, wrap as necessary, collapse LB */
     white-space: nowrap;   /* collapse WS, no wrapping,       collapse LB */
     white-space: pre;      /* preserve WS, no wrapping,       preserve LB */
     white-space: pre-wrap; /* preserve WS, wrap as necessary, preserve LB */
     white-space: inherit;  /* all as parent element */

KAYNAK: W3 Okulları


4
mükemmel. seçilen cevap olmalıdır.
Ben Lin

1
OP'nin aradığı şey olduğuna inanıyorum.
John Sardinha

64

CSS'deki "\ a" komutu bir satır başı oluşturur. Bu HTML değil CSS'dir, bu yüzden istediğiniz şeye daha yakın olacaktır: ekstra işaretleme yok .

Bir blok alıntıda, aşağıdaki örnek hem başlığı hem de kaynak bağlantısını görüntüler ve ikisini bir satır başı ( "\a") ile ayırır :

blockquote[title][cite]:after {
    content:attr(title)"\a"attr(cite)
}

Süslü, ama sorunun ne olduğu için tamamen gereksiz.
YePhIcK

15
+1 çünkü yalnızca CSS'sidir ve pre, br etiketlerinin kullanılmasını veya görüntüleme modunun engellenecek şekilde değiştirilmesini önermez (bu, farklı davranışlar ekler, üst öğe varsa ve display:flexbu bağlamda bir hack ise kırılabilir ). Fantezi değil, gerçekten, sadece modern bir teknik. Tam olarak aynı işaretlemeyi istiyorsanız, ancak aslında farklı tepki vermek için bu yol.
renoirb

Parlak fikir. Not "- Basit tırnak kullanmayın 'izin vermek istediğiniz çünkü \aözel bir karakter olarak çözümlenen almak.
Hafenkranich

2
+1 vermek istiyorum ama krom 55'te benim için çalışmıyor
pery mimon

4
Yaptığınız şeyi görselleştirmenize yardımcı olacak bir HTML ve belki de bir Keman olsaydı bunu oylamış olurdum.
John

29

CSS'de kodu kullanın

p {
    white-space: pre-line;
}

Bu kod css ile P etiketi içindeki her giriş html'de bir kesme çizgisi olacaktır.


1
Tam da aradığım şey buydu! JS'den oluşturulan (örneğin AJAX sorgusu, açısal şema formu vb. JSON sonucu), kaçış / sanitizasyondan (örn. NgBindHtml kullanılmadığında normal AngularJS kaçış davranışı) geçirilen öğe içeriği için mükemmel çalışır
Stefan Dragnev

28

Daha önce söylenenlere dayanarak, bu işe yarayan saf bir CSS çözümüdür.

<style>
  span {
    display: inline;
  }
  span:before {
    content: "\a ";
    white-space: pre;
  }
</style>
<p>
  First line of text. <span>Next line.</span>
</p>

Bu yaklaşımda, çok satırlı input type='text', wrapping the input, and then laying the text over it with a wrapper div . That also requires işaretçisi olaylarına yardımcı olması için bir varyasyon buldum : none; `` üzerinde :beforehala aşağıdaki düğmeyi tıklayabilmek için.
Eric Lease

10
<pre> <---------------------------------------
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
</pre> <--------------------------------------

VEYA

<div style="white-space:pre">  <-----------------------------------
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
</div>                         <-----------------------------------

Kaynak: https://stackoverflow.com/a/36191199/2377343


9

Bir öğenin daha sonra satır sonu yapmasını sağlamak için öğeyi atayın:

display:block;

Bir blok seviyesi öğesinden sonra kayan elemanlar sonraki satırda görünecektir. <p> ve <div> gibi birçok öğe zaten blok düzeyinde öğelerdir, böylece bunları kullanabilirsiniz.

Ancak bunu bilmek iyi olsa da, bu gerçekten içeriğinizin içeriğine bağlıdır. Örneğin, satır kesmeye zorlamak için CSS kullanmak istemezsiniz. <br /> uygundur, çünkü anlamsal olarak p etiketi görüntülemekte olduğunuz metin için en uygun etikettir. Sadece CSS'yi asmak için daha fazla işaretleme gerekli değildir. Teknik olarak tam olarak bir paragraf değil , ancak <greeting> etiketi yok, bu yüzden sahip olduklarınızı kullanın. İçeriğinizi HTMl ile iyi tanımlamak çok daha önemlidir - buna sahip olduktan sonra nasıl güzel görüneceğini anlayın.


1
Ancak bu, kabın tam genişliğini yapar, bu da istenmeyen bir yan etki olabilir (özellikle öğe bir çapa / bağlantıysa).
NickG

Evet, bir genişlik ayarlamadığınız sürece varsayılan olarak blok düzeyi öğeleri tam genişliği kaplar. Tasarımınıza dayalı olarak html'nizi seçmek yerine, bağlam - semantik bağlam açısından düşünme hakkındaki paragrafımı okuyun, genellikle böyle sorunlara girmenizi önlemeye yardımcı olur.
Sözdizimi Hatası

1
Genellikle <br> etiketlerinden kaçınılması gereken neden semantikten daha tekniktir. <br> etiketleri bağımsızdır ve sayfayı oluştururken öndeki öğelerin var olup olmayacağını bilmediğiniz için bunları kullanamazsınız, bu nedenle boş satırlar istemeyebilirsiniz. Dikey bir menüde hepsinin kendi satırında olmasını istediğiniz <a> bağlantılarının bir listesini düşünün, ancak sunucu tarafı kuralları nedeniyle hangi bağlantıların gizleneceğini bilmediğiniz için <br> kullanamazsınız. <br> kullanılırsa bağlantıların gizlenmesi boş satırlara neden olur.
NickG

1
Bu nedenle, insanlar genellikle bir <ul> listesi kullanır ve sonra madde işaretlerini gizler, ancak bu oldukça çirkin. "Her zaman kendi satırında oluştur" yazan bir css kuralı olsaydı daha iyi olurdu.
NickG

1
Ama benim ilk yorumda dediğim gibi - bu unsurların tam genişlik istenmeyen yan etkisi vardır :) Sadece tam genişlik olmadan, yeni bir satır öğeleri sadece ihtiyacım var. Öğe sayfanın en solundaki bir bağlantıysa, ekranın en sağındaki tıklamalar bile bağlantıyı takip eder.
NickG

8

İşte kötü bir soruya kötü bir çözüm, ama kelimenin tam anlamıyla özeti karşılayan bir çözüm:

p {
    width : 12ex;
}

p:before {
    content: ".";
    float: right;
    padding-left: 6ex;
    visibility: hidden;
}

1
yazım hatası veya ne olmalı ex? pve eklavyede o kadar da yakın değilim, bu yüzden soruyorum
MMachinegun


1
Kötü ya da değil, bu aslında oldukça zekidir.
Jonathan Dumaine

5

Bağlantıların Listesi İçin

Diğer yanıtlar, duruma bağlı olarak satır sonları eklemenin bazı iyi yollarını sunar. Ancak, :afterseçicinin, aşağıda belirtilen nedenlerden dolayı, bağlantı listeleri (ve benzer şeyler) üzerinde CSS kontrolü için bunu yapmanın daha iyi yollarından biri olduğuna dikkat edilmelidir .

İçindekiler tablosunu varsayarak bir örnek:

<style type="text/css">
    .toc a:after{ content: "\a"; white-space: pre; }
</style>

<span class="toc">
    <a href="#a1">Item A1</a> <a href="#a2">Item A2</a>
    <a href="#b1">Item B1</a> <a href="#b2">Item B2</a>
</span>

Ve işte Simon_Weaver'ın tekniği, daha basit ve daha uyumlu. Stil ve içeriği o kadar fazla ayırmaz, daha fazla kod gerektirir ve bundan sonra ara vermek istediğiniz durumlar olabilir. Yine de, özellikle eski IE için harika bir çözüm.

<style type="text/css">
    .toc br{ display: none; } /* comment out for horizontal links */
</style>

<span class="toc">
    <a href="#a1">Item A1</a><br/> <a href="#a2">Item A2</a><br/>
    <a href="#b1">Item B1</a><br/> <a href="#b2">Item B2</a><br/>
</span>

Yukarıdaki çözümlerin avantajlarına dikkat edin:

  • HTML'deki boşluk olursa olsun çıktı aynıdır (vs. pre)
  • Elemanlara ekstra dolgu eklenmez (NickG'nin display:blockyorumlarına bakın)
  • Stil değişikliği için her HTML dosyasına girmeden paylaşılan bazı CSS'lerle yatay ve dikey bağlantı listeleri arasında kolayca geçiş yapabilirsiniz
  • Çevreleyen içeriği etkileyen hayır floatveya clearstiller
  • Stil, içerikten ayrıdır ( <br/>veya presabit kodlu kopmalarla)
  • Bu ayrıca a.toc:afterve kullanarak gevşek bağlantılar için de kullanılabilir.<a class="toc">
  • Birden çok mola ve hatta önek / sonek metni ekleyebilirsiniz

4

Belki birileri benimle aynı konuya sahip olacak:

Kullanmak display: flexzorunda olduğum bir unsurdaydım flex-direction: column.


4

brEtiketi ayarlamadisplay: none yardımcı olur, ancak daha sonra WordsRunTogether ile sonuçlanabilir. Bunun yerine bir boşluk karakteriyle değiştirmeyi daha yararlı buldum:

HTML:

<h1>
    Breaking<br />News:<br />BR<br />Considered<br />Harmful!
</h1>

CSS:

@media (min-device-width: 1281px){
    h1 br {content: ' ';}
    h1 br:after {content: ' ';}
}

2
Ayrıca ayar düşünebiliriz briçin display: inline-block; width: 1em;yatay giderken birlikte çalışmasını kelimeleri önlemek hangi.
16'da Beejor

1
Önerinizi daha iyi beğeniyorum. Bunu bir daha karşılaştığımda deneyeceğim.
Bryan


2

Çok fazla dolgu ekleyebilir ve metni yeni satıra bölünmeye zorlayabilirsiniz, örneğin

p{
    padding-right: 50%;
}

Duyarlı tasarıma sahip bir durumda benim için iyi çalıştı, sadece belirli bir genişlik aralığında metnin bölünmesi gerekiyordu.


1
Kulağa hoş bir fikir geliyor, ancak dolguyu arttırmak da bir nesnenin toplam genişliğini artıracaktır. Ve bunun özellikle duyarlı bir sayfa olması durumunda olumsuz bir etkisi olabilir.
itsols

1

Çok basit çözümleri seviyorum, işte bir tane daha

<p>hello <span>How are you</span></p>

ve css

p {
 display: flex;
 flex-direction: column;
}

1

Overflow-wrap kullanın: break-word; sevmek :

.yourelement{
overflow-wrap: break-word;
}

1

İçindeki içeriği bildirmeniz gerekiyor <span class="class_name"></span> . Ondan sonra hat kesilecek.

\A satır besleme karakteri anlamına gelir.

.class_name::after {
  content: "\A";
  white-space: pre;
}

0

Vincent Robert ve Joey Adams'ın cevapları geçerlidir. Bununla birlikte, işaretlemeyi değiştirmek istemiyorsanız,<br /> javascript kullanarak .

İşaretlemeyi değiştirmeden CSS'de yapmanın bir yolu yoktur.


Bu doğru değil. Bunu yapmak için :afterveya kullanabilirsiniz :before.
Artur Bodera

0

Benim durumumda, önce bir satır sonu olması için bir giriş düğmesine ihtiyacım vardı.
Düğmeye aşağıdaki stili uyguladım ve işe yaradı:

clear:both;

0

Bunun birine yardım etmesi durumunda ...

Bunu yapabilirsin:

<p>This is an <a class="on-new-line">inline link</a>?</p>

Bu css ile:

a.on-new-line:before { 
  content: '&nbsp;'; 
  font-size:0; 
  display:block;
  line-height:0;
}

veya.on-new-line:before {content: ""; display: block;}
meuwka

0

&nbsp;Boşluk yerine kullanmak bir kırılmayı önleyecektir.

<span>I&nbsp;DONT&nbsp;WANT&nbsp;TO&nbsp;BREAK&nbsp;THIS&nbsp;LINE&nbsp;UP, but this text can be on any line.</span>

0

Chrome'da çalışır:

p::after {
    content: "-";
    color: transparent;
    display: block;
}

0

Sanırım bir kesme noktası kullanmak istemediniz çünkü her zaman çizgiyi kıracak. Bu doğru mu? Eğer öyleyse <br />, metninize bir kesme noktası eklemeye ne dersiniz , o zaman ona bir sınıf verin ve <br class="hidebreak"/>ardından medya sorgusunu kullanarak<br /> belirli bir genişlikte ancak bu genişliğin üstünde kalmaya devam edecek verin.

HTML:

<p>
The below line breaks at 766px.
</p>

<p>
 This is the line of text<br class="hidebreak"> I want to break.
</p>

CSS:

@media (min-width: 767px) {
  br.hidebreak {display:none;}
}

https://jsfiddle.net/517Design/o71yw5vd/


Sadece Simon_Weaver'ın benimkine benzer bir cevap gönderdiğini fark ettim. Üzgünüm Simon, yanıtını intihal etmeye çalışmıyordu. Benimkini göndermeden önce tüm cevapları okumadım ve bu yüzden seninkini fark etmedim. Kötü ... dersim öğrenildi .. Gelecekte benimkini göndermeden önce diğer cevapları okuyacağım.
Krankit

Telaşa gerek yok! Ama bana bir şiir yazmalısın. Gönderen w3schools.com/tags/tag_br.asp "Tip: The <br> tag is useful for writing addresses or poems."
Simon_Weaver

0

Kod olabilir

<div class="text-class"><span>hello</span><span>How are you</span></div>

CSS olurdu

.text-class {
     display: flex;
     justify-content: flex-start;
     flex-direction: column;
     align-items: center;
 }

-1

Yapma. Sabit satır sonu istiyorsanız, birini kullanın.


3
+1 Evet, ancak yeni satır yalnızca sunum kullanımı içinse display: block;.
Web_Designer

21
Bu cevabın neden yukarı oy aldığını anlamıyorum. Sabit satır sonu kullanma yeteneğim olsaydı, bu soruya bakmazdım.
trliner
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.