Suave guión en HTML (vs )


¿Cómo resuelves el problema con guiones suaves en tus páginas web? En un texto puede haber palabras largas que tal vez desee romper la línea con un guion. Pero no quieres que el guion muestre si toda la palabra está en la misma línea.

De acuerdo con los comentarios en esta página <wbr> es una "sopa de etiquetas inventada por Netscape"no estándar. Parece que &shy; también tiene problemas con el cumplimiento de las normas. Parece que no hay manera de obtener una solución de trabajo para todos navegadores .

¿Cuál es tu forma de manejar guiones suaves y por qué lo elegiste? ¿Existe una solución preferida o una mejor práctica?


Ver Discusión relacionada SO aquí.
Author: Community, 2008-10-22

11 answers

Desafortunadamente, el soporte de &shy es tan inconsistente entre navegadores que realmente no se puede usar.

QuirksMode tiene razón there no hay una buena manera de usar guiones suaves en HTML en este momento. A ver qué puedes hacer para ir sin ellos.

2013 editar: Según QuirksMode, &shy; ahora funciona / es compatible con todos los navegadores principales.

 104
Author: Marco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-20 22:12:39

Feb 2015 summary (partially updated Nov 2017)

Todos funcionan bastante bien, &#173; lo bordea ya que Google todavía puede indexar las palabras que lo contienen.

  • En los navegadores: &shy; y &#173; ambos se muestran como se esperaba en los principales navegadores (incluso antiguo IE!). <wbr> no es compatible con las versiones recientes de IE (10 o 11) y no funciona correctamente en Edge.
  • Cuando se copian y pegan desde los navegadores: (probado en 2015) como se espera para &shy; y &#173; para Chrome y Firefox en Mac, en Windows (10), mantiene los caracteres y pega guiones duros en el bloc de notas y guiones suaves invisibles en aplicaciones que los admiten. IE (win7) siempre pega con guiones, incluso en IE10, y Safari (Mac) copia de una manera que pega como guiones en algunas aplicaciones (por ejemplo, MS Word), pero no en otras
  • Buscar en la página funciona para &shy; y {[0] } en todos los navegadores excepto IE, que solo coincide con coincidencias copiadas y pegadas exactas (incluso hasta IE11)
  • Motores de búsqueda: Google compara las palabras que contienen &#173; con las palabras escritas normalmente. A partir de 2017, parece que ya no coincide con las palabras que contienen &shy;. Yandex parece ser el mismo. Bing y Baidu tampoco parecen coincidir.

Pruébalo

Para pruebas en vivo actualizadas, aquí hay algunos ejemplos de palabras únicas con guiones suaves.

  • &shy; - confumbabbl&shy;ication&shy;ism - confumbabblicationism
    • ..............................................................................................................confumbabblicationism
    • ..................................................................................................................confumbabblicationism

<wbr> - donfounbabbl<wbr>ication<wbr>ism. Este sitio elimina <wbr/> de la salida. Aquí hay un jsbin.com fragmento de código para probar .

  • &#173; - eonfulbabbl&#173;ication&#173;ism - eonfulbabblicacionismo
    • .................................................................................................................eonfulbabblicacionismo
    • ....................................................................................................................eonfulbabblicacionismo

Aquí están sin guiones tímidos (esto es para copiar y pegar en la prueba de búsqueda en la página; escrito de una manera que no rompa el pruebas de motores de búsqueda):

ZZZconfumbabblicationismZZZdonfounbabblicationismZZZeonfulbabblicationismZZZ

Mostrar a través de los navegadores

Éxito: se muestra como una palabra normal, excepto donde debe romperse, cuando se rompe y se divide en guiones en el lugar especificado.

Fallo: se muestra inusualmente, o no se rompe en el lugar previsto.

  • Chrome (40.0.2214.115, Mac): &shy; éxito, <wbr> éxito, &#173; éxito
  • Firefox (35.0.1, Mac): &shy; éxito, <wbr> éxito, &#173; éxito
  • Safari (6.1.2, Mac): &shy; éxito, <wbr> aún no probado, &#173; éxito
  • Edge (Windows 10): &shy; éxito, <wbr> fail (romper pero sin guion), &#173; success
  • IE11 (Windows 10): &shy; éxito, <wbr> fail (sin interrupción), &#173; success
  • IE10 (Windows 10): &shy; éxito, <wbr> fail (sin interrupción), &#173; success
  • IE8 (Windows 7): errático - a veces, ninguno de ellos funciona en absoluto y todos solo siguen css word-wrap. A veces, parece que todos funcionan. Aún no se ha encontrado un patrón claro de por qué.
  • IE7 (Windows 7): &shy; éxito, <wbr> éxito, &#173; éxito

Copiar y pegar en los navegadores

Éxito: copiar y pegar la palabra completa, sin difuminarla. (probado en Mac pegando en la búsqueda del navegador, MS Word 2011 y Sublime Text)

Error: pegar con guion, espacio, salto de línea o con caracteres basura.

  • Chrome (40.0.2214.115, Mac): &shy; éxito, <wbr> success, &#173; success
  • Firefox (35.0.1, Mac): &shy; éxito, <wbr> éxito, &#173; éxito
  • Safari (6.1.2, Mac): &shy; fail en MS Word (pega todos como guiones), éxito en otras aplicaciones <wbr> fallo, &#173; fail en MS Word (pega todos como guiones), éxito en otras aplicaciones
  • IE10 (Win7): &shy; fail pega todos como guiones, <wbr> fallo, &#173; fail pega todos como guiones
  • IE8 (Win7): &shy; fail pega todos como guiones, <wbr> fallo, &#173; fail pega todos como guiones
  • IE7 (Win7): &shy; fail pega todos como guiones, <wbr> fallo, &#173; fail pega todos como guiones

Búsqueda de coincidencia

Actualizado en noviembre de 2017. <wbr> no se ha probado porque el CMS de StackOverflow lo eliminó.

Éxito: las búsquedas en el conjunto, palabra sin guiones encontrar esta página.

Fallo: los motores de búsqueda solo encuentran esta página en las búsquedas de los segmentos rotos de las palabras, o una palabra con guiones.

  • Google: &shy; falla, &#173; tiene éxito
  • Bing: &shy; falla, &#173; falla
  • Baidu: &shy; fails, &#173; fails (puede hacer coincidir fragmentos dentro de cadenas más largas pero no las palabras por sí solas que contienen un &#173; o &shy;)
  • Yandex: &shy; falla, &#173; tiene éxito (aunque es posible que coincida con un fragmento de cadena como Baidu, no 100% seguro)

Encontrar en la página a través de los navegadores

Éxito y fracaso como búsqueda de búsqueda.

  • Chrome (40.0.2214.115, Mac): &shy; éxito, <wbr> éxito, &#173; éxito
  • Firefox (35.0.1, Mac): &shy; éxito, <wbr> éxito, &#173; éxito
  • Safari (6.1.2, Mac): &shy; éxito, <wbr> éxito, &#173; éxito
  • IE10 (Win7): &shy; fail solo coincide cuando ambos contienen guiones tímidos, <wbr> success, &#173; fail solo coincide cuando ambos contienen guiones tímidos
  • IE8 (Win7): &shy; fail solo coincide cuando ambos contienen guiones tímidos, <wbr> success, &#173; fail solo coincide cuando ambos contienen guiones tímidos
  • IE7 (Win7): &shy; fail solo coincide cuando ambos contienen guiones tímidos, <wbr> success, &#173; fail solo coincide cuando ambos contienen guiones tímidos
 37
Author: user568458,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-27 12:53:12

Hay un esfuerzo continuo para estandarizar la separación de sílabas en CSS3.

Algunos navegadores modernos, especialmente Safari y Firefox, ya soportan esto. Aquí hay una buena y actualizada referencia sobre el soporte del navegador.

Una vez que la partición CSS se implementa universalmente, esa sería la mejor solución. Mientras tanto, puedo recomendar Hyphenator: un script JS que descubre cómo dividir el texto en guiones de la manera más adecuada para un navegador en particular.

Guion:

  • se basa en Franklin M. Liangs algoritmo de partición, comúnmente conocido de LaTeX y OpenOffice.
  • utiliza la partición CSS3 cuando está disponible,
  • inserta automáticamente {[0] } en la mayoría de los otros navegadores,
  • soporta múltiples idiomas,
  • es altamente configurable,
  • retrocede con gracia en caso de que javascript no esté habilitado.

Lo he usado y funciona muy bien!

 28
Author: Dominik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-10 12:56:17

Utilizo &shy;, insertado manualmente cuando sea necesario.

Siempre encuentro una pena que la gente no use técnicas porque hay algún navegador-tal vez antiguo o extraño-alrededor del cual no los maneja de la manera en que fueron especificados. Encontré que &shy; está funcionando correctamente en los navegadores recientes de Internet Explorer y Firefox, eso debería ser suficiente. Puede incluir una comprobación del navegador que le diga a la gente que use algo maduro o continúe bajo su propio riesgo si vienen con algún extraño navegador.

La silabificación no es tan fácil y No puedo recomendar que se la deje a un Javascript. Es un tema específico del idioma y puede necesitar ser revisado cuidadosamente por el deskman si no desea que su texto se vuelva irritante. Algunos idiomas, como el alemán, forman palabras compuestas y es probable que provoquen problemas de descomposición. E. g. Spargelder (germ. dinero ahorrado, pl.) puede, por reglas de syllabification, ser envuelto en dos lugares (Spar-gel-der). Sin embargo, envolviéndolo en el segunda posición, gira la primera parte para aparecer como Spargel- (germ. espárragos), activando un concepto completamente engañoso en la cabeza del lector y por lo tanto debe evitarse.

¿Y qué pasa con la cadena Wachstube? Podría significar "cuarto de guardia" (Wach-stu-be) o "tubo de cera" (Wachs-tu-be). Probablemente también encontrará otros ejemplos en otros idiomas. Debe intentar proporcionar un entorno en el que deskman pueda ser apoyado en la creación de un texto bien silabificado, corrección de cada palabra crítica.

 18
Author: Paramaeleon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-07 19:27:16

Es muy importante notar que, a partir de HTML5, <wbr> y &shy; no se supone que hacer lo mismo!

Guiones suaves

&shy; es un guion suave, es decir, U + 00AD: GUION SUAVE. Por ejemplo,

innehålls&shy;förteckning

Podría traducirse como

innehållsförteckning

O como

innehålls-
förteckning

A partir de hoy, los guiones suaves funcionan en Firefox, Chrome e Internet Explorer.

El elemento wbr

El elemento wbr es un oportunidad de salto de palabra, que no mostrará un guion si se produce un salto de línea. Por ejemplo,

ABCDEFG<wbr/>abcdefg

Podría traducirse como

ABCDEFGabcdefg

O como

ABCDEFG
abcdefg

A partir de hoy, este elemento funciona en Firefox y Chrome.

 10
Author: Andreas Rejbrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-20 18:05:44

La entidad espacio de ancho cero se puede usar en lugar de la etiqueta <wbr> de manera confiable en prácticamente todas las plataformas.

&#8203;

También es útil la entidad word joiner, que se puede usar para prohibir una ruptura. (Inserte entre cada carácter de una palabra, excepto donde desee el descanso.)

&#8288;

Con estos dos, puedes hacer cualquier cosa.

 4
Author: AVL geek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-12 00:38:41

Esta es una solución crossbrowser que estaba buscando hace un rato que se ejecuta en el cliente y usando jQuery:

(function($) { 
  $.fn.breakWords = function() { 
    this.each(function() { 
      if(this.nodeType !== 1) { return; } 

      if(this.currentStyle && typeof this.currentStyle.wordBreak === 'string') { 
        //Lazy Function Definition Pattern, Peter's Blog 
        //From http://peter.michaux.ca/article/3556 
        this.runtimeStyle.wordBreak = 'break-all'; 
      } 
      else if(document.createTreeWalker) { 

        //Faster Trim in Javascript, Flagrant Badassery 
        //http://blog.stevenlevithan.com/archives/faster-trim-javascript 

        var trim = function(str) { 
          str = str.replace(/^\s\s*/, ''); 
          var ws = /\s/, 
          i = str.length; 
          while (ws.test(str.charAt(--i))); 
          return str.slice(0, i + 1); 
        }; 

        //Lazy Function Definition Pattern, Peter's Blog 
        //From http://peter.michaux.ca/article/3556 

        //For Opera, Safari, and Firefox 
        var dWalker = document.createTreeWalker(this, NodeFilter.SHOW_TEXT, null, false); 
        var node,s,c = String.fromCharCode('8203'); 
        while (dWalker.nextNode()) { 
          node = dWalker.currentNode; 
          //we need to trim String otherwise Firefox will display 
          //incorect text-indent with space characters 
          s = trim( node.nodeValue ).split('').join(c); 
          node.nodeValue = s; 
        } 
      } 
    }); 

    return this; 
  }; 
})(jQuery); 
 2
Author: anthonyv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-19 05:28:04

Sugiero usar wbr, para que el código se pueda escribir así:

<p>这里有一段很长,很长的<wbr
></wbr>文字;这里有一段</p>

No conducirá el espacio entre los caracteres, mientras que &shy; no detendrá los espacios creados por los saltos de línea.

 2
Author: Weijing Jay Lin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-15 23:22:22

Utilicé el carácter unicode de guion suave con éxito en algunos navegadores de escritorio y móviles para resolver el problema.

El símbolo unicode es \u00AD y es bastante fácil de insertar en la cadena unicode de Python como s = u'Языки и методы програм\u00ADми\u00ADро\u00ADва\u00ADния'.

Otra solución es insertar el carácter unicode en sí, y la cadena de origen se verá perfectamente normal en editores como Sublime Text, Kate, Geany, etc. (el cursor sentirá el símbolo invisible).

Los editores hexadecimales de herramientas internas pueden automatizar esta tarea fácilmente.

Un kludge fácil es usar caracteres raros y visibles, como ¦, que es fácil de copiar y pegar, y reemplazarlo en guion suave usando, por ejemplo, script frontend en $(document).ready(...). Código fuente como s = u'Языки и методы про¦гра¦м¦ми¦ро¦ва¦ния'.replace('¦', u'\u00AD') es más fácil de leer que s = u'Языки и методы про\u00ADг\u00ADра\u00ADм\u00ADми\u00ADро\u00ADва\u00ADния'.

 1
Author: dmitry_romanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-12 01:12:18

A veces los navegadores web parecen ser más indulgentes si se utiliza la cadena Unicode &#173; en lugar de la entidad &shy;.

 0
Author: Tommy Kronkvist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-20 21:33:26

Si tiene mala suerte y todavía tiene que usar JSF 1, entonces la única solución es usar , no funciona.

 0
Author: Jaap D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-30 07:29:21