Presentación de Dropflow
- Dropflow es un motor de layout CSS creado para explorar el alcance de estándares básicos de CSS (inline, block, float, positioning, tablas, etc.).
- Soporta implementaciones de layout de texto de alta calidad y puede mostrar múltiples idiomas del mundo.
- Puede usarse en el backend con Node y node-canvas para generar PDFs o imágenes, o en el navegador para renderizar texto enriquecido y con ajuste de línea en canvas.
Funciones principales
- Soporte para más de 30 propiedades complejas como
float
- Soporte para texto bidireccional y RTL
- Además de aceptar HTML y CSS, soporta una API de Hyperscript (
h()) para aplicar estilos como objetos
- Se deben registrar todos los buffers OpenType/TrueType
- Fallback de fuentes a nivel de grafema
- Soporte para diacríticos con color
- Saltos de línea preferidos (por ejemplo, mover el padding inicial a la siguiente línea)
- Shaping optimizado
- Los estilos heredados y en cascada no se calculan dos veces
- Maneja la mayor cantidad posible de casos límite de layout CSS
- Tipado completo
- Muchas pruebas
- Rápido
Reglas CSS compatibles
- Formato inline: propiedades como
color, direction, font-family, font-size, font-stretch, font-style, font-weight, line-height, text-align, vertical-align, white-space y otras están funcionales.
- Formato de bloque: las propiedades
clear y float están funcionales.
- Caja y posicionamiento: propiedades como
background-clip, background-color, border-color, border-style, border-width, top, right, bottom, left, box-sizing, display, height, margin, padding, position, width, z-index y otras están funcionales.
Cómo usarlo
- Dropflow funciona sobre un DOM con estilos heredados y calculados.
- Se usa la función
h() para crear el DOM y definir estilos como objetos comunes.
- Registrar las fuentes antes del layout es un paso obligatorio.
- Se puede hacer el layout y dibujar sobre el tamaño completo del canvas.
Características de rendimiento
- El rendimiento es el objetivo más importante después de la precisión.
- Se puede comprobar el rendimiento con varios ejemplos.
- Convertir HTML a imagen toma 9 ms en una MacBook Pro 2019 y 13 ms en una MacBook Pro 2012.
- Convertir 'The Little Prince' de HTML a imagen toma menos de 160 ms en una MacBook Pro 2019 y menos de 250 ms en una MacBook Pro 2012.
- Generar y hacer layout de una palabra de 10 caracteres (sin dibujar) toma menos de 25 µs en una MacBook Pro 2019 y menos de 50 µs en una MacBook Pro 2012.
- Con la API de Hyperscript se puede omitir el parseo de HTML y CSS y crear el DOM directamente para lograr el mejor rendimiento.
API
- El registro de fuentes y la creación del DOM son los dos primeros pasos.
- Se puede renderizar el DOM en canvas o usar funciones de bajo nivel si se desea conservar el layout.
HarfBuzz
- El layout de glifos es realizado por HarfBuzz compilado a WebAssembly.
- Esto permite alcanzar un nivel de precisión imposible al usar la API
measureText.
Agradecimientos
- dropflow no tiene dependencias en
package.json, pero fue posible gracias a muchos otros proyectos.
- Las dependencias de Javascript fueron ajustadas para el proyecto e incluidas en el repositorio.
Opinión de GN⁺
- Dropflow es una nueva herramienta para desarrolladores web que aborda la complejidad del layout CSS y ofrece un layout de texto consistente tanto en navegador como en backend.
- Este tipo de herramienta puede ser especialmente útil para desarrollar aplicaciones web internacionalizadas que necesitan soportar varios idiomas y fuentes.
- El uso de HarfBuzz puede mejorar mucho la precisión del renderizado de texto, aunque podría representar una barrera de entrada para desarrolladores no familiarizados con la tecnología WebAssembly.
- Otros proyectos con funciones parecidas incluyen bibliotecas de layout que usan CSS Grid y Flexbox, pero Dropflow se enfoca en un enfoque más tradicional de layout CSS.
- Antes de adoptar Dropflow, conviene evaluar si encaja bien con los requisitos del proyecto considerando rendimiento y compatibilidad.
3 comentarios
El título original era "Show HN: Dropflow, a CSS layout engine for node or <canvas>". Ahora aparece como "GN⁺: Presentación en HN: motor de diseño CSS para node o <canvas>, Dropflow</canvas>".
Como hay una etiqueta en el título, se rompe la parte del título en la página de detalle... jeje, hay que hacer escape...
Comentarios de Hacker News