render: table vertical-align and specified column/row sizing
Cells now vertical-align the way tables actually do: middle by default (the effective UA behavior), with author top/middle/bottom parsed and applied to whichever shape the cell took: main-axis alignment on the flex-column stand-in, line alignment on a promoted inline context, or a pinned-origin offset for the pure-text leaf path where the shaped text height is known at finalize. Specified column widths finally apply. <col>/<colgroup> widths (style or attribute, with span) and colspan-1 cell widths are recorded per column at build time and pinned inside the column-balancing pass: px directly, percent against the table's content width, with each column's content min-content still flooring it. The cell's own width is neutralized once it has fed the column, so the cell box fills its grid area instead of shrinking to a fraction of its own already-sized track (a width:50% cell previously ended up at 25 percent). Unspecified columns keep content sizing but stretch to fill a definite table width instead of leaving a dead strip of table background. Row and cell heights act as row minimums. Verified against Chromium on a 5-case repro (column from cell width, row backgrounds, vertical alignment, col element width, percent cell in a fixed table): all match. Wikipedia and the prose spot set unchanged; obstacle course 33/33.
This commit is contained in:
1 parent
1d96c316ca
commit
953292563d
3 files changed
+221
-20
No files matched your search
@@ -320,6 +320,11 @@ pub struct LayoutStyle {
|
||||
/// `opacity`, own (non-inherited) value in 0.0-1.0. `None` means the
|
||||
/// default of 1.0.
|
||||
pub opacity: Option<f32>,
|
||||
/// `vertical-align` for a table cell's content. Cells effectively default
|
||||
/// to `middle` in browsers (the HTML UA sheet sets it on row groups and
|
||||
/// cells inherit it); obscura applies it as main-axis alignment of the
|
||||
/// cell's flex-column stand-in. `None` on non-cell elements.
|
||||
pub vertical_align: Option<VerticalAlign>,
|
||||
/// Resolved during the inheritance pass: true when this element should
|
||||
/// not be painted at all, either from its own or an inherited
|
||||
/// `visibility: hidden`, or because the product of its own and every
|
||||
@@ -447,6 +452,17 @@ pub enum ObjectFit {
|
||||
None,
|
||||
}
|
||||
|
||||
/// `vertical-align` positions for table-cell content. `baseline` (and the
|
||||
/// text-level values like sub/super, which do not apply to cells) map to
|
||||
/// `Top` as an approximation: real per-row baseline alignment needs shared
|
||||
/// ascent metrics across the row.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum VerticalAlign {
|
||||
Top,
|
||||
Middle,
|
||||
Bottom,
|
||||
}
|
||||
|
||||
/// `line-height`: `normal` (a font-relative default), a unitless multiple of
|
||||
/// font-size, or an absolute pixel length.
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
|
||||
Reference in new issue
Block a user