Table of Contents

Class CssPageSelector

Namespace
Egami.Css
Assembly
Egami.Css.dll

One selector of an @page rule, such as chapter:first.

public sealed class CssPageSelector
Inheritance
CssPageSelector
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

Name

Gets the page type name, case-sensitive, or null when the selector names none.

public string? Name { get; }

Property Value

string

PseudoClasses

Gets the pseudo-classes the selector tests.

public CssPagePseudoClasses PseudoClasses { get; }

Property Value

CssPagePseudoClasses

Specificity

Gets the specificity: one for a page type name, then the number of :first and :blank, then the number of :left and :right.

public CssSpecificity Specificity { get; }

Property Value

CssSpecificity

Methods

Matches(CssPage)

Tests the selector against a page.

public bool Matches(CssPage page)

Parameters

page CssPage

The page.

Returns

bool

True when the page matches.

ToString()

Gets the selector as CSS text.

public override string ToString()

Returns

string

The text.