Me gustaría mostrar <text>
en SVG lo que se ajustaría automáticamente al contenedor de <rect>
la misma manera que el texto HTML llena los <div>
elementos. ¿Hay una manera de hacerlo? No quiero colocar las líneas con moderación usando <tspan>
s.
108
Aquí tienes una alternativa:
Teniendo en cuenta que, aunque se puede informar que ForeignObject es compatible con esa cadena de características, no hay garantía de que se pueda mostrar HTML porque no es requerido por la especificación SVG 1.1. Por el momento, no hay una cadena de características para el soporte de objetos html-in-foreigno. Sin embargo, todavía es compatible con muchos navegadores, por lo que es probable que sea necesario en el futuro, quizás con una cadena de características correspondiente.
Tenga en cuenta que el elemento 'textArea' en SVG Tiny 1.2 admite todas las características estándar de svg, por ejemplo, relleno avanzado, etc., y que puede especificar el ancho o el alto como automático, lo que significa que el texto puede fluir libremente en esa dirección. ForeignObject actúa como ventana gráfica de recorte.
Nota: si bien el ejemplo anterior es contenido SVG 1.1 válido, en SVG 2 se ha eliminado el atributo 'requiredFeatures', lo que significa que el elemento 'switch' intentará representar el primer elemento 'g' independientemente de que sea compatible con SVG 1.2 'textArea 'elementos. Consulte las especificaciones del elemento conmutador SVG2 .
fuente
xhtml:div
lugar dediv
, pero eso podría deberse a d3.js. No pude encontrar ninguna referencia útil sobre TextFlow, ¿existe (todavía) o solo estaba en algún borrador?TextPath puede ser bueno para algunos casos.
fuente
Basándome en el código de @Mike Gledhill, he dado un paso más y he añadido más parámetros. Si tiene un SVG RECT y desea que el texto se ajuste dentro de él, esto puede ser útil:
fuente
boxwidth = parseInt(boxObject.getAttribute('width'))
solo aceptaría ancho en píxeles, mientras queboxwidth = parseInt(boxObject.getBBox().width)
, aceptaría cualquier tipo de unidad de medidaEsta funcionalidad también se puede agregar usando JavaScript. Carto.net tiene un ejemplo:
http://old.carto.net/papers/svg/textFlow/
Otra cosa que también puede ser útil son las áreas de texto editables:
http://old.carto.net/papers/svg/gui/textbox/
fuente
El siguiente código está funcionando bien. Ejecute el fragmento de código que hace.
Tal vez se pueda limpiar o hacer que funcione automáticamente con todas las etiquetas de texto en SVG.
fuente
He publicado el siguiente tutorial para agregar algunos ajustes de palabras falsos a un elemento de "texto" SVG aquí:
Envoltorio de palabras SVG - ¿Mostrar tapón?
Solo necesita agregar una función JavaScript simple, que divide su cadena en elementos "tspan" más cortos. A continuación, se muestra un ejemplo de cómo se ve:
Espero que esto ayude !
fuente