Bagaimana cara break-line dari css, tanpa menggunakan <br />?


398

keluaran:

Halo
Apa kabar

kode:

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

Bagaimana cara mencapai output yang sama tanpa <br>?

Jawaban:


385

Tidak mungkin dengan struktur HTML yang sama, Anda harus memiliki sesuatu untuk dibedakan antara Hellodan How are you.

Saya sarankan menggunakan spans yang kemudian akan ditampilkan sebagai blok (seperti <div>sebenarnya).

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


37
perhatikan juga berapa banyak mark-up tambahan yang ada - <br />elemen ada karena alasan yang sangat bagus. Jika Anda ingin baris tersebut dipisahkan oleh paragraf terpisah, maka cukup tandai sebagai paragraf terpisah.
Rowland Shaw

8
Anda mungkin perlu baris terstruktur tanpa benar-benar menggunakan paragraf. Untuk menandai sebuah puisi, lagu atau alamat misalnya
Vincent Robert

2
@VincentRobert Benar, tetapi puisi adalah contoh kanonik untuk kapan <br>markup yang benar. Rentang untuk puisi akan "salah."
Alan H.

8
Perhatikan bahwa menugaskan tampilan: blokir ke elemen akan memaksa jeda baris sebelum dan sesudah, dan sama sekali tidak sama dengan memiliki satu jeda baris.
jerseyboy

17
Pasti menggunakan elemen <p>. Elemen <span> TIDAK boleh dibuat menjadi tampilan: blok, seluruh titik dari <span> adalah bahwa itu inline. Saya akan melakukannya dengan cara ini: <div><p>hello</p> <p> Apa kabar </p> </div>. Tidak diperlukan CSS yang terbuang.
Mil

354

Anda dapat menggunakan white-space: pre;untuk membuat elemen bertindak seperti <pre>, yang mempertahankan baris baru. Contoh:

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

Catatan untuk IE bahwa ini hanya berfungsi di IE8 +.


133
seringkali lebih baik daripada preini pre-line, yang memungkinkan pembungkus.
Alan H.

14
Lebih lanjut tentang perbedaan antara pre-line dan pre-wrap di developer.mozilla.org/en-US/docs/Web/CSS/white-space
patrick

1
Saya lebih suka pre dalam kasus saya, karena saya juga dapat menggunakan text-overflow
Greg

Perhatikan bahwa ini tidak akan bekerja dengan reaksi karena teks pada akhirnya dibundel dan akan diletakkan pada baris yang sama, yang tidak akan memicu white-spaceaturan CSS.
Vadorequest

119

Gunakan <br/>seperti biasa, tetapi sembunyikan display: noneketika Anda tidak menginginkannya.

Saya berharap sebagian besar orang menemukan pertanyaan ini ingin menggunakan desain css / responsif untuk memutuskan apakah ada jeda baris di tempat tertentu. (dan tidak punya masalah pribadi dengan <br/>)

Sementara tidak segera jelas, Anda benar-benar dapat menerapkan display:noneke <br/>tag untuk menyembunyikannya, yang memungkinkan penggunaan query media dalam tandem dengan tag BR semantik.

 <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)
    }
 }

Ini berguna dalam desain responsif di mana Anda perlu memaksa teks menjadi dua baris sekaligus.

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


5
Simon, Anda tepat - contoh nama Anda adalah alasan tepat saya meneliti pertanyaan ini dan display: nonesolusinya adalah yang paling tepat dan berguna.
abbottjam

8
Perhatikan bahwa untuk kasus-kasus yang menyebabkan kata-kata berjalan bersama, Anda bisa menggunakan sesuatu seperti display: inline-block; width: 1em;sebagai ganti none.
Beejor

2
Anda bahkan bisa menerapkan kelas <br class='foo'>jika Anda membutuhkan lebih banyak kontrol tetapi jangan terlalu gila!
Simon_Weaver

Lain "mengapa saya tidak memikirkan ini ?!" menjawab. <br/>hebat dalam apa yang dilakukannya; tidak perlu menemukan kembali roda. Terima kasih!
rinogo

Konsep serupa dapat diterapkan pada tata letak kotak-fleksibel: stackoverflow.com/questions/29732575/…
Simon_Weaver

106

Ada beberapa opsi untuk mendefinisikan penanganan ruang putih dan jeda baris. Jika seseorang dapat memasukkan konten ke dalam <p>tag misalnya , cukup mudah untuk mendapatkan apa pun yang diinginkannya.

Untuk mempertahankan jeda baris tetapi tidak menggunakan spasipre-line ( preseperti) seperti di:

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

<p>hello
How are you</p>

Jika perilaku lain yang diinginkan pilih salah satu dari ini (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 */

SUMBER: Sekolah W3


4
sempurna. harus menjadi jawaban yang dipilih.
Ben Lin

1
Saya percaya inilah yang dicari OP.
John Sardinha

65

Perintah "\ a" di CSS menghasilkan carriage return. Ini CSS, tidak HTML, sehingga akan lebih dekat dengan apa yang Anda inginkan: tidak ada markup tambahan .

Dalam blockquote, contoh di bawah ini menampilkan judul dan tautan sumber dan pisahkan keduanya dengan carriage return ( "\a"):

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

Mewah, tetapi sama sekali tidak dibutuhkan untuk pertanyaan apa itu.
YePhIcK

15
+1 karena CSS-nya saja, dan tidak menyarankan penggunaan tag pra, br atau mengubah mode tampilan untuk diblokir (yang menambahkan perilaku berbeda, mungkin pecah jika orang tua ada di dalamnya display:flexdan karenanya menjadi peretasan dalam konteks ini). Ini tidak mewah, sungguh, hanya teknik modern. Jika Anda ingin markup yang sama persis, tetapi untuk bereaksi secara berbeda itulah cara yang harus dilakukan.
renoirb

Ide brilian Perhatikan "- jangan gunakan tanda kutip sederhana 'karena Anda ingin mengizinkan \auntuk diurai sebagai karakter khusus.
Hafenkranich

2
saya ingin memberi +1 tetapi tidak berfungsi untuk saya di chrome 55
pery mimon

4
Saya akan memilih ini jika ada beberapa HTML dan mungkin Fiddle untuk membantu memvisualisasikan apa yang Anda lakukan.
John

29

Di CSS gunakan kode

p {
    white-space: pre-line;
}

Dengan kode ini css setiap entri di dalam tag P akan menjadi break-line di html.


1
Ini persis apa yang saya cari! Berfungsi sempurna untuk konten elemen yang dihasilkan dari JS (mis., Hasil JSON dari kueri AJAX, bentuk skema sekuler, dll.) Yang dapat diloloskan melalui pelolosan / sanitasi (mis. Perilaku normal AngularJS melarikan diri saat tidak menggunakan ngBindHtml)
Stefan Dragnev

28

Membangun dari apa yang telah dikatakan sebelumnya, ini adalah solusi CSS murni yang berfungsi.

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

Saya baru saja menemukan variasi pada pendekatan ini untuk membantu multi-line input type='text', wrapping the input, and then laying the text over it with a wrapper div . That also requires pointer-events: none; `pada :beforeagar masih dapat mengklik tombol di bawah ini.
Eric Lease

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

ATAU

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

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


9

Untuk membuat elemen memiliki garis istirahat sesudahnya, tetapkan:

display:block;

Elemen non-mengambang setelah elemen level blok akan muncul di baris berikutnya. Banyak elemen, seperti <p> ​​dan <div> sudah memblokir elemen level sehingga Anda bisa menggunakannya.

Tetapi meskipun ini baik untuk diketahui, ini sangat tergantung pada konteks konten Anda. Dalam contoh Anda, Anda tidak ingin menggunakan CSS untuk memaksa jeda baris. <br /> sesuai karena secara semantik tag p adalah yang paling tepat untuk teks yang Anda tampilkan. Lebih banyak markup hanya untuk menggantung CSS saja tidak perlu. Secara teknis itu tidak persis sebuah paragraf, tetapi tidak ada <salam> tag, jadi gunakan apa yang Anda miliki. Menjelaskan konten Anda dengan baik dengan HTML cara yang lebih penting - setelah Anda memiliki kemudian mencari cara untuk membuatnya terlihat cantik.


1
Tapi ini membuatnya menjadi lebar penuh wadah, yang mungkin merupakan efek samping yang tidak diinginkan (terutama jika item tersebut adalah jangkar / tautan).
NickG

Ya, secara default elemen level blok mengambil lebar penuh kecuali Anda menetapkan lebar. Baca paragraf saya tentang konteks - berpikir dalam konteks semantik daripada memilih html Anda berdasarkan desain Anda umumnya membantu mencegah Anda mengalami masalah seperti itu.
Sintaks Kesalahan

1
Sering kali alasan <br> tag harus dihindari lebih teknis daripada semantik. Tag <br> adalah mandiri dan Anda tidak dapat menggunakannya karena Anda tidak tahu apakah elemen di depan akan ada pada saat Anda merender halaman, jadi Anda mungkin tidak ingin garis kosong. Pertimbangkan daftar tautan <a> pada menu vertikal yang Anda inginkan semuanya pada jalurnya sendiri, tetapi tidak dapat menggunakan <br> karena Anda tidak tahu tautan mana yang akan disembunyikan karena aturan sisi server. Menyembunyikan tautan akan menyebabkan garis kosong jika Situs digunakan.
NickG

1
..Untuk alasan itu, orang-orang sering menggunakan daftar <ul> dan kemudian menyembunyikan peluru, tapi itu cukup aneh. Akan lebih baik jika ada aturan css yang hanya mengatakan "selalu render sendiri".
NickG

1
Tetapi seperti yang saya katakan di komentar pertama saya - yang memiliki efek samping yang tidak diinginkan dari elemen menjadi lebar penuh :) Saya hanya perlu item pada baris baru, tanpa mereka menjadi lebar penuh. Jika item tersebut adalah tautan di paling kiri halaman, itu berarti bahkan klik di paling kanan layar ikuti tautannya.
NickG

8

Berikut ini adalah solusi buruk untuk pertanyaan buruk, tetapi yang secara harfiah memenuhi ringkasan:

p {
    width : 12ex;
}

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

1
kesalahan ketik atau apa yang seharusnya ex? pdan etidak begitu dekat pada keyboard, itu sebabnya saya bertanya
MMachinegun


1
Buruk atau tidak, ini sebenarnya cukup pintar.
Jonathan Dumaine

5

Untuk Daftar Tautan

Jawaban lain memberikan beberapa cara yang baik untuk menambahkan jeda baris, tergantung pada situasinya. Tetapi harus dicatat bahwa :afterpemilih adalah salah satu cara yang lebih baik untuk melakukan ini untuk kontrol CSS atas daftar tautan (dan hal-hal serupa), untuk alasan yang disebutkan di bawah ini.

Berikut ini sebuah contoh, dengan asumsi daftar isi:

<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>

Dan inilah teknik Simon_Weaver, yang lebih sederhana dan lebih kompatibel. Itu tidak memisahkan gaya dan konten sebanyak, membutuhkan lebih banyak kode, dan mungkin ada kasus di mana Anda ingin menambahkan jeda setelah fakta. Masih merupakan solusi yang hebat, terutama untuk IE yang lebih lama.

<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>

Perhatikan keuntungan dari solusi di atas:

  • Tidak peduli spasi putih dalam HTML, hasilnya tetap sama (vs. pre )
  • Tidak ada bantalan tambahan ditambahkan ke elemen (lihat NickG's display:block komentar )
  • Anda dapat dengan mudah beralih antara daftar tautan horisontal dan vertikal dengan beberapa CSS bersama tanpa masuk ke setiap file HTML untuk perubahan gaya
  • Tidak floatatauclear gaya yang memengaruhi konten di sekitarnya
  • Gaya terpisah dari konten (vs. <br/>, ataupre dengan jeda kode-keras)
  • Ini juga bisa berfungsi untuk tautan lepas menggunakan a.toc:afterdan<a class="toc">
  • Anda dapat menambahkan beberapa jeda dan bahkan teks awalan / akhiran

4

Mungkin seseorang akan memiliki masalah yang sama dengan saya:

Saya berada di elemen dengan display: flexjadi saya harus menggunakan flex-direction: column.


4

Mengatur brtag kedisplay: none sangat membantu, tetapi kemudian Anda bisa berakhir dengan WordsRunTogether. Saya merasa lebih bermanfaat untuk menggantikannya dengan karakter spasi, seperti:

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
Anda juga bisa mempertimbangkan pengaturan bruntuk display: inline-block; width: 1em;yang seharusnya mencegah kata-kata dari berjalan bersama-sama ketika akan horizontal.
Beejor

1
Saya lebih suka saran Anda. Saya akan mencoba itu lain kali saya temui ini.
Bryan

3

Bagaimana dengan <pre>tag?

sumber: http://www.w3schools.com/tags/tag_pre.asp


Oh! Saya mengerti apa yang kamu maksud. Kemudian Anda menggunakan spasi putih di Anda <pre>sehingga melanggar batas. Bagaimana jika Anda ingin memiliki ruang putih teratur?
Micha Mazaheri

Tag awal akan mengartikan pengembalian carriage yang dibuat di dalamnya. Jadi, jika Anda mematahkan batas antara 'halo' dan 'apa kabar' dalam tag pra, istirahat akan diberikan
Godineau Félicie

2

Anda dapat menambahkan banyak padding dan memaksa teks untuk dibagi ke baris baru, misalnya

p{
    padding-right: 50%;
}

Bekerja dengan baik untuk saya dalam situasi dengan desain responsif, di mana hanya dalam rentang lebar tertentu diperlukan teks untuk dipisah.


1
Kedengarannya ide yang bagus tetapi menambah bantalan juga akan meningkatkan lebar keseluruhan suatu objek. Dan itu dapat memiliki efek negatif, khususnya dalam hal halaman responsif.
itsols

1

Saya suka solusi yang sangat sederhana, ini dia satu lagi

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

dan css

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

1

Gunakan overflow-wrap: break-word; Suka :

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

1

Anda perlu mendeklarasikan konten di dalamnya <span class="class_name"></span>. Setelah itu garis akan terputus.

\A berarti karakter umpan baris.

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

0

Baik jawaban Vincent Robert dan Joey Adams valid. Jika Anda tidak ingin, bagaimanapun, ubah markup, Anda bisa menyisipkan<br /> menggunakan javascript.

Tidak ada cara untuk melakukannya dalam CSS tanpa mengubah markup.


Itu tidak akurat. Seseorang dapat menggunakan :afteratau :beforemelakukan itu.
Artur Bodera

0

Dalam kasus saya, saya perlu tombol input untuk memiliki jeda baris sebelum itu.
Saya menerapkan gaya berikut ke tombol dan itu berhasil:

clear:both;

0

Dalam hal ini membantu seseorang ...

Anda bisa melakukan ini:

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

Dengan css ini:

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

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

0

Menggunakan &nbsp;bukannya spasi akan mencegah istirahat.

<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

Ini berfungsi di Chrome:

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

0

Saya kira Anda tidak ingin menggunakan breakpoint karena itu akan selalu melanggar batas. Apakah itu benar? Jika demikian, bagaimana dengan menambahkan breakpoint <br />dalam teks Anda, kemudian berikan kelas seperti <br class="hidebreak"/>kemudian menggunakan kueri media tepat di atas ukuran yang Anda inginkan untuk istirahat untuk menyembunyikan<br /> sehingga pecah pada lebar tertentu tetapi tetap sejajar di atas lebar itu.

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/


Saya hanya memperhatikan bahwa Simon_Weaver memposting jawaban yang mirip dengan milik saya. Maaf Simon, tidak mencoba menjiplak jawaban Anda. Saya tidak membaca semua jawaban sebelum saya memposting jawaban saya dan karenanya tidak memperhatikan jawaban Anda. Pelajaran buruk saya ... saya pelajari .. Saya akan membaca jawaban lain sebelum memposting milik saya di masa depan.
Krankit

Jangan khawatir! Tetapi Anda harus menulis saya sebuah puisi. Dari w3schools.com/tags/tag_br.asp "Tip: The <br> tag is useful for writing addresses or poems."
Simon_Weaver

0

Kodenya bisa

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

CSS akan menjadi

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

-1

Jangan. Jika Anda ingin garis keras, gunakan satu.


3
+1 Ya, tetapi jika baris baru murni untuk digunakan presentasi display: block;.
Web_Designer

21
Saya tidak mengerti mengapa jawaban ini menerima suara apa pun. Jika saya memiliki kemampuan untuk menggunakan garis keras, saya tidak akan melihat pertanyaan ini.
trliner
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.