Cách ngăn ngắt dòng ở dấu gạch ngang trên tất cả các trình duyệt


104

Chúng tôi có một ckeditor trên CMS của mình. Người dùng cuối của chúng tôi sẽ nhập một số bài báo dài qua ckeditor đó. Chúng ta cần một cách để ngăn chặn việc ngắt dòng ở dấu gạch ngang trên các bài báo đó.

Có cách nào để ngăn chặn ngắt dòng ở dấu gạch ngang trên tất cả các trình duyệt không?

hoặc ckeditor có tùy chọn nào để ngăn chặn điều đó không?


Bạn có thể cân nhắc thay đổi câu trả lời được chấp nhận vì câu trả lời được chấp nhận hiện tại có một giải pháp không được dùng nữa
inorganik

Câu trả lời:


50

Tôi e rằng không có cách nào đơn giản hơn để làm điều đó một cách đáng tin cậy hơn là tách văn bản thành “từ” (chuỗi các ký tự không có khoảng trắng được phân tách bằng khoảng trắng) và gói mỗi “từ” có chứa dấu gạch ngang bên trong nobrđánh dấu. Vì vậy, dữ liệu đầu vào như bla bla foo-bar bla blasẽ được chuyển sang bla bla <nobr>foo-bar</nobr> bla bla.

Bạn thậm chí có thể cân nhắc việc chèn nobrđánh dấu bất cứ khi nào “từ” chứa bất kỳ thứ gì ngoại trừ các chữ cái và chữ số. Lý do là một số trình duyệt thậm chí có thể ngắt các chuỗi như “2/3” hoặc “f (0)” (xem trang của tôi về những điểm kỳ lạ của việc ngắt dòng trong trình duyệt ).


35
Các nobrthẻ không phải là tiêu chuẩn, và khuyến khích mạnh mẽ bởi W3C. Xem w3.org/TR/html5/obsolete.html#non-conforming-features
derekerdmann

18
Không giống như bất kỳ cách tiếp cận nào khác, nobrđánh dấu hoạt động trên tất cả các trình duyệt, hoạt động ngay cả khi bảng định kiểu bị vô hiệu hóa và hoạt động độc lập với việc hỗ trợ các ký tự đặc biệt. Có một vấn đề thực sự với nó?
Jukka K. Korpela

18
Tại sao không <span style = "white-space: nowrap"> </span>?
Brendan Byrd

6
@ JukkaK.Korpela vấn đề với nó là các trình duyệt hiện đại có thể quyết định bỏ hỗ trợ cho nó và có thể làm như vậy mà không vi phạm đặc tả HTML. Đó là một tính năng "nên", chỉ là một thứ được đề xuất để triển khai. Liên quan đến các stylesheets, nếu người dùng có style sheets tàn tật, sau đó họ mong đợi không có bất kỳ phong cách
mirhagk

3
Tôi đã phát triển các trang web trong 10 năm và thậm chí không biết bạn CÓ THỂ tắt các bảng định kiểu trong trình duyệt của mình. Ai thực sự làm điều đó (ngoài những người tương tự sẽ chọn tự gắn cờ tắt JavaScript theo mặc định trong thời đại ngày nay)? Nếu chúng ta cần phải quá phức tạp, thì đâu là giải pháp thay thế được cung cấp?
John Rix

274

Bạn có thể sử dụng đây là một HYPHEN KHÔNG ĐỘT PHÁ Unicode (U + 2011).

HTML: &#x2011;hoặc&#8209;

Xem thêm: http://en.wikipedia.org/wiki/Hyphen#In_computing


4
Cảm ơn rất nhiều vì trả lời của bạn. Nhưng những gì chúng ta cần làm là ngăn chặn ngắt dòng trên ckeditor, nơi tất cả nội dung sẽ được nhập bởi người dùng cuối. chúng ta không thể yêu cầu mọi người nhập dấu gạch nối không ngắt unicode. Có cách nào khác để ngăn chặn ngắt dòng không? hoặc ckeditor có tùy chọn để chuyển đổi dấu gạch nối tự động không? Cảm ơn một lần nữa
Alan

9
Bạn có thể thực hiện thay thế chuỗi đơn giản, thay thế -bằng .
dối trá

14
Cẩn thận với việc hỗ trợ phông chữ giới hạn cho U + 2011, xem fileformat.info/info/unicode/char/2011/fontsupport.htm
Jukka K. Korpela

7
Trong khi điều này chắc chắn là thanh lịch hơn về mặt lý thuyết, sau đó dán nobrcác thẻ ở khắp nơi, nhưng nó không hoạt động tốt trong thực tế. IE hiển thị nó dưới dạng một dấu gạch ngang, Safari thêm nhiều không gian xung quanh nó hơn một dấu gạch ngang bình thường và hầu hết các trình soạn thảo văn bản hiển thị nó dưới dạng dấu chấm hỏi hoặc hộp hoặc ký tự vô nghĩa khác.
Tgr

4
@jakev Tôi sẽ đi white-space: nowraptheo đề xuất của derekerdmann. Btw trên FF / Win7, dấu gạch ngang mờ dường như được chuyển đổi thành một dấu gạch ngang thông thường khi sao chép và dán bên ngoài Firefox, ngay cả khi ứng dụng đích nhận biết được Unicode.
Tgr

86

Một giải pháp có thể là sử dụng một spanthẻ phụ và thuộc tính white-spaceCSS. Chỉ cần xác định một lớp như thế này:

.nowrap {
    white-space: nowrap;
}

Và sau đó thêm một khoảng với lớp đó xung quanh văn bản được gạch nối của bạn.

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

Cách tiếp cận này sẽ hoạt động tốt trên tất cả các trình duyệt - các triển khai lỗi được liệt kê ở đây dành cho các giá trị khác của thuộc white-spacetính: http://reference.sitepoint.com/css/white-space#compatibilitysection


1
Cảm ơn rất nhiều vì trả lời của bạn. Nhưng nội dung văn bản của chúng tôi sẽ được nhập bởi người dùng cuối thông qua một ckeditor. chúng tôi không thể yêu cầu mọi người thêm <span> xung quanh từ. Có cách nào khác để đạt được nó không? Dù sao cũng cảm ơn
Alan

1
@Alan - Họ đang thêm loại nội dung nào mà không thể ngắt quãng? Nếu tiêu đề hoặc một số phần tử khác luôn nằm trên một dòng, thì hãy áp dụng white-space: nowrapcho toàn bộ vùng chứa. Nếu không, chỉ cần để nó đi; thứ nhất, không có lý do gì để ngăn ngắt dòng bằng dấu gạch ngang đối với nội dung chung và thứ hai, không có cách nào bạn có thể khiến những gì bạn đang tìm kiếm tự động xảy ra trừ khi bạn sẵn sàng tấn công CKEditor.
derekerdmann

10
Có nhiều trường hợp ngắt dòng sau dấu gạch ngang là sai hoặc rất sai, chẳng hạn như trong “F-1” hoặc khi dấu gạch ngang được sử dụng làm dấu trừ một bậc, như trong “-42 °” (và mọi người sử dụng nó theo cách đó, vì họ không biết về dấu trừ).
Jukka K. Korpela

Điều này hoạt động, nhưng thực tế là nó hoạt động không trực quan, bởi vì dấu gạch nối không phải là khoảng trắng. <nobr>rõ ràng hơn nhiều.
Dave Burton

2

Bạn không thể làm điều đó nếu không chỉnh sửa mọi phiên bản HTML. Do đó, tôi đã viết một số JS để thay thế chúng:

jQuery:

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

Vanilla JS:

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

1
Tôi thích ý tưởng ở đây, vì nó không liên quan đến việc chỉnh sửa từng bit HTML có thể chứa dấu gạch ngang. Tuy nhiên, tôi nghi ngờ rằng bạn có thể gặp phải các vấn đề về hiệu suất xử lý từng bit văn bản trên toàn bộ trang như thế này, đặc biệt nếu có rất nhiều phần tử.
Sean the Bean,

0

Sử dụng ký tự nối từ ( &#8288;) xung quanh dấu gạch nối. Nó cũng hoạt động trong IE.

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

sửa các dấu gạch nối cụ thể ...

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

hoặc mọi thứ ...

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

-1

Hãy thử CSS này:

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

7
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Cũng vui lòng cố gắng không chèn mã của bạn bằng các nhận xét giải thích, điều này làm giảm khả năng đọc của cả mã và giải thích!
Ashish Ahuja
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.