วิธีป้องกันการขีดเส้นใต้ขีดกลางในทุกเบราว์เซอร์


105

เรามี ckeditor บน CMS ของเรา ผู้ใช้ของเราจะป้อนบทความยาว ๆ ผ่าน ckeditor นั้น เราต้องการวิธีป้องกันการขึ้นบรรทัดใหม่ที่ขีดกลางของบทความเหล่านั้น

มีการป้องกันการแตกบรรทัดที่ขีดกลางบนเบราว์เซอร์ทั้งหมดหรือไม่

หรือ ckeditor มีทางเลือกในการป้องกันหรือไม่


คุณอาจพิจารณาเปลี่ยนคำตอบที่ยอมรับเนื่องจากคำตอบที่ยอมรับในปัจจุบันมีโซลูชันที่เลิกใช้แล้ว
inorganik

คำตอบ:


51

ฉันกลัวว่าจะไม่มีวิธีที่ง่ายกว่านี้ในการทำให้น่าเชื่อถือไปกว่าการแยกข้อความเป็น "คำ" (ลำดับของอักขระที่ไม่ใช่ช่องว่างคั่นด้วยช่องว่าง) และตัด "คำ" แต่ละคำที่มีเครื่องหมายยัติภังค์อยู่ภายในnobrมาร์กอัป ดังนั้นข้อมูลที่ป้อนbla bla foo-bar bla blaจะถูกเปลี่ยนไปbla bla <nobr>foo-bar</nobr> bla blaจะหันไป

คุณอาจพิจารณาแทรกnobrมาร์กอัปเมื่อใดก็ตามที่ "word" ประกอบด้วยตัวอักษรและตัวเลข สาเหตุก็คือเบราว์เซอร์บางตัวอาจทำลายสตริงเช่น“ 2/3” หรือ“ f (0)” (ดูหน้าของฉันเกี่ยวกับความแปลกประหลาดของการแตกบรรทัดในเบราว์เซอร์ )


36
nobrแท็กไม่ได้มาตรฐานและกำลังใจอย่างมากโดยของ W3C ดูw3.org/TR/html5/obsolete.html#non-conforming-features
derekerdmann

18
แตกต่างจากวิธีการอื่น ๆnobrมาร์กอัปใช้งานได้บนเบราว์เซอร์ทั้งหมดทำงานได้แม้ในขณะที่สไตล์ชีตถูกปิดใช้งานและทำงานโดยไม่ขึ้นกับการสนับสนุนอักขระพิเศษ มีปัญหาจริงหรือไม่
Jukka K. Korpela

18
ทำไมไม่ <span style = "white-space: nowrap"> </span>
Brendan Byrd

6
@ JukkaK.Korpela ปัญหาคือเบราว์เซอร์สมัยใหม่อาจตัดสินใจยกเลิกการสนับสนุนและสามารถทำได้โดยไม่ละเมิดข้อกำหนด HTML เป็นคุณลักษณะที่ "ควร" ซึ่งเป็นเพียงสิ่งที่แนะนำให้นำไปใช้ ในส่วนที่เกี่ยวกับสไตล์ชีตหากผู้ใช้ปิดใช้งานสไตล์ชีตพวกเขาคาดว่าจะไม่มีสไตล์ใด ๆ
mirhagk

3
ฉันพัฒนาไซต์มา 10 ปีแล้วและไม่รู้ด้วยซ้ำว่าคุณสามารถปิดใช้งานสไตล์ชีทในเบราว์เซอร์ของคุณได้ ใครเป็นคนทำ (นอกเหนือจากคนที่จะเลือกใช้การตั้งค่าสถานะตัวเองในการปิดใช้งาน JavaScript โดยค่าเริ่มต้นในยุคนี้) ถ้าเราต้องอวดดีขนาดนั้นจะมีทางเลือกอื่นให้เลือกได้ที่ไหน?
John Rix

275

คุณสามารถใช้ ซึ่งเป็น Unicode NON-BREAKING HYPHEN (U + 2011)

HTML: &#x2011;หรือ&#8209;

ดูเพิ่มเติมที่: http://en.wikipedia.org/wiki/Hyphen#In_computing


4
ขอบคุณมากสำหรับการตอบกลับของคุณ แต่สิ่งที่เราต้องทำคือป้องกันการแตกบรรทัดบน ckeditor ซึ่งผู้ใช้ปลายทางจะป้อนเนื้อหาทั้งหมด เราไม่สามารถบอกให้ทุกคนป้อนเครื่องหมายยัติภังค์แบบไม่ทำลาย Unicode ได้ มีวิธีอื่นในการป้องกันการแตกไลน์หรือไม่? หรือ ckeditor มีตัวเลือกในการแปลงยัติภังค์โดยอัตโนมัติหรือไม่ ขอบคุณอีกครั้ง
Alan

9
คุณสามารถทำการเปลี่ยนสตริงง่ายๆโดยแทนที่-ด้วย.
หลอกลวง

14
ระวังการรองรับแบบอักษรที่ จำกัด สำหรับ U + 2011 โปรดดูfileformat.info/info/unicode/char/2011/fontsupport.htm
Jukka K. Korpela

7
แม้ว่าสิ่งนี้จะสง่างามกว่าในทางทฤษฎี แต่การฉาบnobrแท็กทั่วทุกที่ แต่ก็ไม่ได้ผลดีนักในทางปฏิบัติ IE แสดงเป็นเครื่องหมายขีดกลาง Safari จะเพิ่มพื้นที่รอบ ๆ มากกว่าเส้นประปกติและโปรแกรมแก้ไขข้อความส่วนใหญ่จะแสดงเป็นเครื่องหมายคำถามหรือกล่องหรืออักขระที่ไม่มีความหมายอื่น ๆ
Tgr

4
@jakev ฉันจะไปwhite-space: nowrapตามคำแนะนำของ derekerdmann Btw บน FF / Win7 เส้นประขี้อายดูเหมือนจะถูกแปลงเป็นเส้นประปกติเมื่อคัดลอกและวางนอก Firefox แม้ว่าแอปพลิเคชันเป้าหมายจะเป็น Unicode-Aware
Tgr

87

วิธีแก้ปัญหาหนึ่งคือการใช้spanแท็กพิเศษและwhite-spaceคุณสมบัติ CSS เพียงกำหนดคลาสดังนี้:

.nowrap {
    white-space: nowrap;
}

จากนั้นเพิ่มช่วงกับคลาสนั้นรอบข้อความยัติภังค์ของคุณ

<p>This is the <span class="nowrap">anti-inflammable</span> model</p>

วิธีนี้ควรใช้งานได้ดีในทุกเบราว์เซอร์ - การใช้งานบั๊กกี้ที่ระบุไว้ที่นี่เป็นค่าอื่น ๆ ของwhite-spaceคุณสมบัติ: http://reference.sitepoint.com/css/white-space#compatibilitysection


1
ขอบคุณมากสำหรับการตอบกลับของคุณ แต่ผู้ใช้ปลายทางจะป้อนเนื้อหาข้อความของเราผ่าน ckeditor เราไม่สามารถบอกให้ทุกคนเพิ่ม <span> รอบ ๆ คำได้ มีวิธีอื่นอีกไหมที่จะทำให้สำเร็จ? ขอบคุณอย่างไรก็ตาม
Alan

1
@Alan - พวกเขาเพิ่มเนื้อหาประเภทใดที่ไม่สามารถแตกที่ไฮเพนได้? หากเป็นชื่อเรื่องหรือองค์ประกอบอื่น ๆ ที่มักจะอยู่ในบรรทัดเดียวให้ใช้white-space: nowrapกับคอนเทนเนอร์ทั้งหมด มิฉะนั้นก็ปล่อยมันไป ประการแรกไม่มีเหตุผลที่จะป้องกันการขึ้นบรรทัดใหม่ด้วยยัติภังค์สำหรับเนื้อหาทั่วไปและประการที่สองไม่มีทางที่คุณจะได้รับสิ่งที่คุณต้องการให้เกิดขึ้นโดยอัตโนมัติเว้นแต่คุณจะเต็มใจที่จะแฮ็กที่ CKEditor
derekerdmann

10
มีหลายสถานการณ์ที่เส้นแบ่งหลังยัติภังค์ไม่ดีหรือผิดพลาดมากเช่นใน "F-1" หรือเมื่อยัติภังค์ถูกใช้เป็นยูนารีลบเช่นเดียวกับ "-42 °" (และผู้คนก็ใช้แบบนั้น เนื่องจากพวกเขาไม่รู้เกี่ยวกับเครื่องหมายลบ)
Jukka K. Korpela

วิธีนี้ใช้งานได้ แต่ความจริงที่ว่ามันใช้งานได้ไม่เข้าใจง่ายเพราะยัติภังค์ไม่ใช่ช่องว่าง <nobr>ชัดเจนกว่ามาก
Dave Burton

2

คุณไม่สามารถทำได้โดยไม่ต้องแก้ไขทุกอินสแตนซ์ HTML ดังนั้นฉันจึงเขียน JS เพื่อแทนที่:

jQuery:

//replace hypens with no-breaking ones
$txt = $("#block-views-video-block h2");
$txt.text( $txt.text().replace(/-/g, '‑') );

วานิลลา JS:

function nonBrHypens(id) {
    var str = document.getElementById(id).innerHTML; 
    var txt = str.replace(/-/g, '‑');
    document.getElementById(id).innerHTML = txt;
}

1
ฉันชอบแนวคิดตรงนี้เนื่องจากไม่เกี่ยวข้องกับการแก้ไข HTML ทุกบิตที่อาจมียัติภังค์ อย่างไรก็ตามฉันสงสัยว่าคุณอาจประสบปัญหาด้านประสิทธิภาพในการประมวลผลข้อความทุกบิตในทั้งหน้าเช่นนี้โดยเฉพาะอย่างยิ่งหากมีองค์ประกอบจำนวนมาก
Sean the Bean

0

ใช้คำว่า joiner character ( &#8288;) รอบยัติภังค์ มันทำงานใน IE เช่นกัน

https://en.wikipedia.org/wiki/Word_joiner

แก้ไขยัติภังค์เฉพาะ ...

function fixicecream(text) {
    return text.replace(/ice-cream/g,'ice&#8288;-&#8288;cream'));
}

หรือทุกอย่าง ...

function fixhyphens(text) {
    return text.replace(/(\S+)-(\S+)/g,'$1&#8288;-&#8288;$2'));
}

-1

ลองใช้ CSS นี้:

word-break: break-all; 
-webkit-hyphens:none;
-moz-hyphens: none; 
hyphens: none;

7
แม้ว่าข้อมูลโค้ดนี้จะช่วยแก้ปัญหาได้ แต่คำอธิบายจะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้มาก โปรดจำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและบุคคลเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำโค้ดของคุณ โปรดพยายามอย่าเบียดโค้ดของคุณด้วยความคิดเห็นเชิงอธิบายซึ่งจะช่วยลดความสามารถในการอ่านโค้ดและคำอธิบาย!
Ashish Ahuja
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.