อะไรคือความแตกต่างระหว่าง“ & nbsp;” และ“”?


คำตอบ:


196

หนึ่งคือพื้นที่ไม่ทำลายและอื่น ๆ เป็นพื้นที่ปกติ ช่องว่างที่ไม่ทำลายหมายความว่าไม่ควรพันเส้นที่จุดนั้นเหมือนกับว่ามันจะไม่ถูกพันกลางคำ

นอกจากนี้เมื่อ Svend ชี้ให้เห็นในความคิดเห็นของเขาช่องว่างที่ไม่ทำลายจะไม่ยุบ


42
& nbsp; นอกจากนี้ยังมีที่ไม่ยุบตัวที่น่าจะเป็นลักษณะที่สำคัญที่สุดของการใช้งานของพวกเขา (อย่างน้อยว่าเป็นวิธีที่ผมมักจะใช้พวกเขาสิ่งที่ออกแผ่นที่ง่ายและรวดเร็ว)
วุนด์

48
Protip: โปรดอย่าใช้ 15% ในการเว้นวรรค ทำให้ฉันเสียสติเมื่อเห็นคนทำอย่างนั้น ใช้การขยาย CSS หรือระยะขอบ
Matthew Rapati

6
มันไดรฟ์ฉันบ้าเมื่อฉันเห็น Microsoft Word ทำที่เกินไป ...
จอชลี

@Amarghosh: เพียงแค่ชนิดของกูรูที่ผมอยากจะเป็น ... :)
ไบรอันรัสมุส

1
นอกจากนี้ยังมีเอนทิตีเว้นวรรคขนาดอื่น ๆ เช่น&hairsp      ที่คุณสามารถดูและทดลองได้ที่ [ jsfiddle.net/medmunds/4crt3c9j/]
Mark Gavagan

70

เอนทิตี สร้างพื้นที่ไม่แตกซึ่งใช้เมื่อคุณไม่ต้องการให้ตัวแบ่งบรรทัดอัตโนมัติที่ตำแหน่งนั้น ช่องว่างปกติมีรหัสอักขระ 32 ในขณะที่ช่องว่างไม่แตกมีรหัสอักขระ 160

ตัวอย่างเช่นเมื่อคุณแสดงตัวเลขที่มีช่องว่างเป็นตัวคั่นหลักพัน: 1 234 567 จากนั้นคุณใช้ช่องว่างแบบไม่ทำลายเพื่อให้ตัวเลขไม่สามารถแบ่งเป็นบรรทัดแยกได้ หากคุณแสดงสกุลเงินและมีช่องว่างระหว่างจำนวนเงินและสกุลเงิน: 42 SEK คุณต้องใช้ช่องว่างที่ไม่ทำลายเพื่อให้คุณไม่ได้รับจำนวนเงินในบรรทัดเดียวและสกุลเงินถัดไป


3
ตัวอย่างที่ดีของการใช้งาน ฉันกำลังมองหาตัวเอง แต่ไม่สามารถคิดได้
Pete

48

นอกจากคำตอบอื่น ๆ ที่นี่การเว้นวรรคแบบไม่แบ่งจะไม่ถูก "ยุบ" เหมือนกับการเว้นวรรคปกติ ตัวอย่างเช่นทั้งสอง

<p>Word1          Word2</p>

และ

<p>Word1 Word2</p>

จะแสดงผลเหมือนกันบนเบราว์เซอร์ใด ๆ ในขณะที่

<p>Word1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Word2</p>

จะทำให้ช่องว่างเมื่อแสดงผล


ไม่ฉันก็จบด้วย & amp; ตลอด. ไม่ได้แปลความหมายของ & amp แต่แปลความหมายของ & nbsp
แกรมเพอร์โรว์

34

ไม่ได้คำตอบมากเท่ากับตัวอย่าง ...

ตัวอย่าง # 1:

<div style="width:45px; height:45px; border: solid thin red; overflow: visible">
    Hello&nbsp;There
</div>  

ตัวอย่างที่ 2:

<div style="width:45px; height:45px; border: solid thin red; overflow: visible">
    Hello There
</div>

และเชื่อมโยงไปยังซอ


3
ไม่จำเป็นต้องเหลียวมองคำตอบอื่น IMHO 9 ปียังคงใช้ได้
snr

10

คุณสามารถดูตัวอย่างการทำงานได้ที่นี่:

http://codepen.io/anon/pen/GJzBxo

และ

http://codepen.io/anon/pen/LVqBQo

div เดียวกัน, ข้อความเดียวกัน, "ช่องว่าง" ที่แตกต่างกัน

<div style="width: 500px; background: red"> [loooong text with spaces]</div>

VS

<div style="width: 500px; background: red"> [loooong text with &nbsp;]</div>

คุณช่วยอธิบายฉันหน่อยได้ไหมทำไม downvote คำตอบนี้
alberto-bottarini

ฉันได้ลงคะแนนแล้ว ฉันคิดว่ามันไม่ได้อธิบายอะไร อย่างไรก็ตามคุณกำลังชี้ให้เห็นภาพสิ่งที่เป็นประโยชน์
Nishant

1
ดังนั้นคำถามและคำตอบควรอยู่ในตัวเอง การเชื่อมโยงออกไปข้างนอก codepen จะยังได้รับอนุญาต, ถ้าคำตอบที่เต็มรูปแบบนอกจากนี้ยังรวมอยู่ในการโพสต์โดยตรง เพื่อให้เป็นไปตามนโยบาย SO editโพสต์ของคุณเพื่อรวมเอาท์พุทผลลัพธ์ของรหัสในคำตอบของคุณหรือเพื่อเพิ่ม codepen รุ่นฝังตัวของ SO ดังนั้นผู้เยี่ยมชมสามารถเรียกใช้โค้ดและดูผลลัพธ์โดยไม่ต้องออกไปที่หน้าภายนอก เหตุผลสำหรับนโยบายที่มีในตัวเองคือหากลิงก์ไม่สามารถเข้าถึงได้คำตอบจะไร้ประโยชน์ นอกจากนี้ยังเป็น UX ที่ไม่ดีที่จะต้องให้ผู้ใช้ออกไปเพื่อรับคำตอบ
SherylHohman

6

อักขระช่องว่างสีขาวปกติหลายรายการ (ช่องว่างตัวจัดรูปแบบและตัวแบ่งบรรทัด) ถือเป็นอักขระช่องว่างสีขาวเดียว :

สำหรับองค์ประกอบ HTML ทั้งหมดยกเว้นPREลำดับของ white space แยก "word" (เราใช้คำว่า "word" ที่นี่เพื่อหมายถึง "sequences ของอักขระเว้นวรรคที่ไม่ใช่ white") เมื่อจัดรูปแบบข้อความตัวแทนผู้ใช้ควรระบุคำเหล่านี้และจัดเรียงตามแบบแผนของภาษาที่เขียน (สคริปต์) และสื่อเป้าหมาย

ดังนั้น

foo    bar

จะปรากฏเป็น

foo bar

แต่ไม่มีช่องว่างหยุดแสดงเสมอ ดังนั้น

foo&‍nbsp;&‍nbsp;&‍nbsp;bar

จะปรากฏเป็น

foo   bar

5

ดังที่ได้กล่าวไปแล้วคุณจะไม่ได้รับการขึ้นบรรทัดใหม่โดยที่มี "ช่องว่างไม่พัก"

นอกจากนี้ระวังองค์ประกอบที่มีเพียง "" อาจปรากฏอย่างไม่ถูกต้องโดยที่ & nbsp; จะทำงาน. ใน 6 อย่างน้อย (เท่าที่ฉันจำได้ IE7 มีปัญหาเดียวกัน) หากคุณมีองค์ประกอบตารางที่ว่างเปล่ามันจะไม่ใช้สไตล์สำหรับตัวอย่างเช่นเส้นขอบกับองค์ประกอบหากไม่มีเนื้อหาหรือสีขาวเท่านั้น ช่องว่าง ดังนั้นสิ่งต่อไปนี้จะไม่ถูกแสดงด้วยเส้นขอบ:

<td></td>
<td> <td>

โดยที่เส้นขอบจะปรากฏในตัวอย่างนี้:

<td>& nbsp;</td>

อืม - ต้องใส่ในพื้นที่จำลองเพื่อให้มันแสดงผลได้อย่างถูกต้องที่นี่


@Stewart - ฉันลองกับแอมป์แล้วมันทำงานในข้อความ แต่ไม่ได้อยู่ในโค้ด exmple - เพราะมันยังเขียนส่วน "แอมป์" ออกมาด้วย
Pete

ที่แปลกมาก. เห็นได้ชัดว่าเป็นข้อผิดพลาด
สจ๊วต

2

ตัวแรกไม่ถูกถือว่าเป็น white space โดยตัวแยกวิเคราะห์ HTML ตัวที่สองคือ ด้วยเหตุนี้ "" จึงไม่รับประกันว่าจะแสดงภายในมาร์กอัพ HTML บางอันในขณะที่พื้นที่ที่ไม่สามารถแตกได้จะปรากฏขึ้นเสมอ


1

&nbsp; ควรจัดการเป็นช่องว่าง

&nbsp;&nbsp; ควรได้รับการจัดการเป็นสองช่องว่าง

'' สามารถจัดการได้เป็นช่องว่างที่ไม่น่าสนใจ

'' + '' สามารถจัดการเป็น '' เดียว


1

&nbsp; วางซ้อนกันได้ซึ่งหมายความว่าคุณสามารถสร้างช่องว่างหลายช่องพร้อมกัน

HTML จะแยกวิเคราะห์หนึ่งช่องว่าง '' เท่านั้นและจะลดที่เหลือ ...

ถ้าคุณต้องการห้าช่องว่างคุณจะวาง 5 x &nbsp;


0

@Zoidberg ถูกต้องตัวอย่างเช่น:

<h1>title</h1> <h2>date</h2>

จะไม่แสดงช่องว่างระหว่างมาร์กอัปส่วนหัวด้วย

& nbsp ; 

จะทำพื้นที่ :)


0

เมื่อมีการขึ้นบรรทัดใหม่บรรทัดจะไม่แตกเมื่อคุณใช้ $ bnsp เพราะมันเป็น 'พื้นที่ไม่ทำลาย' สิ่งนี้อาจมีความสำคัญหากคุณมีชื่อผลิตภัณฑ์บางอย่างหรือเช่นนั้นจะต้องเขียนด้วยกันเสมอ

อาจเป็นเรื่องที่น่าสนใจหากคุณ (ต้อง) ใช้ช่องว่างเป็นตัวคั่นในตัวเลขเช่น 12344567 ที่แสดง 12 344 567 ในฝรั่งเศส หากไม่มีเส้นจะแบ่งกลางจำนวนน่าเกลียดมาก ทดสอบ: 12 344 567


0

TLDR; นอกจากคำตอบที่ยอมรับแล้ว; หนึ่งคือโดยนัยและอีกหนึ่งชัดเจน

เมื่อเบราว์เซอร์ของคุณเขียนหรือสร้างโดยแอปพลิเคชัน / ไลบรารี / กรอบงานจะเป็นการดีที่สุดที่จะตีความความหมาย HTML ของคุณ (ซึ่งอาจแตกต่างกันไปในแต่ละเบราว์เซอร์) เมื่อคุณใช้รหัสเอนทิตี HTML คุณกำลังเจาะจงเบราว์เซอร์มากขึ้น คุณกำลังบอกอย่างชัดเจนว่าคุณต้องการแสดงตัวละครให้กับผู้ใช้ (และไม่ใช่ว่าคุณกำลังเว้นระยะ HTML เพื่อความสะดวกในการอ่านสำหรับนักพัฒนา)

เพื่อให้เป็นรูปธรรมมากขึ้นหาก HTML ออกเป็น:

<html>
   <title>hello</title>
   <body>
       <p>
           Tell me and I will forget. Teach me and I
           may remember.  Involve me and I will learn.
       </p>
   </body>
</html>

เบราว์เซอร์จะแสดงเพียงหนึ่งช่องว่างระหว่างคำเหล่านี้ทั้งหมด (แม้แต่คำที่มีการเยื้องเพื่อให้นักพัฒนาอ่านง่ายขึ้น

อย่างไรก็ตามหากคุณใส่สิ่งเดียวกันและเปลี่ยน<p>แท็กเป็น:

<p>Hello&nbsp;&nbsp;&nbsp;There</p>

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


ลอง: <p>Hello &nbsp; There</p>หรือ<p>Hello &nbsp; &nbsp; &nbsp; There</p>(ถ้าการแตกไม่ใช่ปัญหาคุณสามารถบันทึกบิตได้โดยใช้ช่องว่างปกติก่อนและหลังทุกครั้ง&nbsp;)
Cyborg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.