Abaikan <br> dengan CSS?

114

Saya bekerja di situs yang memiliki jeda baris seperti <br>di beberapa judul. Dengan asumsi saya tidak dapat mengedit HTML sumber, apakah ada cara dengan CSS saya dapat mengabaikan jeda ini?

Saya sedang mengoptimalkan situs untuk seluler, jadi saya tidak benar-benar ingin menggunakan JavaScript.

Evanss
sumber
1
@Ben Johnson mk2: Jawaban atas pertanyaan Anda: "Saya ingin solusi untuk jawaban @Aneesh Karthik C untuk firefox dan opera" adalah, bahwa hal itu tidak mungkin dilakukan dengan penggunaan brelemen! Alasannya sudah dijelaskan berkali-kali! Dalam jawaban saya, saya menunjukkan kepada Anda metode alternatif untuk mencapai tujuan dengan cara yang valid, kuat, dan lintas browser.
Netsurfer

Jawaban:

198

Dengan css, Anda dapat "menyembunyikan" tag br dan mereka tidak akan berpengaruh:

br {
    display: none;
}

Jika Anda hanya ingin menyembunyikan beberapa dalam tipe heading tertentu, buat saja css Anda lebih spesifik.

h3 br {
    display: none;
}
enobrev
sumber
11
Pastikan untuk melihat jawaban Aneesh juga, relevan dan memperbaiki masalah yang tidak dipertimbangkan oleh enobrev dalam karyanya.
Rick Calder
3
Setuju, jawaban Aneesh adalah tambahan yang fantastis. stackoverflow.com/a/18040142/14651
enobrev
2
Solusi ini tidak berfungsi untuk Firefox. Jika <br/> tidak memiliki spasi di sekitarnya, maka ini menggabungkan kata-kata di sekitar <br/> bersama. Berikut adalah contoh Anda dapat melihat pembahasannya di bawah
rahasia rahasia
1
Jika tujuan Anda adalah desain responsif, satu-satunya solusi lintas-browser adalah @ Netsurfer's. Itu tidak menjawab pertanyaan persis seperti yang dinyatakan, tetapi itu mencapai tujuan di semua browser modern.
Andrew Lundin
94

Catatan: Solusi ini hanya berfungsi untuk browser Webkit, yang salah menerapkan elemen semu ke tag yang menutup sendiri.

Sebagai tambahan dari jawaban di atas, perlu dicatat bahwa dalam beberapa kasus seseorang perlu memasukkan spasi daripada hanya mengabaikan <br>:

Misalnya jawaban di atas akan berubah

Monday<br>05 August

untuk

Monday05 August

seperti yang telah saya verifikasi saat mencoba memformat kalender acara mingguan saya. Spasi setelah "Senin" lebih disukai untuk disisipkan. Ini dapat dilakukan dengan mudah dengan memasukkan yang berikut ini ke dalam CSS:

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

Ini akan membuat

Monday<br>05 August

terlihat seperti

Monday 05 August

Anda dapat mengubah contentatribut br:aftermenjadi ', 'jika Anda ingin memisahkan dengan koma, atau meletakkan apapun yang Anda inginkan di dalamnya ' 'untuk menjadikannya pembatas! Ngomong-ngomong

Monday, 05 August

terlihat rapi ;-)

Lihat di sini untuk referensi.

Seperti pada jawaban di atas, jika Anda ingin membuatnya spesifik untuk tag, Anda bisa. Seperti jika Anda ingin properti ini berfungsi untuk tag <h3>, cukup tambahkan h3masing - masing sebelum brdan br:after, misalnya.

Ini bekerja paling umum untuk pseudo-tag.

Host-website-on-iPage
sumber
2
sangat sangat jenius!
jon
1
Bagus, benar-benar memikirkan tentang konsekuensi hanya dengan menonaktifkannya!
Rick Calder
10
Poin bagus tetapi ini tampaknya hanya berfungsi dengan browser Webkit (Chrome & Safari) dengan Firefox dan IE teknik ini tidak berfungsi, periksa jsfiddle.net/nicooprat/ZHxNA dengan Firefox dan IE ... ada ide bagaimana cara mengganti br dengan spasi sehingga berfungsi dengan semua braowser utama?
firepol
6
@firepol: Sebenarnya, Firefox dan IE melakukan hal-hal yang "benar" karena <br />salah satu elemen yang pseudo-element tidak seharusnya bekerja . Dan contenthanya bekerja pada elemen semu.
ScottS
7
Ini adalah solusi yang sangat salah, terutama karena apa yang telah ditulis oleh @ScottS. "Konten" seharusnya hanya bekerja dengan elemen pseudo, dan elemen semu tidak seharusnya bekerja dengan tag penutup sendiri. Ini mungkin berhasil untuk saat ini, tetapi saya tidak berani menyebut solusi ini bukti masa depan.
nd_macias
16

Jika Anda menambahkan gaya

br{
    display: none;
}

Maka ini akan berhasil. Tidak yakin apakah itu akan berfungsi di versi IE yang lebih lama.

Tim B James
sumber
3
ini telah diposting sebelumnya dan memiliki lebih sedikit suara .. kenapa?
Mr_Green
Kadang-kadang, kita diabaikan begitu saja; (
Tim B James
@TimBJames tidak berfungsi di FIREFOX Anda dapat memeriksa komentar mendetail saya di atas
shinesecret
12

Inilah cara saya melakukannya:

br { 
    display: inline;
    content: ' ';
    clear:none;
}
Neo
sumber
6

Anda dapat menggunakan spanelemen alih-alih brjika Anda ingin metode spasi putih berfungsi, karena ini bergantung pada elemen pseudo yang "tidak ditentukan" untuk elemen yang diganti.

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

Jeda baris hanya dicapai dengan menyetel elemen rentang yang sesuai ke display:block.

Dengan menggunakan ID dan / atau Kelas di markup HTML Anda, Anda dapat dengan mudah menargetkan setiap atau kombinasi elemen rentang dengan CSS atau menggunakan pemilih CSS seperti nth-child().

Jadi, Anda dapat, misalnya, menentukan break point yang berbeda dengan menggunakan kueri media untuk tata letak responsif.

Dan Anda juga dapat menambahkan / menghapus / beralih kelas dengan Javascript (jQuery).

"Keuntungan" dari metode ini adalah ketangguhannya - berfungsi di setiap browser yang mendukung elemen semu (lihat: Dapatkah saya menggunakan - konten yang dihasilkan CSS ).

Sebagai alternatif, dimungkinkan juga untuk menambahkan jeda baris melalui pseudo-elemen:

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

DEMO

Netsurfer
sumber
4
Apakah Anda melewatkan bagian pertanyaan ini: "Dengan asumsi saya tidak dapat mengedit html sumber"?
ScottS
1
@ ScottS: Tidak, saya tidak melakukannya. Mungkin Anda melewatkan bagian: 'Saya ingin solusi untuk jawaban @Aneesh Karthik C untuk firefox dan opera' (karena yang memulai bounty bukanlah OP). Dan jawabannya adalah, itu tidak mungkin <br>, setidaknya tidak dengan lintas-browser. Jadi saya menunjukkan alternatif.
Netsurfer
2
Tidak, saya tidak melewatkan bagian itu (OP itu berbeda dengan bounty dan fokus pada jawaban Aneesh). Tapi jawaban Aneesh dalam konteks keseluruhan pertanyaan, "Abaikan <br> dengan CSS?" Tampaknya agak jelas bahwa jika seseorang memiliki kontrol sebenarnya dari html, maka cukup menghapus yang <br>unsur memecahkan masalah (mungkin menggantinya dengan spasi). Jadi keseluruhan masalah yang menjadi perhatian pertanyaan secara keseluruhan adalah ketika seseorang tidak memiliki kendali atas html ; diperumit dengan ketentuan tambahan bahwa mereka benar-benar tidak ingin menggunakan javascript (dengan alasan apa pun) untuk menyelesaikannya.
ScottS
Pertanyaan "Bagaimana cara mengabaikan <br>dengan CSS?" sudah dijawab. Dan hanya jika Anda mengendalikan HTML itu tidak berarti, Anda ingin mengubahnya. Namun dalam desain responsif seringkali diinginkan untuk mengontrol jeda baris (selain pembungkus otomatis). Dan dalam kasus seperti itu, metode memiliki ruang putih atau tidak dikontrol oleh CSS (kueri media) setidaknya merupakan "satu metode" untuk mencapai tujuan.
Netsurfer
Ini bekerja lebih baik untuk saya sekarang karena solusi di atas tidak lagi berfungsi di firefox.
Christos Hrousis
3

Bagi saya terlihat lebih baik seperti ini:

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>

Ruslan P
sumber
1

Untuk itu Anda bisa melakukan seperti ini:

br{display: none;}

dan jika berada di dalam beberapa tag PRE, maka Anda bisa dan jika Anda ingin tag PRE berperilaku seperti elemen blok biasa, Anda dapat menggunakan CSS ini:

pre {white-space: normal;}

Atau Anda bisa mengikuti gaya Aneesh Karthik C seperti:

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

Saya pikir Anda mengerti

dawadisuren
sumber
Saya pikir Anda melewatkan poin yang disukai oleh elemen semu ::beforedan ::aftersetidaknya "tidak ditentukan" untuk "elemen yang diganti" br. Jadi tidak akan pernah ada perilaku browser yang konsisten yang dapat diandalkan! Satu-satunya hal yang dapat Anda lakukan adalah tidak menggunakan elemen pseudo dengan elemen ini!
Netsurfer
1

Sesuai pertanyaan Anda, untuk mengatasi masalah ini untuk Firefox dan Opera menggunakan pendekatan Aneesh Karthik C Anda perlu menambahkan atribut "float" right ".

Lihat contohnya di sini. CSS ini berfungsi di Firefox (26.0), Opera (12.15), Chrome (32.0.1700) dan Safari (7.0)

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

Saya harap ini akan menjawab pertanyaan Anda !!

rahasia bersinar
sumber
Properti konten hanya berpengaruh pada elemen semu CSS. Jadi itu sama sekali tidak berguna dalam demo Anda! Dan cara "menetralkan" a brsudah dijawab (lebih dari satu kali). Pertanyaannya adalah tentang ruang putih bersyarat . Dan karena ini membutuhkan penggunaan elemen pseudo, ini tidak berfungsibr .
Netsurfer
Jika Anda membaca pertanyaan dengan cermat. Anda akan mengerti jawabannya. Saya telah melihat jawaban di atas yang terbaik untuk dihindari <br> dengan hanya mengaturnya ke display: none. Tetapi untuk pertanyaan kedua di mana dia ingin mencari tahu bagaimana dia bisa mengatasi masalah yang datang dalam solusi FF dan Opera untuk Aneesh.
rahasia bersinar
Saya telah membaca tidak hanya pertanyaannya tetapi juga semua jawaban dan komentar dengan sangat hati-hati. Properti konten untuk brhanyalah omong kosong! Dan saya masih tidak bisa melihat apa hubungan sisa jawaban Anda dengan "ruang putih bersyarat dan brekas baris"? Mungkin bisa dijelaskan lebih lanjut, ya?
Netsurfer
1
Contoh Anda menyesatkan, karena Anda sudah memiliki ruang di sekitar brelemen. Jika Anda menghapusnya, Anda akan melihat itu tidak berfungsi untuk menambah ruang apa pun.
ScottS
1
Dalam contoh Anda, Anda memiliki tiga brelemen, dengan spasi sebelum dan sesudah elemen pertama dan terakhir. Ruang-ruang itulah yang membuat solusi Anda tampak berfungsi, padahal sebenarnya tidak. Saat Anda menghapus spasi tersebut, seperti yang saya lakukan dalam contoh saya yang telah direvisi, Anda dapat melihat bahwa solusi Anda tidak menambahkan spasi sama sekali di Firefox.
ScottS
0

Meskipun pertanyaan ini tampaknya sudah terpecahkan, jawaban yang diterima tidak menyelesaikan masalah untuk saya di Firefox. Firefox (dan mungkin IE, meskipun saya belum mencobanya) lewati spasi saat membaca konten dari tag "konten". Meskipun saya benar-benar memahami mengapa Mozilla melakukan itu, hal itu membawa banyak masalah. Solusi termudah yang saya temukan adalah menggunakan ruang yang tidak dapat dipecahkan, bukan yang biasa seperti yang ditunjukkan di bawah ini.

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

Coba lihat .

Santo Guevarra
sumber
1
Mengapa biola Anda tidak memiliki beforeelemen pada a br? Anda bahkan tidak memiliki brhtml di biola. Sebagian dari masalahnya adalah bahwa hal beforeitu tidak berfungsi pada a brdi beberapa browser.
ScottS
Itu adalah perilaku yang cukup diharapkan, seperti yang dinyatakan dalam spesifikasi: 2.5.1 Idiom parser umum
Netsurfer
Itu pasti aneh, itu berhasil ketika saya menerapkannya dalam proyek saya. Teks saya tidak semuanya HTML, konten yang saya ubah berasal dari database. Maaf jawaban saya tidak membantu.
Santo Guevarra
0

Ya, Anda bisa mengabaikan ini <br>. Anda mungkin memerlukan ini terutama dalam kasus desain responsif di mana Anda perlu menghapus jeda untuk perangkat seluler.

HTML

<h2>

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

</h2>

Contoh CSS untuk seluler

/* Resize the browser window to check */

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

Lihat Codepen ini:
https://codepen.io/fluidbrush/pen/pojGQyM

sikat cairan
sumber
-1

Anda cukup mengubahnya dalam komentar ..

Atau Anda bisa melakukan ini:

br {
display: none;
}

Tetapi jika Anda tidak menginginkannya mengapa Anda menaruhnya di sana?

BASE - Pemrograman
sumber