Class CssPageMarginRule
A page-margin rule inside @page, such as @bottom-center { content: counter(page) }.
public sealed class CssPageMarginRule : CssRule
- Inheritance
-
CssPageMarginRule
- 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
Box
Gets the margin box the rule styles.
public CssMarginBox Box { get; }
Property Value
Declarations
Gets the declarations, in order.
public IReadOnlyList<CssDeclaration> Declarations { get; }
Property Value
Methods
GetName(CssMarginBox)
Gets the at-rule name of a margin box without the @, such as top-center.
public static string GetName(CssMarginBox box)
Parameters
boxCssMarginBoxThe margin box.
Returns
- string
The name.