2012-01-06 25 views
65

Tenemos un ckeditor en nuestro CMS. Nuestros usuarios finales ingresarán algunos artículos largos a través de ese ckeditor. Necesitamos una forma de evitar el salto de línea en los guiones de esos artículos.Cómo evitar el salto de línea en guiones en todos los navegadores

¿Hay alguna forma de evitar el salto de línea en guiones en todos los navegadores?

o tiene ckeditor una opción para evitar eso?

Respuesta

33

Me temo que no hay forma más simple de hacerlo fiable que la división el texto a "palabras" (secuencias de caracteres no blancos separados por espacios en blanco) y envolviendo cada "palabra" que contiene un guion dentro del marcado nobr. Por lo tanto, los datos de entrada como bla bla foo-bar bla bla se convertirán en bla bla <nobr>foo-bar</nobr> bla bla.

Incluso podría considerar insertar el marcado nobr siempre que la "palabra" contenga algo más que letras y dígitos. La razón es que algunos navegadores incluso pueden romper cadenas como "2/3" o "f (0)" (vea mi página en oddities of line breaking in browsers).

+27

La etiqueta 'nobr' no es estándar, y el W3C lo desalienta por completo. Ver http://www.w3.org/TR/html5/obsolete.html#non-conforming-features – derekerdmann

+17

A diferencia de cualquier otro enfoque, el marcado 'nobr' funciona en todos los navegadores, funciona incluso cuando las hojas de estilo están deshabilitadas y funciona de forma independiente de apoyo a personajes especiales. ¿Hay un problema * real * con eso? –

+10

¿Por qué no ? –

184

You can use que es un Unicode INCREÍBLE HYPHEN (U + 2011).

HTML: &#x2011; o &#8209;

Véase también: http://en.wikipedia.org/wiki/Hyphen#In_computing

+3

Muchas gracias por su respuesta. Pero lo que tenemos que hacer es evitar el corte de línea en ckeditor donde todo el contenido será ingresado por los usuarios finales. no podemos decirle a todos que ingresen el guión de unicode sin interrupción. ¿Hay alguna otra forma de evitar el salto de línea? o tiene ckeditor una opción para convertir el guión automáticamente? Gracias de nuevo – Alan

+6

Puede hacer un reemplazo de cadena simple, reemplazando '-' con' -'. – deceze

+12

Tenga cuidado con el soporte limitado de fuentes para U + 2011, vea http://www.fileformat.info/info/unicode/char/2011/fontsupport.htm –

58

Una solución podría ser el uso de una etiqueta de span extra y la propiedad white-space CSS. Basta con definir una clase como esta:

.nowrap { 
    white-space: nowrap; 
} 

Y a continuación, añadir un lapso con esa clase alrededor de su texto dividido.

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

Este enfoque debería funcionar bien en todos los navegadores - los defectos de implementación enumeradas aquí son para otros valores de la propiedad white-space: http://reference.sitepoint.com/css/white-space#compatibilitysection

+1

Muchas gracias por su respuesta. Pero nuestro contenido de texto será ingresado por los usuarios finales a través de un ckeditor. no podemos decirles a todos que agreguen el alrededor de la palabra. ¿Hay alguna otra forma de lograrlo? Gracias de todos modos – Alan

+1

@ Alan - ¿Qué tipo de contenido están agregando que no se puede romper en hypens? Si es un título u otro elemento que siempre estará en una línea, entonces aplique 'white-space: nowrap' a todo el contenedor. De lo contrario, solo déjalo ir; primero, no hay razón para evitar saltos de línea con guiones para el contenido general, y segundo, no hay forma de que pueda obtener lo que está buscando que ocurra automáticamente a menos que esté dispuesto a piratear en CKEditor. – derekerdmann

+8

Hay muchas situaciones en las que un salto de línea después de un guión es malo o simplemente muy incorrecto, como en "F-1" o cuando un guión se usa como menos unario, como en "-42 °" (y la gente lo usa de esa manera , ya que no saben sobre el signo menos). –

1

probar esto

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

Si bien este fragmento de código puede resolver la pregunta, [incluyendo una explicación] (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. Por favor, intente no saturar su código con comentarios explicativos, ¡esto reduce la legibilidad tanto del código como de las explicaciones! –

+2

Esto no funciona en absoluto. – sbichenko

1

Usted no puede hacerlo sin necesidad de editar cada instancia HTML. En consecuencia, escribí algunos JS para reemplazarlos:

jQuery:

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

vainilla JS:

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

Me gusta la idea aquí, ya que no implica editar cada bit de HTML que pueda contener un guión.Sin embargo, sospecho que puede encontrarse con problemas de rendimiento al procesar cada fragmento de texto en una página completa como esta, especialmente si hay muchos elementos. –

Cuestiones relacionadas