Skip to content
getnextpdf.com

CSS support matrix

NextPDF implements Cascading Style Sheets (CSS) rendering against published World Wide Web Consortium (W3C) specifications. Use this page to review every CSS module in NextPDF’s specification corpus and the truth-audited support state for that module in the rendering pipeline.

This revision comes from the Wave 4 B2 truth audit (plan section 4.4). The audit re-graded every row against real on-disk evidence (src/Html/, tests/, tests/Wpt/corpus/), the v8/v9 breaking-change architecture decision records (ADRs), and the internal CSS property coverage audit.

Four badges classify each row under the verification contract:

  • Verified — Implementation in src/Html/ plus a substantive dedicated automated fixture: either a property-level suite of three or more files under tests/Unit/Html/<Module>/, or a Web Platform Tests (WPT) corpus shard of fifty or more fixtures under tests/Wpt/corpus/. No per-CSS-module golden Portable Document Format (PDF) baseline is wired yet, so verified rows use the structural reproducibility profile (PHPUnit assertion equivalence), never bitwise.
  • Claimed — Module behavior is implemented in src/Html/ (source path cited), but the dedicated fixture is thin, shared, or absent. Each claimed row with a concrete implementation has a backfill issue.
  • Not supported — The static-PDF rendering pipeline does not include this module: runtime/browser-only APIs, scrolling/animation runtimes, and W3C-discontinued work. The row records the reason.
  • Unknown — The module is in the corpus, but the audit found no implementation or fixture evidence. The audit never guessed upward to improve the count.

The structural revision’s partial badge is retired: every former partial row was re-graded to claimed (implementation present, no dedicated fixture) or verified.

BadgeMeaning
verifiedsrc/Html/ + dedicated fixture suite (≥3 files) or WPT shard (≥50 fixtures); passes deterministically under the structural profile.
claimedImplementation evidence in src/Html/, no dedicated fixture. Backfill issue tracked.
not-supportedExplicitly excluded from the static-PDF scope. Reason recorded.
unknownNo determinable evidence. Not guessed upward.

The Confidence column is an honest, non-binary signal for the evidence behind the stated badge (high / medium / low). It is independent of the badge itself.

NextPDF supports the CSS modules listed below at the levels noted. Verified rows have a dedicated automated fixture suite or a substantive WPT corpus shard that asserts NextPDF’s behavior and passes deterministically under the structural reproducibility profile. Claimed rows have implementation evidence in src/Html/, but no dedicated fixture yet; each row is tracked by a backfill issue under tracking issue #614. Not supported rows document explicit scope boundaries for the static-PDF target.

No row claims byte-level reproducibility because this revision has no per-CSS-module golden PDF baseline. The verification contract forbids empty rows: when support cannot be determined, the row is unknown.

StatusModulesConfidence (high / medium / low)
Verified128 / 4 / 0
Claimed490 / 35 / 14
Not supported6762 / 5 / 0
Unknown390 / 0 / 39
Total16770 / 44 / 53

The structural revision’s summary block was internally inconsistent: it declared 148 total (18 verified / 11 partial / 11 claimed / 53 not-supported / 55 unknown), while the file contained 167 module rows whose labels tallied to 34 verified / 13 partial / 13 claimed / 68 not-supported / 39 unknown. This audit corrected the total to the true 167 and re-graded every row against on-disk evidence: Verified dropped from a claimed 34 to a substantiated 12. The full before/after delta is in the in-repo _css-matrix-truth-report.md sidecar.

The structural revision mislabeled three live capabilities as removed or not-supported. ADR-027 and ADR-028 removed only the ExperimentalFeature enum opt-in markers; the capabilities remain LIVE default-on:

  • Subgrid (css_grid_2) — LIVE; CssFeatureFlags::$layoutSubgrid default on. It was mislabeled “subgrid hard-removed v9.0.0”.
  • @container queries (css_contain_2) — runtime dispatch explicitly unchanged by ADR-028; flag opt-out preserved. It was mislabeled “hard-removed v9.0.0”.
  • writing-mode: vertical-lr (css_writing_modes_3) — default-on Stable since v7.0.0; ADR-027 graduated only the deprecation handshake. It was mislabeled “deprecated/removed v8.0.0”.

The machine-readable per-module rowset lives in the in-repo css-support-matrix-data.yaml, which is the source of truth. This page is the human-readable projection, grouped by category. Astro components consume the YAML data directly during the docs build.

W3C ModuleLevelW3CStatusConfidence
CSS Flexible Box Layout (css_flexbox_1)1CRVerifiedhigh
CSS Grid Layout (css_grid_1)1RECVerifiedhigh
CSS Grid Layout — Subgrid (css_grid_2)2CRClaimedmedium
CSS Grid Layout — Masonry (css_grid_3)3EDNot supportedhigh
CSS Display (css_display_3)3CRClaimedmedium
CSS Display (css_display_4)4EDUnknownlow
CSS Positioned Layout (css_position_3)3WDVerifiedhigh
CSS Positioned Layout (css_position_4)4EDUnknownlow
CSS Box Alignment (css_align_3)3WDClaimedmedium
CSS Box Sizing (css_sizing_3)3CRClaimedlow
CSS Box Sizing (css_sizing_4)4EDUnknownlow
CSS Box Model (css_box_3)3WDClaimedmedium
CSS Box Model (css_box_4)4EDUnknownlow
CSS Multi-column Layout (css_multicol_1)1CRClaimedmedium
CSS Multi-column Layout (css_multicol_2)2EDUnknownlow
CSS Fragmentation (css_break_3)3CRVerifiedmedium
CSS Fragmentation (css_break_4)4EDUnknownlow
CSS Containment (css_contain_1)1RECNot supportedmedium
CSS Containment — @container (css_contain_2)2CRClaimedlow
CSS Containment (css_contain_3)3EDNot supportedmedium
CSS Inline Layout (css_inline_3)3WDClaimedmedium
CSS Logical Properties (css_logical_1)1WDClaimedmedium
CSS Page Floats (css_page_floats_3)3EDNot supportedhigh
CSS Pagination Templates (css_page_templates_3)3EDNot supportedhigh
CSS Exclusions (css_exclusions_1)1WDNot supportedhigh
CSS Regions (css_regions_1)1WDNot supportedhigh
CSS Template Layout (css_template_1)1NOTENot supportedhigh
CSS Layout API (css_layout_api_1)1WDNot supportedhigh

Box model — backgrounds, borders, effects

Section titled “Box model — backgrounds, borders, effects”
W3C ModuleLevelW3CStatusConfidence
CSS Backgrounds and Borders (css_backgrounds_3)3CRClaimedmedium
CSS Backgrounds (css_backgrounds_4)4EDUnknownlow
CSS Borders and Box Decorations (css_borders_4)4EDUnknownlow
CSS Gap Decorations (css_gaps_1)1EDUnknownlow
CSS Masking (css_masking_1)1CRNot supportedmedium
CSS Shadow Module (css_shadow_1)1EDClaimedmedium
CSS Shapes (css_shapes_1)1CRNot supportedhigh
CSS Shapes (css_shapes_2)2EDNot supportedhigh
Filter Effects (filter_effects_1)1WDNot supportedhigh
Filter Effects (filter_effects_2)2EDNot supportedhigh
Compositing and Blending (compositing_1)1CRClaimedmedium
Compositing (compositing_2)2EDUnknownlow
CSS Fill and Stroke (fill_stroke_3)3EDUnknownlow
Geometry Interfaces (geometry_1)1CRNot supportedhigh
DOMMatrix (matrix)1NOTENot supportedhigh
Motion Path (motion_1)1WDNot supportedhigh
W3C ModuleLevelW3CStatusConfidence
CSS Fonts (css_fonts_3)3RECVerifiedmedium
CSS Fonts (css_fonts_4)4CRVerifiedhigh
CSS Fonts (css_fonts_5)5EDUnknownlow
CSS Font Loading (css_font_loading_3)3WDNot supportedhigh
CSS Text (css_text_3)3CRClaimedmedium
CSS Text (css_text_4)4EDClaimedmedium
CSS Text Decoration (css_text_decor_3)3CRClaimedmedium
CSS Text Decoration (css_text_decor_4)4EDUnknownlow
CSS Ruby (css_ruby_1)1WDNot supportedhigh
CSS Writing Modes (css_writing_modes_3)3RECClaimedmedium
CSS Writing Modes (css_writing_modes_4)4EDUnknownlow
CSS Speech (css_speech_1)1CRNot supportedhigh
CSS Mobile Text Size Adjustment (css_size_adjust_1)1EDNot supportedhigh
W3C ModuleLevelW3CStatusConfidence
CSS Color (css_color_3)3RECClaimedmedium
CSS Color (css_color_4)4CRClaimedmedium
CSS Color (css_color_5)5WDUnknownlow
CSS Color (css_color_6)6EDUnknownlow
CSS Color Adjustment (css_color_adjust_1)1CRNot supportedhigh
CSS Color HDR (css_color_hdr_1)1EDNot supportedhigh
CSS Images (css_images_3)3CRClaimedmedium
CSS Images (css_images_4)4EDUnknownlow
CSS Images (css_images_5)5EDUnknownlow
CSS Image Animation (css_image_animation_1)1EDNot supportedhigh
W3C ModuleLevelW3CStatusConfidence
CSS Selectors (selectors_3)3RECClaimedmedium
CSS Selectors (selectors_4)4WDClaimedmedium
CSS Selectors (selectors_5)5EDUnknownlow
CSS Non-element Selectors (selectors_nonelement_1)1WDNot supportedhigh
CSS Pseudo-Elements (css_pseudo_4)4WDClaimedmedium
CSS Cascading and Inheritance (css_cascade_3)3RECVerifiedhigh
CSS Cascading (css_cascade_4)4CRVerifiedhigh
CSS Cascading (css_cascade_5)5CRVerifiedhigh
CSS Cascading (css_cascade_6)6WDUnknownlow
CSS Values and Units (css_values_3)3RECClaimedmedium
CSS Values and Units (css_values_4)4CRClaimedmedium
CSS Values and Units (css_values_5)5EDUnknownlow
CSS Custom Properties (css_variables_1)1CRClaimedmedium
CSS Custom Properties (css_variables_2)2EDUnknownlow
CSS Conditional Rules (css_conditional_3)3CRClaimedmedium
CSS Conditional Rules (css_conditional_4)4EDUnknownlow
CSS Conditional Rules (css_conditional_5)5EDUnknownlow
CSS Conditional Values (css_conditional_values_1)1EDUnknownlow
CSS Namespaces (css_namespaces_3)3RECClaimedlow
CSS Style Attributes (css_style_attr_1)1CRClaimedmedium
CSS Syntax (css_syntax_3)3CRClaimedmedium
CSS Nesting (css_nesting_1)1CRClaimedmedium
CSS Environment Variables (css_env_1)1EDNot supportedmedium
CSS Custom Functions and Mixins (css_mixins_1)1EDUnknownlow
CSS Extensions (css_extensions_1)1NOTEUnknownlow
W3C ModuleLevelW3CStatusConfidence
CSS Lists and Counters (css_lists_3)3WDClaimedmedium
CSS Counter Styles (css_counter_styles_3)3CRClaimedmedium
CSS Generated Content (css_content_3)3WDClaimedmedium
CSS Generated Content for Paged Media (css_gcpm_3)3WDClaimedmedium
CSS Generated Content for Paged Media (css_gcpm_4)4EDUnknownlow
W3C ModuleLevelW3CStatusConfidence
CSS Paged Media (css_page_3)3WDClaimedmedium
CSS Paged Media (css_page_4)4NOTEUnknownlow
CSS Print Profile (css_print)1NOTEClaimedlow
CSS Presentation Levels (css_preslev_1)1NOTENot supportedhigh
W3C ModuleLevelW3CStatusConfidence
CSS Overflow (css_overflow_3)3WDClaimedlow
CSS Overflow (css_overflow_4)4EDUnknownlow
CSS Overflow (css_overflow_5)5EDUnknownlow
CSS Overscroll Behavior (css_overscroll_1)1CRNot supportedhigh
CSS Scroll Anchoring (css_scroll_anchoring_1)1WDNot supportedhigh
CSS Scroll Snap (css_scroll_snap_1)1RECNot supportedhigh
CSS Scroll Snap (css_scroll_snap_2)2WDNot supportedhigh
CSS Scrollbars Styling (css_scrollbars_1)1CRNot supportedhigh
CSS Basic User Interface (css_ui_3)3RECNot supportedmedium
CSS Basic User Interface (css_ui_4)4WDNot supportedhigh
CSS Form Control Styling (css_forms_1)1EDNot supportedhigh
CSS View Transitions (css_view_transitions_1)1WDNot supportedhigh
CSS View Transitions (css_view_transitions_2)2EDNot supportedhigh
CSS Spatial Navigation (css_nav_1)1NOTENot supportedhigh
CSS Route Matching (css_navigation_1)1EDNot supportedhigh
W3C ModuleLevelW3CStatusConfidence
CSS Table (css_tables_3)3WDVerifiedhigh
W3C ModuleLevelW3CStatusConfidence
CSS Transforms (css_transforms_1)1CRClaimedmedium
CSS Transforms (css_transforms_2)2EDUnknownlow
CSS Animations (css_animations_1)1WDNot supportedhigh
CSS Animations (css_animations_2)2EDNot supportedhigh
CSS Transitions (css_transitions_1)1WDNot supportedhigh
CSS Transitions (css_transitions_2)2EDNot supportedhigh
CSS Easing Functions (css_easing_1)1CRNot supportedhigh
CSS Easing Functions (css_easing_2)2EDNot supportedhigh
Web Animations (web_animations_1)1WDNot supportedhigh
Web Animations (web_animations_2)2EDNot supportedhigh
Web Animations CSS Integration (web_animations_css_integration)1EDNot supportedhigh
Animation Triggers (animation_triggers)1EDNot supportedhigh
Pointer-driven Animations (pointer_animations_1)1EDNot supportedhigh
Scroll-driven Animations (scroll_animations_1)1EDNot supportedhigh
CSS Animation Worklet (css_animation_worklet)1EDNot supportedhigh
W3C ModuleLevelW3CStatusConfidence
CSS Anchor Positioning (css_anchor_position_1)1WDUnknownlow
CSS Anchor Positioning (css_anchor_position_2)2EDUnknownlow
CSS Highlight API (css_highlight_api_1)1WDNot supportedhigh
CSS Properties and Values API (css_properties_values_api_1)1CRNot supportedhigh
CSS Painting API (css_paint_api_1)1WDNot supportedhigh
CSS Typed OM (css_typed_om_1)1WDNot supportedhigh
CSSOM (cssom_1)1WDNot supportedhigh
CSSOM View (cssom_view_1)1WDNot supportedhigh
CSS Will Change (css_will_change_1)1CRNot supportedhigh
CSS Linked Parameters (css_link_params_1)1EDUnknownlow
CSS Line Grid (css_line_grid_1)1NOTEUnknownlow
CSS Rhythmic Sizing (css_rhythm_1)1EDUnknownlow
CSS Round Display (css_round_display_1)1EDNot supportedhigh
CSS Shaders (css_shaders_1)1NOTENot supportedhigh
CSS Viewport (css_viewport_1)1NOTENot supportedhigh
W3C ModuleLevelW3CStatusConfidence
Media Queries (mediaqueries_3)3RECClaimedmedium
Media Queries (mediaqueries_4)4CRClaimedmedium
Media Queries (mediaqueries_5)5WDUnknownlow
W3C ModuleLevelW3CStatusConfidence
CSS Level 2 (css_2_1)2.1RECClaimedlow
CSS Level 2.2 (css_2_2)2.2NOTEClaimedlow
CSS Snapshot 2026 (css_snapshot_2026)snapshotNOTEClaimedlow

These W3C modules appear in the corpus but are outside the CSS rendering pipeline. When applicable, corresponding feature pages link to them.

W3C ModuleW3CStatusConfidenceWhere
W3C SVG 1.1 (svg_1_1)RECClaimedlowInline SVG paint subset in Renderer/PaintCommand/; no CSS-matrix fixture.
W3C SVG 2.0 (svg_2_0)CRUnknownlowPremium-pipeline concern; no core evidence.
W3C PNG 3rd Edition (png_3)WDClaimedlowPNG decode in Graphics/ module (outside HTML/CSS).
W3C WOFF 1.0 (woff_1_0)RECClaimedlowWOFF via Font stack; no CSS-matrix fixture.
W3C WOFF 2.0 (woff_2_0)RECClaimedlowWOFF2 via Font stack; no CSS-matrix fixture.
W3C WCAG 2.2 (wcag_2_2)RECVerifiedmediumsrc/Html/Aam/, tests/Unit/Accessibility/HtmlAam/ (4 files) — PDF/UA-2.
W3C WAI-ARIA 1.2 (wai_aria_1_2)RECVerifiedmediumtests/Unit/Accessibility/HtmlAam/ (4 files).
W3C ARIA Bundle (w3c_aria_bundle)RECClaimedlowGuidance bundle; concrete evidence is the WAI-ARIA row.
W3C AAM Bundle (w3c_aam_bundle)NOTEClaimedlowBundle pointer; evidence is the WAI-ARIA/WCAG rows.
W3C ATAG 2.0 (atag_2_0)RECNot supportedhighAuthoring-tool accessibility; not applicable.
W3C XSL 1.1 (xsl_1_1)RECNot supportedhighXSL-FO parallel formatting model; not implemented.
W3C XSD 1.1 Part 1 (xsd_1_1_part1)RECNot supportedhighXML schema; not applicable.
W3C XSLT 3.0 (xslt_3_0)RECNot supportedhighTransformation language; not applicable.
Resize Observer (resize_observer_1)CRNot supportedhighBrowser runtime API.

For a row to graduate from claimedverified:

  1. A dedicated property-level fixture suite lives under tests/Unit/Html/<Module>/ (≥3 files) or a substantive WPT corpus shard (≥50 fixtures) under tests/Wpt/corpus/ is promoted into an asserting test.
  2. The fixture asserts NextPDF’s behavior against the W3C grammar for the module’s primary properties.
  3. The fixture passes deterministically under a NextPDF\Testing\ReproducibilityProfile (structural for assertion fixtures; bitwise only once per-module golden PDF baselines exist).
  4. The row’s nextpdf_status in the in-repo css-support-matrix-data.yaml flips to verified, with fixture_path, repro_profile, and confidence updated.

For a row to graduate from unknownclaimed:

  1. An audit pass confirms implementation evidence in src/Html/ (cite the path in evidence + notes).
  2. A backfill issue is opened and linked in backfill_issue.
  • HTML rendering subsystem — the engine behind these capabilities, including the table, flex, gradient, and pagination behavior notes.
  • Unsupported CSS features and workarounds — the qualified per-behavior limits.
  • Render right-to-left Arabic HTML — right-to-left and bidirectional support and its current boundaries.
  • Paginate a large HTML table — cross-page table pagination.
  • CSS matrix truth report (_css-matrix-truth-report.md, in-repo) — before/after audit deltas, confidence distribution, de-inflation log.
  • CSS property coverage audit (architecture/css-property-coverage-audit.md, in-repo) — internal four-state per-property audit (Policy/Parsed/Applied/Rendered).
  • ADR-027 v8.0.0 BREAKING (architecture/adr/ADR-027-v8-breaking.md, in-repo) — vertical-lr deprecation-handshake graduation (capability preserved).
  • ADR-028 v9.0.0 BREAKING (architecture/adr/ADR-028-v9-breaking.md, in-repo) — Grid/Subgrid/@container enum-marker removal (capabilities preserved).
  • Backfill tracking issue: https://github.com/nextpdf-labs/nextpdf/issues/614