Cómo evitar saltos de línea en guiones en todos los navegadores


104

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 saltos de línea en los guiones en esos artículos.

¿Existe alguna forma de evitar saltos de línea en guiones en todos los navegadores?

¿O ckeditor tiene una opción para evitarlo?


Podría considerar cambiar la respuesta aceptada ya que la respuesta aceptada actual tiene una solución obsoleta
inorganik

Respuestas:


50

Me temo que no hay forma más sencilla de hacerlo de manera confiable que dividir el texto en "palabras" (secuencias de caracteres que no son espacios en blanco separados por espacios en blanco) y envolver cada "palabra" que contiene un guión dentro del nobrmarcado. Entonces, los datos de entrada como bla bla foo-bar bla blase convertirían en bla bla <nobr>foo-bar</nobr> bla bla.

Incluso podría considerar insertar nobrmarcas siempre que la "palabra" contenga cualquier cosa menos letras y dígitos. La razón es que algunos navegadores pueden incluso romper cadenas como “2/3” o “f (0)” (consulte mi página sobre las rarezas de los saltos de línea en los navegadores ).


35
La nobretiqueta no es estándar y el W3C la desaconseja enérgicamente. Ver w3.org/TR/html5/obsolete.html#non-conforming-features
derekerdmann

18
A diferencia de cualquier otro enfoque, el nobrmarcado funciona en todos los navegadores, funciona incluso cuando las hojas de estilo están deshabilitadas y funciona independientemente de la compatibilidad con caracteres especiales. ¿Tiene algún problema real ?
Jukka K. Korpela

18
¿Por qué no <span style = "white-space: nowrap"> </span>?
Brendan Byrd

6
@ JukkaK.Korpela, el problema es que los navegadores modernos pueden decidir dejar de admitirlo y pueden hacerlo sin violar la especificación HTML. Es una característica "debería", que es simplemente una sugerencia para implementar. Con respecto a las hojas de estilo, si un usuario ha deshabilitado las hojas de estilo, entonces espera no tener ningún estilo
mirhagk

3
He estado desarrollando sitios durante 10 años y ni siquiera sabía que PODRÍA deshabilitar las hojas de estilo en su navegador. ¿Quién lo hace realmente (aparte de las personas que optarían de manera similar por la autoflagelación de deshabilitar JavaScript de forma predeterminada en esta época)? Si tenemos que ser tan pedantes, ¿dónde se ofrece la solución alternativa?
John Rix

274

Puede usar el que es un GUIÓN SIN ROMPIMIENTO Unicode (U + 2011).

HTML: &#x2011;o&#8209;

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


4
Muchas gracias por tu respuesta. Pero lo que tenemos que hacer es evitar saltos de línea en ckeditor donde todo el contenido será ingresado por los usuarios finales. no podemos decirle a todo el mundo que ingrese un guión sin ruptura Unicode. ¿Existe alguna otra forma de evitar el salto de línea? ¿O ckeditor tiene una opción para convertir el guión automáticamente? Gracias de nuevo
Alan

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

14
Tenga cuidado con el soporte de fuentes limitado para U + 2011, consulte fileformat.info/info/unicode/char/2011/fontsupport.htm
Jukka K. Korpela

7
Si bien esto es ciertamente más elegante en teoría que enyesar nobretiquetas por todas partes, no funciona muy bien en la práctica. IE lo muestra como un guión, Safari agrega más espacio a su alrededor que un guión normal, y la mayoría de los editores de texto lo muestran como un signo de interrogación o un cuadro u otro carácter sin sentido.
Tgr

4
@jakev iría con white-space: nowraplo sugerido por derekerdmann. Por cierto, en FF / Win7, el guión tímido parece convertirse en un guión normal cuando se copia y pega fuera de Firefox, incluso si la aplicación de destino es compatible con Unicode.
Tgr

86

Una solución podría ser utilizar una spanetiqueta adicional y la white-spacepropiedad CSS. Simplemente defina una clase como esta:

.nowrap {
    white-space: nowrap;
}

Y luego agregue un intervalo con esa clase alrededor de su texto con guiones.

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

Este enfoque debería funcionar bien en todos los navegadores; las implementaciones con errores que se enumeran aquí son para otros valores de la white-spacepropiedad: http://reference.sitepoint.com/css/white-space#compatibilitysection


1
Muchas gracias por tu 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 <span> 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 con las exageraciones? Si es un título o algún otro elemento que siempre estará en una línea, entonces aplíquelo white-space: nowrapa todo el contenedor. De lo contrario, déjelo ir; En primer lugar, no hay razón para evitar saltos de línea con guiones para el contenido general y, en segundo lugar, no hay forma de que pueda hacer que lo que está buscando suceda automáticamente a menos que esté dispuesto a piratear CKEditor.
derekerdmann

10
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 conocen el signo menos).
Jukka K. Korpela

Esto funciona, pero el hecho de que funcione no es intuitivo, porque los guiones no son espacios en blanco. <nobr>es mucho más claro.
Dave Burton

2

No puede hacerlo sin editar cada instancia de 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, '‑') );

Vanilla JS:

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

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

0

Utilice la palabra carácter de unión ( &#8288;) alrededor del guión. También funciona en IE.

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

corregir guiones específicos ...

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

o todo ...

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

-1

Prueba este CSS:

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

7
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo a la pregunta para los lectores en el futuro, y es posible que esas personas no conozcan los motivos de su sugerencia de código. Por favor, trate también de no llenar su código con comentarios explicativos, ¡esto reduce la legibilidad tanto del código como de las explicaciones!
Ashish Ahuja
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.