Tables
Render HTML tables with Takumi, set column widths, and understand differences from browser table layout.
Takumi renders display: table by rewriting the table into a grid, so every row shares one set of column tracks. Column widths follow the CSS table width algorithm as Chrome runs it. This page lists what carries over and where it drifts.
What works
<table>,<thead>,<tbody>,<tfoot>,<tr>,<td>,<th>, and<caption>have element presets in HTML and JSX.- Header groups render first and footer groups last, whatever the source order.
colspanandrowspanspan tracks. The HTML attributes and the JSXcolSpan/rowSpancasings both count.captionrenders above the table, or below it withcaption-side: bottom.- A row's background is copied to cells that have none of their own, so zebra striping and header bands work. The
border-spacinggaps stay unpainted. - A block-level
auto-width table shrinks to fit its content; in a flex or grid container it still stretches. Columns share the table's width by their content, as in Chrome. Percentage and fixed cell widths constrain their columns. border-collapse: collapsemerges adjacent borders.border-spacingdefaults to2px.vertical-alignplaces cell content as in Chrome, andbaselinecells line their first lines up across a row.- Paged PDF output splits rows across pages. Column positions stay identical on every page.
< ={{ : "100%" }}>
<>
< ={{ : "#e2e8f0" }}>
<>Name</>
< ={{ : "80px" }}>Qty</>
</>
</>
<>
<>
<>Wireframe kit</>
<>3</>
</>
</>
</>Where it drifts
| Behavior | In a browser | In Takumi |
|---|---|---|
<col>, <colgroup> | Their widths size columns | Ignored; declare the width on a cell |
| Caption width | A wide caption widens the table | The caption wraps to the table's width |
Cells keep their box: padding, borders, and backgrounds cover the full grid area, including rows
spanned by rowspan.
Upstream table layout
Native CSS table layout for Taffy is proposed in DioxusLabs/taffy#1094. The PR is open as of September 9, 2026. Takumi currently uses the grid-based approximation described above.
Last updated on