NextPDF implémente le rendu CSS conformément aux spécifications publiées par le W3C. Cette page recense chaque module CSS du corpus de spécifications de NextPDF et consigne l’état réel de prise en charge de chaque module dans le pipeline de rendu, tel qu’il ressort de l’audit de vérité.
Cette révision résulte de l’audit de vérité Wave 4 B2 (section 4.4 du plan). Les badges de la révision structurelle précédente étaient des marqueurs non vérifiés. Chaque ligne a été reclassée ici à partir de preuves réelles présentes sur disque (src/Html/, tests/, tests/Wpt/corpus/), des ADR de changements cassants v8/v9 et de l’audit interne de couverture des propriétés CSS. L’honnêteté a primé sur la couverture : lorsqu’un badge devait être abaissé, il l’a été.
Quatre badges classent chaque ligne, selon le contrat de vérification :
- Vérifié — implémentation
src/Html/ plus une fixture automatisée dédiée et substantielle : une suite au niveau des propriétés comptant trois fichiers ou plus sous tests/Unit/Html/<Module>/, ou un fragment de corpus Web Platform Tests d’au moins cinquante fixtures sous tests/Wpt/corpus/. Aucune référence PDF de référence (« golden ») n’est encore raccordée par module CSS ; les lignes vérifiées utilisent donc le profil de reproductibilité structural (équivalence d’assertions PHPUnit), jamais bitwise.
- Revendiqué — le comportement du module est implémenté dans
src/Html/ (chemin source cité), mais la fixture dédiée est peu fournie, partagée ou absente. Chaque ligne revendiquée qui dispose d’une implémentation concrète a un ticket de comblement.
- Non pris en charge — hors périmètre du pipeline de rendu PDF statique. API uniquement disponibles à l’exécution ou dans le navigateur, runtimes de défilement/d’animation et travaux abandonnés par le W3C. La raison est consignée.
- Inconnu — le module figure dans le corpus, mais aucune preuve d’implémentation ou de fixture n’a pu être identifiée. L’audit n’a jamais surévalué une ligne pour gonfler le décompte.
Le badge partial de la révision structurelle a été retiré : chaque ancienne ligne partielle a été reclassée en claimed (implémentation présente, pas de fixture dédiée) ou verified.
| Badge | Signification |
|---|
verified | src/Html/ + suite de fixtures dédiée (≥3 fichiers) ou fragment WPT (≥50 fixtures) ; passe de façon déterministe sous le profil structural. |
claimed | Preuves d’implémentation dans src/Html/, pas de fixture dédiée. Ticket de comblement suivi. |
not-supported | Explicitement exclu du périmètre PDF statique. Raison consignée. |
unknown | Aucune preuve déterminable. Pas de surévaluation. |
La colonne Confiance est un indicateur honnête et non binaire de la solidité des preuves qui justifient le badge affiché (high / medium / low), indépendamment du badge lui-même.
NextPDF prend en charge les modules CSS listés ci-dessous aux niveaux indiqués. Les lignes Vérifié disposent d’une suite de fixtures automatisée dédiée ou d’un fragment de corpus WPT substantiel qui atteste le comportement de NextPDF, et passent de façon déterministe sous le profil de reproductibilité structural. Les lignes Revendiqué ont des preuves d’implémentation dans src/Html/, mais pas encore de fixture dédiée ; chacune est suivie dans le ticket de suivi #614. Les lignes Non pris en charge documentent des limites de périmètre explicites pour la cible PDF statique.
Il n’existe aucune référence PDF de référence (« golden ») par module CSS dans cette révision ; aucune ligne ne revendique une reproductibilité à l’octet près. Les lignes laissées vides sont interdites par le contrat de vérification — lorsque la prise en charge ne peut pas être déterminée, la ligne est unknown.
| Statut | Modules | Confiance (élevée / moyenne / faible) |
|---|
| Vérifié | 12 | 8 / 4 / 0 |
| Revendiqué | 49 | 0 / 35 / 14 |
| Non pris en charge | 67 | 62 / 5 / 0 |
| Inconnu | 39 | 0 / 0 / 39 |
| Total | 167 | 70 / 44 / 53 |
Le bloc summary de la révision structurelle était contradictoire en interne : il déclarait 148 au total (18 verified / 11 partial / 11 claimed / 53 not-supported / 55 unknown), alors que le fichier contenait en réalité 167 lignes de modules dont les propres étiquettes totalisaient 34 verified / 13 partial / 13 claimed / 68 not-supported / 39 unknown. Cet audit a corrigé le total réel à 167 et a reclassé chaque ligne à partir des preuves présentes sur disque : le nombre de lignes vérifiées est passé de 34 lignes affichées comme telles à 12 lignes étayées. Cette réduction est le résultat correct d’un audit honnête, pas une régression. Le delta complet before/after figure dans le fichier annexe interne au dépôt _css-matrix-truth-report.md.
La révision structurelle a étiqueté à tort trois capacités actives comme supprimées ou non prises en charge. Pour l’enum ExperimentalFeature, ADR-027 et ADR-028 n’ont retiré que les marqueurs opt-in ; les capacités elles-mêmes restent LIVE, actives par défaut :
- Subgrid (
css_grid_2) — LIVE ; CssFeatureFlags::$layoutSubgrid actif par défaut. Était étiqueté à tort « subgrid hard-removed v9.0.0 ».
- Requêtes
@container (css_contain_2) — répartition à l’exécution explicitement inchangée par ADR-028 ; opt-out du drapeau préservé. Était étiqueté à tort « hard-removed v9.0.0 ».
writing-mode: vertical-lr (css_writing_modes_3) — actif par défaut et stable depuis v7.0.0 ; ADR-027 n’a fait qu’achever la poignée de main de dépréciation. Était étiqueté à tort « deprecated/removed v8.0.0 ».
Le jeu de lignes par module, lisible par machine, se trouve dans le fichier interne au dépôt css-support-matrix-data.yaml et fait foi. Cette page en est la version lisible par un humain, regroupée par catégorie. Les composants Astro consomment directement le YAML lors de la génération de la documentation.
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Flexible Box Layout (css_flexbox_1) | 1 | CR | Vérifié | élevée |
CSS Grid Layout (css_grid_1) | 1 | REC | Vérifié | élevée |
CSS Grid Layout — Subgrid (css_grid_2) | 2 | CR | Revendiqué | moyenne |
CSS Grid Layout — Masonry (css_grid_3) | 3 | ED | Non pris en charge | élevée |
CSS Display (css_display_3) | 3 | CR | Revendiqué | moyenne |
CSS Display (css_display_4) | 4 | ED | Inconnu | faible |
CSS Positioned Layout (css_position_3) | 3 | WD | Vérifié | élevée |
CSS Positioned Layout (css_position_4) | 4 | ED | Inconnu | faible |
CSS Box Alignment (css_align_3) | 3 | WD | Revendiqué | moyenne |
CSS Box Sizing (css_sizing_3) | 3 | CR | Revendiqué | faible |
CSS Box Sizing (css_sizing_4) | 4 | ED | Inconnu | faible |
CSS Box Model (css_box_3) | 3 | WD | Revendiqué | moyenne |
CSS Box Model (css_box_4) | 4 | ED | Inconnu | faible |
CSS Multi-column Layout (css_multicol_1) | 1 | CR | Revendiqué | moyenne |
CSS Multi-column Layout (css_multicol_2) | 2 | ED | Inconnu | faible |
CSS Fragmentation (css_break_3) | 3 | CR | Vérifié | moyenne |
CSS Fragmentation (css_break_4) | 4 | ED | Inconnu | faible |
CSS Containment (css_contain_1) | 1 | REC | Non pris en charge | moyenne |
CSS Containment — @container (css_contain_2) | 2 | CR | Revendiqué | faible |
CSS Containment (css_contain_3) | 3 | ED | Non pris en charge | moyenne |
CSS Inline Layout (css_inline_3) | 3 | WD | Revendiqué | moyenne |
CSS Logical Properties (css_logical_1) | 1 | WD | Revendiqué | moyenne |
CSS Page Floats (css_page_floats_3) | 3 | ED | Non pris en charge | élevée |
CSS Pagination Templates (css_page_templates_3) | 3 | ED | Non pris en charge | élevée |
CSS Exclusions (css_exclusions_1) | 1 | WD | Non pris en charge | élevée |
CSS Regions (css_regions_1) | 1 | WD | Non pris en charge | élevée |
CSS Template Layout (css_template_1) | 1 | NOTE | Non pris en charge | élevée |
CSS Layout API (css_layout_api_1) | 1 | WD | Non pris en charge | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Backgrounds and Borders (css_backgrounds_3) | 3 | CR | Revendiqué | moyenne |
CSS Backgrounds (css_backgrounds_4) | 4 | ED | Inconnu | faible |
CSS Borders and Box Decorations (css_borders_4) | 4 | ED | Inconnu | faible |
CSS Gap Decorations (css_gaps_1) | 1 | ED | Inconnu | faible |
CSS Masking (css_masking_1) | 1 | CR | Non pris en charge | moyenne |
CSS Shadow Module (css_shadow_1) | 1 | ED | Revendiqué | moyenne |
CSS Shapes (css_shapes_1) | 1 | CR | Non pris en charge | élevée |
CSS Shapes (css_shapes_2) | 2 | ED | Non pris en charge | élevée |
Filter Effects (filter_effects_1) | 1 | WD | Non pris en charge | élevée |
Filter Effects (filter_effects_2) | 2 | ED | Non pris en charge | élevée |
Compositing and Blending (compositing_1) | 1 | CR | Revendiqué | moyenne |
Compositing (compositing_2) | 2 | ED | Inconnu | faible |
CSS Fill and Stroke (fill_stroke_3) | 3 | ED | Inconnu | faible |
Geometry Interfaces (geometry_1) | 1 | CR | Non pris en charge | élevée |
DOMMatrix (matrix) | 1 | NOTE | Non pris en charge | élevée |
Motion Path (motion_1) | 1 | WD | Non pris en charge | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Fonts (css_fonts_3) | 3 | REC | Vérifié | moyenne |
CSS Fonts (css_fonts_4) | 4 | CR | Vérifié | élevée |
CSS Fonts (css_fonts_5) | 5 | ED | Inconnu | faible |
CSS Font Loading (css_font_loading_3) | 3 | WD | Non pris en charge | élevée |
CSS Text (css_text_3) | 3 | CR | Revendiqué | moyenne |
CSS Text (css_text_4) | 4 | ED | Revendiqué | moyenne |
CSS Text Decoration (css_text_decor_3) | 3 | CR | Revendiqué | moyenne |
CSS Text Decoration (css_text_decor_4) | 4 | ED | Inconnu | faible |
CSS Ruby (css_ruby_1) | 1 | WD | Non pris en charge | élevée |
CSS Writing Modes (css_writing_modes_3) | 3 | REC | Revendiqué | moyenne |
CSS Writing Modes (css_writing_modes_4) | 4 | ED | Inconnu | faible |
CSS Speech (css_speech_1) | 1 | CR | Non pris en charge | élevée |
CSS Mobile Text Size Adjustment (css_size_adjust_1) | 1 | ED | Non pris en charge | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Color (css_color_3) | 3 | REC | Revendiqué | moyenne |
CSS Color (css_color_4) | 4 | CR | Revendiqué | moyenne |
CSS Color (css_color_5) | 5 | WD | Inconnu | faible |
CSS Color (css_color_6) | 6 | ED | Inconnu | faible |
CSS Color Adjustment (css_color_adjust_1) | 1 | CR | Non pris en charge | élevée |
CSS Color HDR (css_color_hdr_1) | 1 | ED | Non pris en charge | élevée |
CSS Images (css_images_3) | 3 | CR | Revendiqué | moyenne |
CSS Images (css_images_4) | 4 | ED | Inconnu | faible |
CSS Images (css_images_5) | 5 | ED | Inconnu | faible |
CSS Image Animation (css_image_animation_1) | 1 | ED | Non pris en charge | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Selectors (selectors_3) | 3 | REC | Revendiqué | moyenne |
CSS Selectors (selectors_4) | 4 | WD | Revendiqué | moyenne |
CSS Selectors (selectors_5) | 5 | ED | Inconnu | faible |
CSS Non-element Selectors (selectors_nonelement_1) | 1 | WD | Non pris en charge | élevée |
CSS Pseudo-Elements (css_pseudo_4) | 4 | WD | Revendiqué | moyenne |
CSS Cascading and Inheritance (css_cascade_3) | 3 | REC | Vérifié | élevée |
CSS Cascading (css_cascade_4) | 4 | CR | Vérifié | élevée |
CSS Cascading (css_cascade_5) | 5 | CR | Vérifié | élevée |
CSS Cascading (css_cascade_6) | 6 | WD | Inconnu | faible |
CSS Values and Units (css_values_3) | 3 | REC | Revendiqué | moyenne |
CSS Values and Units (css_values_4) | 4 | CR | Revendiqué | moyenne |
CSS Values and Units (css_values_5) | 5 | ED | Inconnu | faible |
CSS Custom Properties (css_variables_1) | 1 | CR | Revendiqué | moyenne |
CSS Custom Properties (css_variables_2) | 2 | ED | Inconnu | faible |
CSS Conditional Rules (css_conditional_3) | 3 | CR | Revendiqué | moyenne |
CSS Conditional Rules (css_conditional_4) | 4 | ED | Inconnu | faible |
CSS Conditional Rules (css_conditional_5) | 5 | ED | Inconnu | faible |
CSS Conditional Values (css_conditional_values_1) | 1 | ED | Inconnu | faible |
CSS Namespaces (css_namespaces_3) | 3 | REC | Revendiqué | faible |
CSS Style Attributes (css_style_attr_1) | 1 | CR | Revendiqué | moyenne |
CSS Syntax (css_syntax_3) | 3 | CR | Revendiqué | moyenne |
CSS Nesting (css_nesting_1) | 1 | CR | Revendiqué | moyenne |
CSS Environment Variables (css_env_1) | 1 | ED | Non pris en charge | moyenne |
CSS Custom Functions and Mixins (css_mixins_1) | 1 | ED | Inconnu | faible |
CSS Extensions (css_extensions_1) | 1 | NOTE | Inconnu | faible |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Lists and Counters (css_lists_3) | 3 | WD | Revendiqué | moyenne |
CSS Counter Styles (css_counter_styles_3) | 3 | CR | Revendiqué | moyenne |
CSS Generated Content (css_content_3) | 3 | WD | Revendiqué | moyenne |
CSS Generated Content for Paged Media (css_gcpm_3) | 3 | WD | Revendiqué | moyenne |
CSS Generated Content for Paged Media (css_gcpm_4) | 4 | ED | Inconnu | faible |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Paged Media (css_page_3) | 3 | WD | Revendiqué | moyenne |
CSS Paged Media (css_page_4) | 4 | NOTE | Inconnu | faible |
CSS Print Profile (css_print) | 1 | NOTE | Revendiqué | faible |
CSS Presentation Levels (css_preslev_1) | 1 | NOTE | Non pris en charge | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Overflow (css_overflow_3) | 3 | WD | Revendiqué | faible |
CSS Overflow (css_overflow_4) | 4 | ED | Inconnu | faible |
CSS Overflow (css_overflow_5) | 5 | ED | Inconnu | faible |
CSS Overscroll Behavior (css_overscroll_1) | 1 | CR | Non pris en charge | élevée |
CSS Scroll Anchoring (css_scroll_anchoring_1) | 1 | WD | Non pris en charge | élevée |
CSS Scroll Snap (css_scroll_snap_1) | 1 | REC | Non pris en charge | élevée |
CSS Scroll Snap (css_scroll_snap_2) | 2 | WD | Non pris en charge | élevée |
CSS Scrollbars Styling (css_scrollbars_1) | 1 | CR | Non pris en charge | élevée |
CSS Basic User Interface (css_ui_3) | 3 | REC | Non pris en charge | moyenne |
CSS Basic User Interface (css_ui_4) | 4 | WD | Non pris en charge | élevée |
CSS Form Control Styling (css_forms_1) | 1 | ED | Non pris en charge | élevée |
CSS View Transitions (css_view_transitions_1) | 1 | WD | Non pris en charge | élevée |
CSS View Transitions (css_view_transitions_2) | 2 | ED | Non pris en charge | élevée |
CSS Spatial Navigation (css_nav_1) | 1 | NOTE | Non pris en charge | élevée |
CSS Route Matching (css_navigation_1) | 1 | ED | Non pris en charge | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Table (css_tables_3) | 3 | WD | Vérifié | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Transforms (css_transforms_1) | 1 | CR | Revendiqué | moyenne |
CSS Transforms (css_transforms_2) | 2 | ED | Inconnu | faible |
CSS Animations (css_animations_1) | 1 | WD | Non pris en charge | élevée |
CSS Animations (css_animations_2) | 2 | ED | Non pris en charge | élevée |
CSS Transitions (css_transitions_1) | 1 | WD | Non pris en charge | élevée |
CSS Transitions (css_transitions_2) | 2 | ED | Non pris en charge | élevée |
CSS Easing Functions (css_easing_1) | 1 | CR | Non pris en charge | élevée |
CSS Easing Functions (css_easing_2) | 2 | ED | Non pris en charge | élevée |
Web Animations (web_animations_1) | 1 | WD | Non pris en charge | élevée |
Web Animations (web_animations_2) | 2 | ED | Non pris en charge | élevée |
Web Animations CSS Integration (web_animations_css_integration) | 1 | ED | Non pris en charge | élevée |
Animation Triggers (animation_triggers) | 1 | ED | Non pris en charge | élevée |
Pointer-driven Animations (pointer_animations_1) | 1 | ED | Non pris en charge | élevée |
Scroll-driven Animations (scroll_animations_1) | 1 | ED | Non pris en charge | élevée |
CSS Animation Worklet (css_animation_worklet) | 1 | ED | Non pris en charge | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Anchor Positioning (css_anchor_position_1) | 1 | WD | Inconnu | faible |
CSS Anchor Positioning (css_anchor_position_2) | 2 | ED | Inconnu | faible |
CSS Highlight API (css_highlight_api_1) | 1 | WD | Non pris en charge | élevée |
CSS Properties and Values API (css_properties_values_api_1) | 1 | CR | Non pris en charge | élevée |
CSS Painting API (css_paint_api_1) | 1 | WD | Non pris en charge | élevée |
CSS Typed OM (css_typed_om_1) | 1 | WD | Non pris en charge | élevée |
CSSOM (cssom_1) | 1 | WD | Non pris en charge | élevée |
CSSOM View (cssom_view_1) | 1 | WD | Non pris en charge | élevée |
CSS Will Change (css_will_change_1) | 1 | CR | Non pris en charge | élevée |
CSS Linked Parameters (css_link_params_1) | 1 | ED | Inconnu | faible |
CSS Line Grid (css_line_grid_1) | 1 | NOTE | Inconnu | faible |
CSS Rhythmic Sizing (css_rhythm_1) | 1 | ED | Inconnu | faible |
CSS Round Display (css_round_display_1) | 1 | ED | Non pris en charge | élevée |
CSS Shaders (css_shaders_1) | 1 | NOTE | Non pris en charge | élevée |
CSS Viewport (css_viewport_1) | 1 | NOTE | Non pris en charge | élevée |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
Media Queries (mediaqueries_3) | 3 | REC | Revendiqué | moyenne |
Media Queries (mediaqueries_4) | 4 | CR | Revendiqué | moyenne |
Media Queries (mediaqueries_5) | 5 | WD | Inconnu | faible |
| Module W3C | Niveau | W3C | Statut | Confiance |
|---|
CSS Level 2 (css_2_1) | 2.1 | REC | Revendiqué | faible |
CSS Level 2.2 (css_2_2) | 2.2 | NOTE | Revendiqué | faible |
CSS Snapshot 2026 (css_snapshot_2026) | snapshot | NOTE | Revendiqué | faible |
Ces modules W3C figurent dans le corpus, mais sortent du périmètre du pipeline de rendu CSS. Ils sont liés depuis les pages de fonctionnalité correspondantes, le cas échéant.
| Module W3C | W3C | Statut | Confiance | Emplacement |
|---|
W3C SVG 1.1 (svg_1_1) | REC | Revendiqué | faible | Sous-ensemble de peinture SVG en ligne dans Renderer/PaintCommand/ ; pas de fixture de matrice CSS. |
W3C SVG 2.0 (svg_2_0) | CR | Inconnu | faible | Relève du pipeline Premium ; aucune preuve côté Core. |
W3C PNG 3rd Edition (png_3) | WD | Revendiqué | faible | Décodage PNG dans le module Graphics/ (hors HTML/CSS). |
W3C WOFF 1.0 (woff_1_0) | REC | Revendiqué | faible | WOFF via la pile Font ; pas de fixture de matrice CSS. |
W3C WOFF 2.0 (woff_2_0) | REC | Revendiqué | faible | WOFF2 via la pile Font ; pas de fixture de matrice CSS. |
W3C WCAG 2.2 (wcag_2_2) | REC | Vérifié | moyenne | src/Html/Aam/, tests/Unit/Accessibility/HtmlAam/ (4 fichiers) — PDF/UA-2. |
W3C WAI-ARIA 1.2 (wai_aria_1_2) | REC | Vérifié | moyenne | tests/Unit/Accessibility/HtmlAam/ (4 fichiers). |
W3C ARIA Bundle (w3c_aria_bundle) | REC | Revendiqué | faible | Lot d’orientations ; la preuve concrète est la ligne WAI-ARIA. |
W3C AAM Bundle (w3c_aam_bundle) | NOTE | Revendiqué | faible | Pointeur de lot ; la preuve réside dans les lignes WAI-ARIA/WCAG. |
W3C ATAG 2.0 (atag_2_0) | REC | Non pris en charge | élevée | Accessibilité des outils de création ; sans objet. |
W3C XSL 1.1 (xsl_1_1) | REC | Non pris en charge | élevée | Modèle de formatage parallèle XSL-FO ; non implémenté. |
W3C XSD 1.1 Part 1 (xsd_1_1_part1) | REC | Non pris en charge | élevée | Schéma XML ; sans objet. |
W3C XSLT 3.0 (xslt_3_0) | REC | Non pris en charge | élevée | Langage de transformation ; sans objet. |
Resize Observer (resize_observer_1) | CR | Non pris en charge | élevée | API d’exécution du navigateur. |
Pour qu’une ligne passe de claimed à verified :
- Une suite de fixtures dédiée de niveau propriété réside sous
tests/Unit/Html/<Module>/ (≥3 fichiers) ou un fragment de corpus WPT substantiel (≥50 fixtures) sous tests/Wpt/corpus/ est promu en test assertif.
- La fixture vérifie le comportement de NextPDF par rapport à la grammaire W3C pour les propriétés principales du module.
- La fixture passe de façon déterministe sous un
NextPDF\Testing\ReproducibilityProfile (structural pour les fixtures d’assertion ; bitwise seulement une fois que des références PDF de référence par module existent).
- Le
nextpdf_status de la ligne dans le fichier interne au dépôt css-support-matrix-data.yaml bascule sur verified, avec mise à jour de fixture_path, repro_profile et confidence.
Pour qu’une ligne passe de unknown à claimed :
- Une passe d’audit confirme les preuves d’implémentation dans
src/Html/ (cite le chemin dans evidence + notes).
- Un ticket de comblement est ouvert et lié dans
backfill_issue.