Table of Contents

Enum CssMarginBox

Namespace
Egami.Css
Assembly
Egami.Css.dll

The sixteen page-margin boxes around a page's content (CSS Paged Media 3 section 5.1), clockwise from the top left.

public enum CssMarginBox

Fields

BottomCenter = 10

@bottom-center.

BottomLeft = 11

@bottom-left.

BottomLeftCorner = 12

@bottom-left-corner.

BottomRight = 9

@bottom-right.

BottomRightCorner = 8

@bottom-right-corner.

LeftBottom = 13

@left-bottom.

LeftMiddle = 14

@left-middle.

LeftTop = 15

@left-top.

RightBottom = 7

@right-bottom.

RightMiddle = 6

@right-middle.

RightTop = 5

@right-top.

TopCenter = 2

@top-center.

TopLeft = 1

@top-left.

TopLeftCorner = 0

@top-left-corner.

TopRight = 3

@top-right.

TopRightCorner = 4

@top-right-corner.

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