ไม่สนใจ <br> กับ CSS?


115

ฉันกำลังทำงานกับไซต์ที่มีการแทรกตัวแบ่งบรรทัดเช่นเดียวกับ<br>ในหัวเรื่องบางส่วน สมมติว่าฉันไม่สามารถแก้ไขซอร์ส HTML ได้มีวิธีใดบ้างที่ CSS ฉันสามารถเพิกเฉยต่อช่วงพักเหล่านี้ได้

ฉันกำลังเพิ่มประสิทธิภาพไซต์บนมือถือดังนั้นฉันจึงไม่ต้องการใช้ JavaScript จริงๆ


1
@ Ben Johnson mk2: คำตอบสำหรับคำถามของคุณ: "ฉันต้องการคำตอบสำหรับ firefox และ opera ของ @Aneesh Karthik C" คือมันเป็นไปไม่ได้ด้วยการใช้brองค์ประกอบ! มีการอธิบายเหตุผลหลายครั้งแล้ว! ในคำตอบของฉันฉันได้แสดงให้คุณเห็นวิธีอื่นในการบรรลุเป้าหมายด้วยวิธีที่ถูกต้องแข็งแกร่งและข้ามเบราว์เซอร์
Netsurfer

คำตอบ:


198

ด้วย css คุณสามารถ "ซ่อน" แท็ก br และแท็กเหล่านี้จะไม่มีผล:

br {
    display: none;
}

หากคุณต้องการซ่อนเพียงบางส่วนภายในประเภทหัวเรื่องที่เฉพาะเจาะจงเพียงแค่ทำให้ css ของคุณเฉพาะเจาะจงมากขึ้น

h3 br {
    display: none;
}

11
อย่าลืมดูคำตอบของ Aneesh ด้วยมันมีความเกี่ยวข้องและแก้ไขปัญหาที่ enobrev ไม่ได้พิจารณาในเขา
Rick Calder

3
เห็นด้วยคำตอบของ Aneesh คือการเพิ่มที่ยอดเยี่ยม stackoverflow.com/a/18040142/14651
enobrev

2
โซลูชันนี้ใช้ไม่ได้กับ Firefox หาก <br/> ไม่มีช่องว่างรอบ ๆ ก็จะรวมคำรอบ ๆ <br/> เข้าด้วยกัน นี่คือตัวอย่างคุณสามารถดูการสนทนาเกี่ยวกับเรื่องนี้
ส่องแสง

1
หากเป้าหมายของคุณคือการออกแบบที่ตอบสนองได้โซลูชันข้ามเบราว์เซอร์เดียวคือ @ Netsurfer's ไม่ได้ตอบคำถามตรงตามที่ระบุไว้ แต่จะบรรลุเป้าหมายในเบราว์เซอร์สมัยใหม่ทั้งหมด
Andrew Lundin

94

หมายเหตุ: โซลูชันนี้ใช้ได้กับเบราว์เซอร์ Webkit เท่านั้นซึ่งใช้องค์ประกอบหลอกกับแท็กปิดตัวเองอย่างไม่ถูกต้อง

ในฐานะที่เป็นภาคผนวกของคำตอบข้างต้นเป็นที่น่าสังเกตว่าในบางกรณีเราจำเป็นต้องใส่ช่องว่างแทนที่จะเพิกเฉย<br>:

ตัวอย่างเช่นคำตอบข้างต้นจะเปลี่ยนไป

Monday<br>05 August

ถึง

Monday05 August

ตามที่ฉันได้ตรวจสอบแล้วในขณะที่พยายามจัดรูปแบบปฏิทินกิจกรรมรายสัปดาห์ ควรเว้นวรรคหลัง "Monday" สามารถทำได้อย่างง่ายดายโดยการแทรกสิ่งต่อไปนี้ใน CSS:

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

ซึ่งจะทำให้

Monday<br>05 August

ดูเหมือน

Monday 05 August

คุณสามารถเปลี่ยนcontentแอตทริบิวต์ในbr:afterการ', 'ถ้าคุณต้องการที่จะแยกด้วยเครื่องหมายจุลภาคหรือใส่อะไรที่คุณต้องการภายใน' 'ที่จะทำให้มันตัวคั่น! ยังไงซะ

Monday, 05 August

ดูเรียบร้อย ;-)

ดูที่นี่สำหรับการอ้างอิง

ดังคำตอบข้างต้นหากคุณต้องการกำหนดให้เฉพาะแท็กคุณสามารถทำได้ หากคุณต้องการให้พร็อพเพอร์ตี้นี้ทำงานกับแท็ก<h3>เพียงแค่เพิ่มh3แต่ละรายการก่อนbrและbr:afterเช่น

โดยทั่วไปจะใช้ได้กับแท็กหลอก


2
อัจฉริยะมาก!
จอน

1
ทำได้ดีจริงๆโดยคิดถึงผลที่ตามมาของการปิดใช้งาน!
Rick Calder

10
จุดดี แต่ดูเหมือนว่าจะใช้ได้กับเบราว์เซอร์ Webkit (Chrome & Safari) กับ Firefox และ IE เท่านั้นเทคนิคนี้ใช้ไม่ได้ตรวจสอบjsfiddle.net/nicooprat/ZHxNAด้วย Firefox และ IE ... แนวคิดวิธีการเปลี่ยน br ด้วยช่องว่างที่ใช้งานได้กับ braowsers หลักทั้งหมด?
firepol

6
@firepol: ที่จริง, Firefox และ IE กำลังทำสิ่งที่ "ถูกต้อง" เป็น<br />เป็นหนึ่งในองค์ประกอบที่หลอกองค์ประกอบไม่ควรจะทำงานใน และcontentใช้งานได้กับองค์ประกอบหลอกเท่านั้น
ScottS

7
นี่เป็นวิธีแก้ปัญหาที่ผิดมากโดยส่วนใหญ่เป็นเพราะสิ่งที่ @ScottS เขียนไว้แล้ว "เนื้อหา" ควรใช้งานได้เฉพาะกับองค์ประกอบหลอกและองค์ประกอบหลอกไม่ควรใช้กับแท็กปิดตัวเอง ตอนนี้อาจใช้ได้ผล แต่ฉันไม่กล้าเรียกวิธีนี้ว่าการพิสูจน์อนาคต
nd_macias

16

หากคุณเพิ่มสไตล์

br{
    display: none;
}

จากนั้นจะทำงาน ไม่แน่ใจว่าจะใช้งานได้กับ IE เวอร์ชันเก่าหรือไม่


3
นี่โพสต์ก่อนหน้านี้และมีคนโหวตน้อย.. มาได้ยังไง?
Mr_Green

บางครั้งเราก็เพิกเฉย (
Tim B James

@TimBJames มันไม่ทำงานใน FIREFOX คุณสามารถตรวจสอบความคิดเห็นโดยละเอียดของฉันด้านบน
ส่องแสง


7

คุณสามารถใช้spanองค์ประกอบแทนbrถ้าคุณต้องการให้เมธอด white space ทำงานได้เนื่องจากมันขึ้นอยู่กับองค์ประกอบหลอกซึ่ง "ไม่ได้กำหนด" สำหรับองค์ประกอบที่ถูกแทนที่

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

การสาธิต

display:blockแบ่งสายจะประสบความสำเร็จเพียงโดยการตั้งค่าองค์ประกอบช่วงที่เหมาะสมในการ

โดยการใช้รหัสและ / หรือการเรียนการสอนมาร์กอัป HTML ของคุณคุณสามารถกำหนดเป้าหมายทุกชุดเดียวหรือช่วงขององค์ประกอบโดย CSS หรือใช้ CSS nth-child()เตอร์เช่น

ดังนั้นคุณสามารถกำหนดจุดพักที่แตกต่างกันได้โดยใช้แบบสอบถามสื่อสำหรับรูปแบบที่ตอบสนอง

และคุณยังสามารถเพิ่ม / ลบ / สลับคลาสโดย Javascript (jQuery)

"ข้อได้เปรียบ" ของวิธีนี้คือความทนทาน - ใช้ได้กับทุกเบราว์เซอร์ที่รองรับองค์ประกอบหลอก (ดู: ฉันสามารถใช้ - เนื้อหาที่สร้างโดย CSS )

นอกจากนี้ยังเป็นไปได้ที่จะเพิ่มตัวแบ่งบรรทัดผ่านองค์ประกอบหลอก:

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

การสาธิต


4
คุณพลาดคำถามส่วนนี้ไปหรือไม่: "สมมติว่าฉันไม่สามารถแก้ไข html ต้นทางได้"
ScottS

1
@ScottS: ไม่ฉันไม่ได้ บางทีคุณอาจพลาดส่วน: 'ฉันต้องการวิธีแก้ปัญหาสำหรับคำตอบของ @Aneesh Karthik C สำหรับ firefox และ opera' (เนื่องจากผู้ที่เริ่มต้นรางวัลไม่ใช่ OP) และคำตอบก็คือมันเป็นไปไม่ได้<br>อย่างน้อยก็ไม่ใช่ข้ามเบราว์เซอร์ ดังนั้นฉันจึงแสดงทางเลือก
Netsurfer

2
ไม่ฉันไม่พลาดส่วนนั้น (OP นั้นแตกต่างจากเงินรางวัลและการมุ่งเน้นไปที่คำตอบของ Aneesh) แต่คำตอบของ Aneesh อยู่ในบริบทของคำถามทั้งหมดคือ "ละเว้น <br> ด้วย CSS?" ดูเหมือนว่าค่อนข้างชัดเจนว่าหากมีการควบคุมที่แท้จริงของ HTML แล้วก็ลบ<br>องค์ประกอบแก้ปัญหา (น่าจะแทนที่ด้วยช่องว่าง) ดังนั้นปัญหาทั้งหมดด้วยซึ่งคำถามที่เป็นทั้งเป็นห่วงเกี่ยวกับการเป็นหนึ่งเมื่อไม่ได้มีการควบคุมของ html ; ซับซ้อนโดยข้อกำหนดเพิ่มเติมที่พวกเขาไม่ต้องการใช้จาวาสคริปต์ (ไม่ว่าด้วยเหตุผลใดก็ตาม) เพื่อแก้ปัญหา
ScottS

คำถาม "จะเพิกเฉย<br>กับ CSS ได้อย่างไร" ได้รับคำตอบแล้ว และเฉพาะในกรณีที่คุณเป็นผู้ควบคุม HTML ที่ไม่ได้หมายความว่าคุณต้องการเปลี่ยนแปลง แต่ในการออกแบบที่ตอบสนองมักเป็นที่พึงปรารถนาที่จะควบคุมการแบ่งบรรทัด (นอกเหนือจากการตัดอัตโนมัติ) และในกรณีเช่นนี้วิธีการมีพื้นที่สีขาวหรือไม่มีการควบคุมโดย CSS (แบบสอบถามสื่อ) เป็นอย่างน้อย "หนึ่งวิธี" เพื่อให้บรรลุเป้าหมาย
Netsurfer

สิ่งนี้ทำงานได้ดีขึ้นสำหรับฉันตอนนี้โซลูชันข้างต้นไม่สามารถใช้งานได้ใน firefox อีกต่อไป
Christos Hrousis

3

สำหรับฉันดูดีกว่านี้:

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

สำหรับสิ่งนั้นคุณสามารถทำได้ดังนี้:

br{display: none;}

และหากอยู่ในแท็ก PRE คุณสามารถและหากคุณต้องการให้แท็ก PRE ทำงานเหมือนองค์ประกอบบล็อกทั่วไปคุณสามารถใช้ CSS นี้:

pre {white-space: normal;}

หรือคุณสามารถทำตามสไตล์ของAneesh Karthik C เช่น:

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

ฉันคิดว่าคุณเข้าใจแล้ว


ฉันคิดว่าคุณพลาดจุดที่หลอกองค์ประกอบเช่น::beforeและ::afterอย่างน้อย "ไม่ได้กำหนด" สำหรับ "องค์ประกอบแทนที่" brชอบ ดังนั้นจะไม่มีพฤติกรรมของเบราว์เซอร์ที่สม่ำเสมอที่ใคร ๆ ก็วางใจได้ สิ่งเดียวที่คุณทำได้คืออย่าใช้องค์ประกอบหลอกกับองค์ประกอบเหล่านี้!
Netsurfer

1

ตามคำถามของคุณในการแก้ปัญหานี้สำหรับ Firefox และ Opera โดยใช้วิธีAneesh Karthik Cคุณต้องเพิ่มแอตทริบิวต์ "float" right "

ตรวจสอบตัวอย่างที่นี่ CSS นี้ใช้ได้ใน Firefox (26.0), Opera (12.15), Chrome (32.0.1700) และ Safari (7.0)

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

หวังว่านี่จะตอบคำถามของคุณได้นะ !!


คุณสมบัติเนื้อหามีผลเฉพาะกับองค์ประกอบหลอก CSS ดังนั้นจึงไม่มีประโยชน์อย่างยิ่งในการสาธิตของคุณ! และวิธี "ทำให้เป็นกลาง" a brมีคำตอบแล้ว (มากกว่าหนึ่งครั้ง) คำถามที่เป็นเรื่องเกี่ยวกับพื้นที่สีขาวแบบมีเงื่อนไข และเนื่องจากต้องใช้องค์ประกอบหลอกจึงไม่สามารถใช้งานbrได้
Netsurfer

หากคุณอ่านคำถามอย่างละเอียด คุณจะเข้าใจคำตอบ ฉันได้เห็นคำตอบข้างต้นแล้วว่าเป็นวิธีที่ดีที่สุดในการหลีกเลี่ยง <br> โดยเพียงแค่ตั้งค่าให้แสดง: ไม่มี แต่ตามคำถามที่สองที่เขาต้องการทราบว่าเขาสามารถแก้ไขปัญหาที่กำลังจะเกิดขึ้นในโซลูชัน FF และ Opera for Aneesh ได้อย่างไร
shineecret

ฉันไม่เพียง แต่อ่านคำถามเท่านั้น แต่ยังอ่านคำตอบและความคิดเห็นทั้งหมดอย่างรอบคอบ คุณสมบัติเนื้อหาสำหรับbrเป็นเรื่องไร้สาระ! และฉันยังไม่เห็นว่าคำตอบที่เหลือของคุณเกี่ยวข้องกับ "ช่องว่างแบบมีเงื่อนไขและเส้นแบ่งบรรทัด" อย่างไร? ช่วยอธิบายเพิ่มเติมได้ไหมคะ
Netsurfer

1
ตัวอย่างของคุณทำให้เข้าใจผิดเนื่องจากคุณมีช่องว่างรอบbrองค์ประกอบอยู่แล้ว หากคุณลบออกคุณจะเห็นว่าการเพิ่มช่องว่างนั้นใช้งานไม่ได้
ScottS

1
ในตัวอย่างของคุณคุณมีสามbrองค์ประกอบโดยเว้นวรรคก่อนและหลังอันแรกและอันสุดท้าย เป็นช่องว่างเหล่านั้นที่ทำให้ดูเหมือนว่าโซลูชันของคุณใช้งานได้จริงซึ่งในความเป็นจริงแล้วมันไม่ได้เป็นเช่นนั้น เมื่อคุณลบช่องว่างเหล่านั้นตามที่ฉันทำในตัวอย่างที่แก้ไขแล้วคุณจะเห็นว่าโซลูชันของคุณไม่ได้เพิ่มช่องว่างใด ๆ เลยใน Firefox
ScottS

0

แม้ว่าคำถามนี้จะได้รับการแก้ไขแล้ว แต่คำตอบที่ยอมรับไม่ได้ช่วยแก้ปัญหาให้ฉันใน Firefox Firefox (และอาจเป็น IE แม้ว่าฉันจะไม่ได้ลอง) ข้ามช่องว่างในขณะที่อ่านเนื้อหาของแท็ก "เนื้อหา" ในขณะที่ฉันเข้าใจอย่างถ่องแท้ว่าทำไม Mozilla ถึงทำเช่นนั้น แต่ก็นำปัญหามาให้ วิธีแก้ปัญหาที่ง่ายที่สุดที่ฉันพบคือใช้ช่องว่างที่ไม่แตกหักแทนช่องว่างปกติดังที่แสดงด้านล่าง

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

ได้ดู .


1
ทำไมซอของคุณถึงไม่มีbeforeองค์ประกอบบน a br? คุณไม่มีbrhtml ในซอ ส่วนหนึ่งของปัญหาคือใช้beforeไม่ได้กับbrเบราว์เซอร์บางตัว
ScottS

นั่นเป็นพฤติกรรมที่ค่อนข้างคาดหวังตามที่ระบุไว้ในข้อมูลจำเพาะ: 2.5.1 สำนวน parser ทั่วไป
Netsurfer

ท่าจะแปลกอย่างแน่นอนมันได้ผลเมื่อฉันใช้มันในโครงการของฉัน อย่างไรก็ตามข้อความของฉันไม่ใช่ HTML ทั้งหมดเนื้อหาที่ฉันแก้ไขมาจากฐานข้อมูล ขออภัย anwser ของฉันไม่ได้ช่วยแล้ว
Santo Guevarra

0

ใช่คุณสามารถเพิกเฉยต่อสิ่งนี้<br>ได้ คุณอาจต้องใช้สิ่งนี้โดยเฉพาะอย่างยิ่งในกรณีของการออกแบบที่ตอบสนองซึ่งคุณต้องนำตัวแบ่งสำหรับอุปกรณ์เคลื่อนที่ออก

HTML

<h2>

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

</h2>

CSS สำหรับมือถือตัวอย่าง

/* Resize the browser window to check */

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

ตรวจสอบ Codepen นี้:
https://codepen.io/fluidbrush/pen/pojGQyM


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.