Présentation de Dropflow
- Dropflow est un moteur de mise en page CSS créé pour explorer le périmètre des standards CSS fondamentaux (inline, block, float, positioning, table, etc.).
- Il prend en charge une implémentation de haute qualité de la mise en page du texte et permet l’affichage de nombreuses langues du monde.
- Il peut être utilisé côté backend avec Node et node-canvas pour générer des PDF ou des images, ou dans le navigateur pour rendre sur canvas du texte riche avec retour à la ligne.
Fonctionnalités principales
- Prise en charge de plus de 30 propriétés complexes, comme
float
- Prise en charge du texte bidirectionnel et RTL
- En plus d’accepter du HTML et du CSS, prise en charge d’une API Hyperscript (
h()) permettant de définir les styles sous forme d’objets
- Tous les buffers OpenType/TrueType doivent être enregistrés
- Fallback de police au niveau des graphèmes
- Prise en charge des signes diacritiques colorés
- Sauts de ligne souhaitables pris en charge (par ex. déplacement du padding de début à la ligne suivante)
- Shaping optimisé
- Les styles hérités et en cascade ne sont pas calculés deux fois
- Gestion d’autant de cas limites de mise en page CSS que possible
- Typage complet
- Beaucoup de tests
- Rapide
Règles CSS prises en charge
- Formatage inline : les propriétés telles que
color, direction, font-family, font-size, font-stretch, font-style, font-weight, line-height, text-align, vertical-align, white-space, etc. sont opérationnelles.
- Formatage block : les propriétés
clear et float sont opérationnelles.
- Boîtes et positionnement : les propriétés telles que
background-clip, background-color, border-color, border-style, border-width, top, right, bottom, left, box-sizing, display, height, margin, padding, position, width, z-index, etc. sont opérationnelles.
Utilisation
- Dropflow fonctionne sur un DOM avec des styles hérités et calculés.
- Le DOM est créé avec la fonction
h(), et les styles sont définis comme des objets ordinaires.
- L’enregistrement des polices avant la mise en page est une étape obligatoire.
- Il est possible d’effectuer la mise en page sur toute la taille du canvas puis de dessiner.
Caractéristiques de performance
- La performance est l’objectif le plus important après l’exactitude.
- Les performances peuvent être vérifiées à travers plusieurs exemples.
- Sur un MacBook Pro 2019, la conversion de HTML en image prend 9 ms, et sur un MacBook Pro 2012, 13 ms.
- La conversion de The Little Prince de HTML en image prend moins de 160 ms sur un MacBook Pro 2019 et moins de 250 ms sur un MacBook Pro 2012.
- La génération et la mise en page d’un mot de 10 caractères (sans le dessin) prennent moins de 25 µs sur un MacBook Pro 2019 et moins de 50 µs sur un MacBook Pro 2012.
- Avec l’API Hyperscript, il est possible d’atteindre les meilleures performances en sautant l’étape de parsing HTML et CSS pour créer directement le DOM.
API
- L’enregistrement des polices et la création du DOM constituent les deux premières étapes.
- Il est possible de rendre le DOM sur un canvas ou d’utiliser des fonctions de plus bas niveau si l’on souhaite conserver la mise en page.
HarfBuzz
- La mise en page des glyphes est assurée par HarfBuzz compilé en WebAssembly.
- Cela permet d’atteindre un niveau de précision impossible avec l’API
measureText.
Remerciements
- dropflow n’a pas de dépendances
package.json, mais il a été rendu possible grâce à de nombreux autres projets.
- Les dépendances Javascript ont été modifiées pour correspondre au projet puis intégrées au dépôt.
L’avis de GN⁺
- Dropflow est un nouvel outil destiné aux développeurs web pour gérer la complexité de la mise en page CSS et fournir une mise en page du texte cohérente à la fois dans le navigateur et côté backend.
- Ce type d’outil peut être particulièrement utile pour le développement d’applications web internationalisées devant prendre en charge diverses langues et polices.
- L’utilisation de HarfBuzz peut nettement améliorer la précision du rendu du texte, mais peut représenter une barrière à l’entrée pour les développeurs peu familiers avec la technologie WebAssembly.
- Parmi les autres projets offrant des fonctionnalités similaires, on trouve des bibliothèques de mise en page utilisant CSS Grid et Flexbox, mais Dropflow se concentre sur une approche plus traditionnelle de la mise en page CSS.
- Avant d’adopter Dropflow, il convient d’évaluer s’il correspond bien aux exigences du projet en tenant compte des performances et de la compatibilité.
3 commentaires
Le titre original était donc « Show HN: Dropflow, a CSS layout engine for node or <canvas> ». Maintenant, il apparaît comme « GN⁺: Présentation de HN : moteur de mise en page CSS pour node ou <canvas>, Dropflow</canvas> ».
Comme il y a des balises dans le titre, la partie titre de la page de détail s’affiche mal, haha. Il faut les échapper...
Commentaires Hacker News
node-canvassemble couvrir la partie dessin, et cela semble pouvoir prendre en charge la partie mise en page nécessaire dans une bibliothèque UI. S’interroge sur la difficulté d’implémenter CSS.