Tüm tarayıcılarda tirelerde satır sonu nasıl engellenir


106

CMS'mizde bir editörümüz var. Son kullanıcılarımız bu editör aracılığıyla bazı uzun makaleler girecek. Bu makalelerdeki tirelerde satır kesilmesini önlemek için bir yola ihtiyacımız var.

Tüm tarayıcılarda tirelerde satır kesilmesini önlemek için herhangi bir yol var mı?

veya editörün bunu önleme seçeneği var mı?


Kabul edilen mevcut yanıtın kullanımdan kaldırılmış bir çözümü olduğu için kabul edilen yanıtı değiştirmeyi düşünebilirsiniz
inorganik

Yanıtlar:


52

Korkarım bunu güvenilir bir şekilde yapmanın, metni "kelimelere" ayırmaktan (boşlukla ayrılmış beyaz boşluk olmayan karakter dizileri) ve nobrişaretlemenin içine tire içeren her "kelimeyi" kaydırmaktan daha basit bir yolu yoktur . Bu nedenle, giriş verileri bla bla foo-bar bla bladöndürülecek bla bla <nobr>foo-bar</nobr> bla bla.

Hatta nobr"kelime" harf ve rakamlardan başka bir şey içerdiğinde işaretleme eklemeyi bile düşünebilirsiniz . Bunun nedeni, bazı tarayıcıların "2/3" veya "f (0)" gibi dizeleri bile kırabilmesidir ( tarayıcılarda satır kırmanın tuhaflıkları hakkındaki sayfama bakın ).


36
nobrEtiketi, standart ve şiddetle W3C cesaretini değildir. Bkz. W3.org/TR/html5/obsolete.html#non-conforming-features
derekerdmann

18
Diğer yaklaşımların aksine, nobrişaretleme tüm tarayıcılarda çalışır, stil sayfaları devre dışı bırakıldığında bile çalışır ve özel karakterlere verilen destekten bağımsız olarak çalışır. Bir var mı gerçek onunla sorun?
Jukka K. Korpela

18
Neden <span style = "white-space: nowrap"> </span> değil?
Brendan Byrd

6
@ JukkaK.Korpela bununla ilgili sorun, modern tarayıcıların bunun için desteği bırakmaya karar verebilmesi ve bunu HTML spesifikasyonunu ihlal etmeden yapabilmesidir. Bu, yalnızca uygulanması önerilen bir şey olan bir "gerekir" özelliğidir. Stil sayfalarına gelince, bir kullanıcı stil sayfalarını devre dışı bıraktıysa, o zaman herhangi bir stile sahip olmamasını bekler
mirhagk

3
10 yıldır site geliştiriyorum ve tarayıcınızdaki stil sayfalarını devre dışı bırakabileceğinizi bile bilmiyordum. Bunu gerçekten kim yapıyor (bu gün ve yaşta JavaScript'i varsayılan olarak devre dışı bırakmanın benzer şekilde kendi kendini işaretlemesini tercih eden kişiler dışında)? Bu kadar bilgiç olmamız gerekiyorsa, alternatif çözüm önerisi nerede?
John Rix

275

Unicode KIRILMAYAN HİPHEN (U + 2011) olanı kullanabilirsiniz .

HTML: &#x2011;veya&#8209;

Ayrıca bkz .: http://en.wikipedia.org/wiki/Hyphen#In_computing


4
Cevabın için çok teşekkür ederim. Ancak yapmamız gereken, tüm içeriğin son kullanıcılar tarafından girileceği keditörde satır kesilmesini önlemek. herkese unicode bölünemez kısa çizgi girmesini söyleyemeyiz. Hat kopmasını önlemenin başka bir yolu var mı? veya ckeditor kısa çizgiyi otomatik olarak dönüştürme seçeneğine sahip mi? Tekrar teşekkürler
Alan

9
Sen yerine basit bir dize değiştirme yapabilir -ile .
deceze

14
U + 2011 ile sınırlı yazı tipi desteği dikkat bkz fileformat.info/info/unicode/char/2011/fontsupport.htm
Jukka K. Korpela

7
Bu, teoride kesinlikle daha zarif olsa da, nobretiketlerin her yere yapıştırılmasından sonra pratikte pek işe yaramıyor. IE bunu bir çizgi olarak görüntüler, Safari, etrafına normal bir tireden daha fazla alan ekler ve çoğu metin düzenleyicisi bunu bir soru işareti veya kutusu veya başka anlamsız karakter olarak görüntüler.
Tgr

5
@jakev derekerdmann'ın white-space: nowrapönerdiği gibi giderdim. FF / Win7'de Btw, hedef uygulama Unicode uyumlu olsa bile, Firefox dışında kopyalanıp yapıştırıldığında utangaç çizgi normal bir kısa çizgiye dönüştürülmüş gibi görünüyor.
Tgr

88

Çözümlerden biri, fazladan bir spanetiket ve white-spaceCSS özelliği kullanmak olabilir . Sadece şöyle bir sınıf tanımlayın:

.nowrap {
    white-space: nowrap;
}

Ve sonra, tireli metninizin etrafına bu sınıfla bir aralık ekleyin.

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

Bu yaklaşım tüm tarayıcılarda gayet iyi çalışmalıdır - burada listelenen hatalı uygulamalar white-spacemülkün diğer değerleri içindir : http://reference.sitepoint.com/css/white-space#compatibilitysection


1
Cevabın için çok teşekkür ederim. Ancak metin içeriğimiz son kullanıcılar tarafından bir editör aracılığıyla girilecektir. Herkese kelimenin etrafına <span> eklemesini söyleyemeyiz. Bunu başarmanın başka yolu var mı? Yine de teşekkürler
Alan

1
@Alan - Hipenleri kıramayan ne tür içerik ekliyorlar? Her zaman tek satırda olacak bir başlık veya başka bir öğeyse, white-space: nowraptüm kapsayıcıya uygulayın. Aksi takdirde, bırak gitsin; birincisi, genel içerik için kısa çizgilerle satır sonlarını engellemenin bir nedeni yoktur ve ikincisi, CKEditor'u hacklemeye istekli değilseniz, aradığınız şeyin otomatik olarak gerçekleşmesini sağlamanın bir yolu yoktur.
derekerdmann

10
"F-1" de olduğu gibi kısa çizgiden sonra satır kesmesinin kötü veya çok yanlış olduğu birçok durum vardır veya "-42 °" gibi kısa çizgi tekli eksi olarak kullanıldığında (ve insanlar bunu bu şekilde kullanır, eksi işaretini bilmedikleri için).
Jukka K. Korpela

Bu işe yarar, ancak işe yaraması sezgisel değildir, çünkü tireler beyaz boşluk değildir. <nobr>çok daha net.
Dave Burton

2

Her HTML örneğini düzenlemeden bunu yapamazsınız. Sonuç olarak, onları değiştirmek için bazı JS yazdım:

jQuery:

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

Vanilya JS:

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

1
Tire içerebilecek her bir HTML parçasının düzenlenmesini gerektirmediği için buradaki fikri beğendim. Bununla birlikte, özellikle çok sayıda öğe varsa, sayfanın tamamında bunun gibi her bir metni işlerken performans sorunlarıyla karşılaşabileceğinizi düşünüyorum.
Sean Bean

1

Tire etrafında birleştirici karakteri ( &#8288;) kullanın . IE'de de çalışıyor.

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

belirli kısa çizgileri düzelt ...

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

veya her şey ...

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

-1

Bu CSS'yi deneyin:

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

7
Bu kod parçacığı soruyu çözebilirken, bir açıklama eklemek, yayınınızın kalitesini artırmaya gerçekten yardımcı olur. Gelecekte okuyucular için soruyu yanıtladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceklerini unutmayın. Lütfen kodunuzu açıklayıcı yorumlarla doldurmamaya çalışın, bu hem kodun hem de açıklamaların okunabilirliğini azaltır!
Ashish Ahuja
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.