Class CssPageStyle
The cascaded style of one page: the page context's winning declarations and those of each page-margin box any rule styles. Compute the page context with the root element's computed style as its parent, and each margin box with the page context's computed style as its parent.
public sealed class CssPageStyle
- Inheritance
-
CssPageStyle
- Inherited Members
Examples
CssStyleSheet sheet = CssStyleSheet.Parse("""
@page { size: A4; margin: 2cm; font: 9pt serif;
@bottom-center { content: counter(page) } }
@page :first { margin-top: 5cm; @bottom-center { content: none } }
@page :left { margin-left: 3cm }
@page appendix { size: A4 landscape }
h1.appendix { page: appendix; break-before: right }
""");
CssPageRule first = (CssPageRule)sheet.Rules[1];
CssPageSelector selector = first.Selectors[0]; // :first, specificity (0, 1, 0)
CssPageMarginRule footer = ((CssPageRule)sheet.Rules[0]).MarginRules[0]; // CssMarginBox.BottomCenter
// Cascade the page rules for each page the layout makes, then compute the page context from the root element's
// computed style and each margin box from the page context's.
var cascade = new CssCascade([(sheet, CssOrigin.Author)]);
CssPageStyle pageStyle = cascade.CascadePage(new CssPage(Name: null, IsFirst: false, IsLeft: true));
CssComputedStyle root = cascade.Compute(new CssCascadedStyle(), null);
CssComputedStyle page = cascade.Compute(pageStyle.Page, root);
string? marginLeft = page.GetValueText("margin-left"); // "3cm"
bool isSize = CssPageSize.TryParse(page.GetValueText("size")!, out CssPageSize a4); // 210mm by 297mm
CssComputedStyle box = cascade.Compute(pageStyle.MarginBoxes[CssMarginBox.BottomCenter], page);
string? content = box.GetValueText("content"); // "counter(page)"
string? fontSize = box.GetValueText("font-size"); // "9pt": inherited from the page context
// A named page: the appendix pages turn A4 to landscape.
CssPageStyle appendix = cascade.CascadePage(new CssPage("appendix", IsFirst: false, IsLeft: false));
bool isTurned = CssPageSize.TryParse(appendix.Page.GetValueText("size")!, out CssPageSize turned);
bool landscape = turned.Orientation == CssPageOrientation.Landscape; // true: 297mm by 210mm
Properties
MarginBoxes
Gets the cascaded style of each margin box a matching rule styles. A box is generated only when its computed
content is not none or normal; its default alignment (CSS Paged Media 3 section 5.3) is the consumer's.
public IReadOnlyDictionary<CssMarginBox, CssCascadedStyle> MarginBoxes { get; }
Property Value
Page
Gets the page context's cascaded style.
public CssCascadedStyle Page { get; }