Copyright ©2004 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
This specification defines a subset of Cascading Style Sheets Level 2, revision 1 [CSS21] and CSS3 module: Paged Media [PAGEMEDIA] specifically for printing to low-cost devices. It is designed for printing from mobile devices, where it is not feasible or desirable to install a printer-specific driver, and for situations were some variability between the device's view of the document and the formatting of the output is acceptable.
This profile is designed to work in conjunction with XHTML-Print [XHTMLPRINT] and defines a minimum level of conformance as well as an extension set that provides stronger layout control for the printing of mixed text and images, tables and image collections.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
All sections of this document are normative unless noted as informative.
This document contains the CSS Print Profile W3C Candidate Recommendation of 25 February 2004, which has incorporated the disposition of Last Call comments
This specification is based, in large part, on a work by the same name, CSS Print Profile [CSSPP] from the Printer Working Group (PWG), a program of the IEEE Industry Standard and Technology Organization.
In order to exit the Candidate Recommendation phase, the following criteria must be satisfied:
A test suite for this specification will be created during the CR period. Detailed implementation requirements and the invitation for participation in the implementation report will be provided in the preliminary implementation report. Implementers are encouraged to provide feedback by 25 August 2004.
Comments and public discussion are to be sent to the mailing list www-style@w3.org (see instructions), which is preferred for discussion of this and other drafts in the Style area.
This document has been produced by the W3C CSS Working Group (Members only) as part of the W3C CSS Style Activity (see summary). The goals of the CSS Working Group are discussed in the CSS Working Group charter. Patent disclosures relevant to CSS may be found on the Working Group's public patent disclosure page.
Publication as a Candidate Recommendation does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or made obsolete by other documents at any time. It is inappropriate to cite this document as other than work in progress.
All sections of this document are normative unless noted as informative.
This document specifies a profile of the Cascading Style Sheets, level 2, revision 1 (CSS21) specification [CSS21] along with selected portions of the CSS3 module: Paged Media [PAGEMEDIA].
CSS21 specifies how developers can author style sheets for presenting documents across multiple devices and media types. While this is very important, it is also important that authors have an understanding of what features are supported on these different devices. Likewise, it is important that similar devices operate in a similar manner. Otherwise, authors will need to develop style sheets for each version of each device -- raising the cost of content development and decreasing interoperability.
The CSS Print Profile specifies a conformance profile for printing from mobile devices to low-cost printers, identifying a minimum set of properties, values, selectors, and cascading rules. This profile was designed in conjunction with XHTML-Print ([XHTMLPRINT]) for low cost printers that may not have a full-page buffer and that generally print from top-to-bottom and left-to-right with the paper in a portrait orientation.
This profile also contains an enhanced layout extension set that is the companion of the XHTML-Print extension set ([XHTMLPRINT] , Section 2.4) and supports more exacting page layouts and orientations. The enhanced layout extension may require full page buffering within the printer.
Conformance to this profile means that a user agent supports, at a minimum, the features defined in this specification. This subject is addressed in Section 2, Conformance, below.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 (see [RFC2119]). However, for readability, these words do not appear in all uppercase letters in this specification.
The primary role of a profile is to define a subset of features that provides a minimal guarantee of interoperability. In the case of the CSS Print Profile, this guarantee is that a conforming user agent will support the features defined in this specification following the CSS21 conformance clause ([CSS21] Section 3.2), recast and summarized below:
As with CSS21, there are qualifications to this conformance clause:
It is RECOMMENDED that authors use this conformance profile to take advantage of forward compatibility. Authors MAY use style properties with an understanding that the cascading rules are processed correctly and that unknown properties and values are ignored. For example:
body { background-position: center center; background-position: 45% 55%; }
A printer that can accept percentage values for the background-position property will process the first background-position declaration and then replace that value with the second background-position declaration. A printer that cannot accept percentage values will process the first background-position declaration and ignore the second background-position declaration.
Each CSS construct in the following sections is annotated to indicate how it SHOULD be treated by a conforming printer:
Key | Description |
---|---|
MUST | Support is mandatory; a conforming printer MUST honor this property, although the values mandated for support MAY be a subset of the full range. |
SHOULD | The property is concerned with functionality that SHOULD be implemented but MAY be beyond the capability of a conforming printer. For example, a monochrome printer can only render a gray scale equivalent of color images. |
MAY | The property's functionality is considered too complex, either in processing or memory requirements, for a printer. For example, vertical alignment within table cells in table rows that span multiple pages could exceed a low cost printer's available memory. |
N/A | The construct does Not Apply to the printed
page; a
conforming printer MAY ignore this construct for one of the
following reasons, but cannot treat it as an error:
|
Some print applications require a more exacting page layout than is available from a conforming printer (e.g., photo album pages or pages from a digital TV). The Enhanced Layout Extension increases the number of properties that a conforming printer MUST support and thereby the requirements of its memory and performance capabilities. These added CSS constructs are indicated with a " MUST", or an increased range of values, in the CSS Print-Enhanced columns below.
Printers supporting the Enhanced Layout Extension MUST also support the XHTML-Print Enhanced Layout Extension ([XHTMLPRINT], Section 2.4) and MAY also support an OPTIONAL, discoverable (via some means outside the scope of this document) Enhanced Layout Extension indicator. If support for this extension is indicated, all of the following properties marked with " MUST" for CSS Print-Enhanced, MUST be supported.
In CSS21, pattern matching rules determine which style rules apply to elements in the document tree [CSS21].
The selectors, pseudo-elements, pseudo-classes, and at-rules that a printer MUST support are, with a few exceptions, the same as those that a mobile device MUST support ([CSSMOBILE], Selectors ) within the limits of the printed page. The rationale for these decisions is that the capabilities and limitations of a mobile devices are analogous to those of a low-cost printer. However, support for the following constructs exceeds that of mobile devices, since this profile is concerned with printing: portions of the @page at-rule, the page pseudo-selector :first, and top and bottom margin boxes.
Consideration is also given to low-cost printers that might not be able to store all the attributes of each element, but only keep the few that are necessary. Therefore, only Enhanced Layout Extension conforming printers MUST support attribute selectors.
The following table summarizes CSS Print Profile selector syntax. In addition to the selectors marked "MUST" in the CSS Print or CSS Print-Enhanced columns, the CSS Print Profile includes the CSS21 grouping mechanism (See [CSS21] Section 5.2.1).
Pattern | Meaning | Selector type | CSS Print | CSS Print-Enhanced |
---|---|---|---|---|
* | Matches any element | Universal selector | MUST | MUST |
E | Matches any E element (i.e., any element of type E) | Type selectors | MUST | MUST |
E F | Matches any F element that is a descendant of an E element | Descendant selectors | MUST | MUST |
E > F | Matches any F element that is a child of an element E | Child selectors | MUST | MUST |
E:first-child | Matches element E when it is the first child of its parent | The :first-child pseudo-class | MAY | MAY |
E:link E:visited |
Matches element E if E is the source anchor of a hyperlink of which the target is not yet visited (:link) or already visited (:visited). | The link pseudo-classes | N/A | N/A |
E:active | Matches E during certain user actions. | The dynamic pseudo-classes | N/A | N/A |
E:hover | Matches E during certain user actions. | The dynamic pseudo-classes | N/A | N/A |
E:focus | Matches E during certain user actions. | The dynamic pseudo-classes | N/A | N/A |
E:lang(c) | Matches element of type E if it is in (human) language c (the document language specifies how language is determined). | The :lang() pseudo-classes | MAY† | MAY† |
E + F | Matches any F element immediately preceded by an element E. | Adjacent selectors | MAY | MAY |
E[foo] | Matches any E element with the "foo" attribute set (whatever the value). | Attribute selectors | MAY | MUST |
E[foo="warning"] | Matches any E element whose "foo" attribute value is exactly equal to "warning". | Attribute selectors | MAY | MUST |
E[foo~="warning"] | Matches any E element whose "foo" attribute value is a list of space-separated values, one of which is exactly equal to "warning". | Attribute selectors | MAY | MUST |
E[xml:lang|="en"] | Matches any E element whose "xml:lang" attribute value has a hyphen-separated list of values beginning (from the left) with "en". | Attribute selectors | MAY† | MAY† |
E:first-line | Matches the first formatted line of an E element. | The :first-line pseudo-element | MAY | MAY |
E:first-letter | Matches the first formatted letter of an E element. | The :first-letter pseudo-element | MAY | MAY |
E:before | Matches/creates generated content before an E element. | The :before pseudo-element | MAY | MAY |
E:after | Matches/creates generated content after an E element. | The :after pseudo-element | MAY | MAY |
E.classid | The same as E[class~=classid] | Class selectors | MUST | MUST |
E#myid | Matches any E element id equal to "myid". | ID selectors | MUST | MUST |
@page :first | Specifies style for the first page of a document | Page pseudo-classes | MUST | MUST |
@page :left | Specifies style for the left pages of a document | Page pseudo-classes | MAY | MAY |
@page :right | Specifies style for the right pages of a document | Page pseudo-classes | MAY | MAY |
Table Notes:
† if the printer supports the xml:lang attribute for the selection and control of language specific processing, then this selector MUST be supported.
The CSS3 module: Paged Media [PAGEMEDIA] deprecates the top and bottom margin boxes defined by the @top and @bottom at-rules. These boxes are replaced by a series of boxes ranging across the top and bottom of the page that allow finer control and placement of content in running headers and footers. These margin boxes MUST be supported by a printer and, for compatibility with existing documents, the printer SHOULD also support the deprecated margin boxes. However, the printer MUST implement the behavior described in CSS3 module: Paged Media ([PAGEMEDIA], Page Selector and page context) where the use of an non-deprecated margin box eclipses the deprecated margin box.
The following table summarizes CSS Print Profile at-rule syntax.
at-rule | Function | CSS Print | CSS Print-Enhanced |
---|---|---|---|
@import | Imports an external style sheet. | MAY | MUST |
@charset | Defines character set for the style sheet. | MUST | MUST |
@media | Groups a set of style rules to apply only to one or more particular media. | MUST | MUST |
@font-face | Defines a named font-family, including for downloading. | MAY | MAY |
@page | Defines a (optionally named) page formatting context. | MUST | MUST |
@color-profile | Defines a named color-profile. | MAY | MAY |
@bottom | Defines an area on the page for a running footer [PAGEMEDIA] (deprecated) | SHOULD | SHOULD |
@bottom-left-corner, @bottom-left, @bottom-center, @bottom-right, @bottom-right-corner |
Defines areas on the page within the running footer in the page's bottom margin [PAGEMEDIA] | MUST | MUST |
@left | Defines margin box in the page's left margin [PAGEMEDIA]. | MAY | MAY |
@right | Defines margin box in the page's right margin [PAGEMEDIA]. | MAY | MAY |
@top | Defines an area on the page for a running header [PAGEMEDIA] (deprecated) | SHOULD | SHOULD |
@top-left-corner, @top-left, @top-center, @top-right, @top-right-corner |
Defines areas on the page within the running header in the page's top margin [PAGEMEDIA] | MUST | MUST |
As with selectors, the properties a printer MUST support are the same as those that a mobile device MUST support ([CSSMOBILE], Properties) with the exception of those that don't apply to the page or are specifically targeted at media other than the page.
In some cases the allowable values for a printer are a subset of the full range of values to match the reduced memory and performance capabilities of a low-cost printer.
The following table summarizes CSS Print Profile properties and property values. Refer to CSS3 module: Paged Media [PAGEMEDIA] for the definition of the image-orientation and size properties and CSS21 [CSS21] for the definition of all other properties and values.
Name | CSS Print | CSS Print-Enhanced | CSS Values | Initial value |
---|---|---|---|---|
'azimuth' | N/A | N/A | <angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inherit | center |
'background' | background-color | inherit | ['background-color' || 'background-image' || 'background-repeat' || 'background-position'] | inherit | ['background-color' || 'background-image' || 'background-repeat' || 'background-attachment' || 'background-position'] | inherit | see individual properties |
'background-attachment' | MAY | MAY | scroll | fixed | inherit | scroll |
'background-color' | MUST | MUST | <color> | transparent | inherit | transparent |
'background-image' | MAY | MUST | <uri> | none | inherit | none |
'background-position' | MAY | MUST | [ [ <percentage> | <length> ]{1,2} | [ [top | center | bottom] || [left | center | right] ] ] | inherit | 0% 0% |
'background-repeat' | MAY | MUST | repeat | repeat-x | repeat-y | no-repeat | inherit | repeat |
'border' | MAY | MUST | [ <border-width> || <border-style> || [<color> | transparent] ] | inherit | see individual properties |
'border-collapse' | MAY | MUST | collapse | separate | inherit | collapse |
'border-color' | MAY | MUST | [<color> | transparent]{1,4} | inherit | see individual properties |
'border-spacing' | MAY | MUST | <length> <length>? | inherit | 0 |
'border-style' | MAY | none, solid | <border-style>{1,4} | inherit | see individual properties |
'border-top' 'border-right' 'border-bottom' 'border-left' | MAY | MUST | [ <border-width> || <border-style> || [<color> | transparent] ] | inherit | see individual properties |
'border-top-color' 'border-right-color' 'border-bottom-color' 'border-left-color' | MAY | MUST | <border-color> | transparent | inherit | the value of the 'color' property |
'border-top-style' 'border-right-style' 'border-bottom-style' 'border-left-style' | MAY | none, solid | <border-style> | inherit | none |
'border-top-width' 'border-right-width' 'border-bottom-width' 'border-left-width' | MAY | MUST | <border-width> | inherit | medium |
'border-width' | MAY | MUST | <border-width>{1,4} | inherit | see individual properties |
'bottom' | MAY | MUST | <length> | <percentage> | auto | inherit | auto |
'caption-side' | MAY | MUST | top | bottom | left | right | inherit | top |
'clear' | MAY | MUST | none | left | right | both | inherit | none |
'clip' | MAY | MUST | <shape> | auto | inherit | auto |
'color' | MUST | MUST | <color> | inherit | depends on user agent |
'content' | inherit | [<string> | counter(pages†)]+ | inherit | [<string> | counter(pages†)]+ | [ <string> | <uri> | <counter> | attr(X) | open-quote | close-quote | no-open-quote | no-close-quote ]+ | inherit | empty string |
'counter-increment' | "pages"† | "pages"† | [ <identifier> <integer> ]+ | none | inherit | none |
'counter-reset' | MUST | MUST | [ <identifier> <integer>? ]+ | none | inherit | none |
'cue' | N/A | N/A | [ 'cue-before' || 'cue-after' ] | inherit | see individual properties |
'cue-after' | N/A | N/A | <uri> | none | inherit | none |
'cue-before' | N/A | N/A | <uri> | none | inherit | none |
'cursor' | N/A | N/A | [ [<uri> ,]* [ auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize| text | wait | help ] ] | inherit | auto |
'direction' | MAY | MAY | ltr | rtl | inherit | ltr |
'display' | MAY | inline | block | list-item | none |inherit | inline | block | list-item | run-in | compact | marker | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | inherit | inline |
'elevation' | N/A | N/A | <angle> | below | level | above | higher | lower | inherit | level |
'empty-cells' | MAY | MAY | show | hide | inherit | show |
'float' | MAY | MUST | left | right | none | inherit | none |
'font' | [ [ 'font-style' || 'font-weight' ]? 'font-size' [ / 'line-height' ]? 'font-family' ] | inherit | [ [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-height' ]? 'font-family' ] | inherit | [ [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-height' ]? 'font-family' ] | caption | icon | menu | message-box | small-caption | status-bar | inherit | see individual properties |
'font-family' | MUST* | MUST* | [[ <family-name> | <generic-family> ],]* [ <family-name> | <generic-family> ] | inherit | depends on user agent |
'font-size' | MUST ** | MUST ** | <absolute-size> | <relative-size> | <length> | <percentage> | inherit | medium |
'font-size-adjust' | MAY | MAY | <number> | none | inherit | none |
'font-stretch' | MAY | MAY | normal | wider | narrower | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit | normal |
'font-style' | MUST ** | MUST ** | normal | italic | oblique | inherit | normal |
'font-variant' | MAY | MUST | normal | small-caps | inherit | normal |
'font-weight' | MUST ** | MUST ** | normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit | normal |
'height' | MUST | MUST | <length> | <percentage> | auto | inherit | auto |
'image-orientation' | MAY | ±0deg | ±90deg | ±180deg | ±270deg | ±0rad | ±1.5708rad | ±3.1416rad | ±4.7124rad | ±0grad | ±100grad | ±200grad | ±300grad | <angle> | auto | auto |
'left' | MAY | MUST | <length> | <percentage> | auto | inherit | auto |
'letter-spacing' | MAY | MUST | normal | <length> | inherit | normal |
'line-height' | MUST | MUST | normal | <number> | <length> | <percentage> | inherit | normal |
'list-style' | MAY | MUST | [ 'list-style-type' || 'list-style-position' || 'list-style-image' ] | inherit | see individual properties |
'list-style-image' | MAY | MUST | <uri> | none | inherit | none |
'list-style-position' | MUST | MUST | inside | outside | inherit | outside |
'list-style-type' | disc, decimal, lower-alpha, upper-alpha, none and inherit | disc, decimal, lower-alpha, upper-alpha, none and inherit | disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-alpha | lower-latin | upper-alpha | upper-latin | hebrew | armenian | georgian | cjk-ideographic | hiragana | katakana | hiragana-iroha | katakana-iroha | none | inherit | disc |
'margin' | MUST | MUST | <margin-width>{1,4} | inherit | see individual properties |
'margin-top' 'margin-right' 'margin-bottom' 'margin-left' | MUST | MUST | <margin-width> | inherit | 0 |
'marker-offset' | MAY | MAY | <length> | auto | inherit | auto |
'marks' | MAY | MAY | [ crop || cross ] | none | inherit | none |
'max-height' | MAY | MAY | <length> | <percentage> | none | inherit | none |
'max-width' | MAY | MAY | <length> | <percentage> | none | inherit | none |
'min-height' | MAY | MAY | <length> | <percentage> | inherit | 0 |
'min-width' | MAY | MAY | <length> | <percentage> | inherit | depends on user agent |
'orphans' | MAY | MUST | <integer> | inherit | 2 |
'outline' | N/A | N/A | [ 'outline-color' || 'outline-style' || 'outline-width' ] | inherit | see individual properties |
'outline-color' | N/A | N/A | <color> | invert | inherit | invert |
'outline-style' | N/A | N/A | <border-style> | inherit | none |
'outline-width' | N/A | N/A | <border-width> | inherit | medium |
'overflow' | MAY | MUST | visible | hidden | scroll | auto | inherit | visible |
'padding' | MAY | MUST | <padding-width>{1,4} | inherit | see individual properties |
'padding-top' 'padding-right' 'padding-bottom' 'padding-left' | MAY | MUST | <padding-width> | inherit | 0 |
'page' | MUST | MUST | <identifier> | auto | auto |
'page-break-after' | auto | always | inherit | auto | always | inherit | auto | always | avoid | left | right | inherit | auto |
'page-break-before' | auto | always | inherit | auto | always | inherit | auto | always | avoid | left | right | inherit | auto |
'page-break-inside' | MUST | MUST | avoid | auto | inherit | auto |
'pause' | N/A | N/A | [ [<time> | <percentage>]{1,2} ] | inherit | depends on user agent |
'pause-after' | N/A | N/A | <time> | <percentage> | inherit | depends on user agent |
'pause-before' | N/A | N/A | <time> | <percentage> | inherit | depends on user agent |
'pitch' | N/A | N/A | <frequency> | x-low | low | medium | high | x-high | inherit | medium |
'pitch-range' | N/A | N/A | <number> | inherit | 50 |
'play-during' | N/A | N/A | <uri> mix? repeat? | auto | none | inherit | auto |
'position' | N/A | MUST ‡ | static | relative | absolute | fixed | inherit | static |
'quotes' | MAY | MAY | [ <string><string>]+ | none | inherit | depends on user agent |
'richness' | N/A | N/A | <number> | inherit | 50 |
'right' | MAY | MUST | <length> | <percentage> | auto | inherit | auto |
'size' | [<length>{1,2}| letter | legal | ledger | A4 | A5 | A3 | B4 | B5 ] | auto | portrait | inherit | [<length>{1,2} | letter | legal | ledger | A4 | A5 | A3 | B4 | B5 ] | auto | portrait | landscape | inherit 2 | [<length>{1,2} | letter | legal | ledger | A4 | A5 | A3 | B4 | B5 ] | auto | portrait | landscape | inherit | auto |
'speak' | N/A | N/A | normal | none | spell-out | inherit | normal |
'speak-header' | N/A | N/A | once | always | inherit | once |
'speak-numeral' | N/A | N/A | digits | continuous | inherit | continuous |
'speak-punctuation' | N/A | N/A | code | none | inherit | none |
'speech-rate' | N/A | N/A | <number> | x-slow | slow | medium | fast | x-fast | faster | slower | inherit | medium |
'stress' | N/A | N/A | <number> | inherit | 50 |
'table-layout' | MAY | MUST | auto | fixed | inherit | auto |
'text-align' | left | center | inherit | left | right | center | inherit | left | right | center | justify | <string> | inherit | depends on user agent and writing direction |
'text-decoration' | none, underline, and inherit | none, underline, and inherit | none | [ underline || overline || line-through || blink ] | inherit | none |
'text-indent' | MUST | MUST | <length> | <percentage> | inherit | 0 |
'text-shadow' | N/A | N/A | none | [<color> || <length> <length> <length>? ,]* [ <color> || <length> <length> <length>?] | inherit | none |
'text-transform' | MAY | MUST | capitalize | uppercase | lowercase | none | inherit | none |
'top' | MAY | MUST | <length> | <percentage> | auto | inherit | auto |
'unicode-bidi' | MAY | MAY | normal | embed | bidi-override | inherit | normal |
'vertical-align' | MAY | MUST1 | baseline | sub | super | top | text-top | middle | bottom | text-bottom | <percentage> | <length> | inherit | baseline |
'visibility' | MAY | MUST | visible | hidden | collapse | inherit | inherit |
'voice-family' | N/A | N/A | [[ <specific-voice> | <generic-voice> ],]* [ <specific-voice> | <generic-voice> ] | inherit | depends on user agent |
'volume' | N/A | N/A | <number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inherit | medium |
'white-space' | MUST | MUST | normal | pre | nowrap | inherit | normal |
'widows' | MAY | MUST | <integer> | inherit | 2 |
'width' | MUST | MUST | <length> | <percentage> | auto | inherit | auto |
'word-spacing' | N/A | N/A | normal | <length> | inherit | normal |
'z-index' | MAY | MAY | auto | <integer> | inherit | auto |
Table Note:
† Only the single identifier "pages" that represents the current page number is REQUIRED.
* It is RECOMMENDED that a printer minimally support "serif," "sans-serif," and "monospace" font families.
** The supported values SHOULD be appropriate to the fonts available to the printer.
‡ The printer MAY ignore positioned elements that are placed on the page before the position of the current element in the normal flow.
1 Vertical alignment is undefined across page boundaries.
2 The printer MAY ignore the value landscape if it lacks the memory to support landscape printing.
The CSS Print Profile uses the same syntax as specified in Cascading Style Sheets, Level 2, revision 1 (CSS21) [CSS21]. The CSS Print Profile uses a subset of the values used in CSS21. Specifically:
Similarly, the CSS Print Profile requires that conforming user agents support the character encoding mechanisms specified in CSS21 [CSS21]. Specifically:
In general, the CSS Print Profile uses the same cascading rules as in CSS21. Specifically:
A CSS Print Profile conforming user agent SHALL be able to process media-dependent style sheets as specified in CSS21 ([CSS21], Section 7). Specifically:
print
media type. all
media type. projection
or
handheld
). The printer is not REQUIRED to satisfy unreferenced
CSS21 conformance statements
pertaining to the print
media type (see [CSS21], Section 7.3.1); the
printer SHALL
satisfy the conformance statements and references
in this specification.
The following sections relax or otherwise modify the conformance requirements.
The nesting of floats, divs, and absolutely positioned boxes within themselves, each other, and table cells is discouraged since the nesting depth of these constructs is printer and implementation dependent. Therefore, a printer MAY support nesting of these constructs beyond an implementation dependent limit.
If page-break-inside: avoid
is specified for a long element and
the printer is unable to buffer the entire element before committing it to
paper, it SHOULD force a page break to occur before the long element and begin
the element starting at the top of the next page. If the long element starts at
the top of a page and exceeds the page length, the printer SHALL print as much
as possible on the first page and then resume that element on the next and
subsequent pages as REQUIRED to preserve the content. A printer is neither
MAY perform scaling to fit the long element on a single
page.
The page size and orientation values specified by CSS Print Profile Properties MUST override similar attributes contained within any commands and/or attributes provided by job-submission protocols.
Due to a printer's mechanical limitations, the actual printable area of the page is usually less than the page size. Results are printer-dependent when the page size specified by the CSS size property does not match the media size the printer chooses to print on. However, a printer SHOULD be guided by the page size value supplied by the CSS size property when choosing the media to print on.
If a page box does not fit the target sheet dimensions, that is, the actual dimensions of the media the printer will be using, the printer MAY choose (in order of preference) to:
The printer MAY consult the user before performing these operations. Lacking "access" to the user, it MAY simply make a decision on its own.
When the page box is smaller than the dimensions of the media the printer is using, the printer MAY place the page box anywhere on the sheet. However, it is RECOMMENDED that the page box be centered on the sheet since this will align double-sided pages and avoid accidental loss of information that is printed near the edge of the sheet
Page headers and footers are useful in printed documents. CSS3 Paged Media Module [PAGEMEDIA] provides a mechanism for placing content into the top and bottom page margins thereby creating running headers and footers. The top and bottom margin areas are subdivided into a series of margin boxes that provide control over content placement within the headers and footers:
A printer MAY vertically align the content of the top margin boxes with the top of the box and the content of the bottom margin boxes with the bottom of the bottom margin boxes.
The top-center margin box MUST be centered on the page, however, the relative widths of the top-left, top-center, and top-right are implementation dependent. The same holds true for the bottom-left, bottom-center, and bottom-right margin boxes.
The following are sample XHTML/CSS fragments used to create running-headers and running-footers.
<style> @page { @top-left{ font-family: Helvetica, Arial, sans-serif; font-size: 18pt; font-weight: bolder; content: "XHTML-Print: A Proposal --- August 25, 2000"; } } </style>
The above example creates a running header that is left aligned, and bold in Helvetica, Arial or the default sans-serif eighteen point font whichever is available.
A printer MUST support a page counter, 'pages', that SHOULD be used to reference a page's page number. The counter MUST be incremented by the counter-increment property and reset to zero by the counter-reset property. Therefore, if the counter reset property is placed in any of the top margin boxes, the counter's value MUST be incremented at the top of the page, while if the property is placed in any of the bottom boxes it is incremented at the end of the page. If the counter-increment property is placed in the page context the counter MUST be incremented at the top of the page.
<style> @page { counter-increment: pages; @bottom-center { font-family: Times, Palatino, serif; font-size: 12pt; font-weight: normal; content: "Page " counter(pages); } } </style>
The above example creates a running footer such as "Page 14" centered on the page in Times, Palatino or the default serif twelve point font whichever is available. Note that since the counter named "pages" is both incremented and used by the @page rule, it will first be incremented and then used; so the footer on the first page will be "Page 1".
This entire section is informative.
Appendix D of Cascading Style Sheets, Level 2, revision 1 ([CSS21], Appendix D) provides a sample style sheet. This sheet uses several properties that are not required of a conforming printer, even ones supporting the enhanced layout extensions (section 2.1).
Developers of printers that do not implement the enhanced layout facilities are encouraged but not required to adhere to the following implementation guidelines that address unsupported properties. These guidelines are presented to promote consistency between printer implementations.
The guidelines below are annotated to show derivation of the guideline from the Cascading Style Sheets, Level 2, revision 1 [CSS21] style sheet.
address, blockquote, body, dd, div, dl, dt, h1, h2, h3, h4, h5, h6,
hr, object, ol, p, pre,
and ul
elements
should be treated as if their display property were set to block
.
li
element should be treated as if its display property were set to list-items
.
table, tr, td, th,
and caption
, should have their
standard meaning and display treatments: table, table-row, table-cell,
and table-caption
.
base, br, html, head, link, meta, param, style
and title
should be treated as if their display property were set to none
.
a, abbr, acronym, b, big, cite, code, dfn, em, form, i, img,
input, kbd, option, samp, small, select, strong, sub, sup, textarea, tt,
and var
,
should be treated as if their display property were set to inline
.
A display property of inline
for the elements img, input, select,
and textarea
allows document authors a flexibility not available if their display property were block
.
ADDRESS, BLOCKQUOTE, BODY, DD, DIV, DL, DT, FIELDSET, FORM,
FRAME, FRAMESET, H1, H2, H3, H4, H5, H6, IFRAME, NOFRAMES,
OBJECT, OL, P, UL, APPLET, CENTER, DIR, HR, MENU,
{ display: block }
LI { display: list-item }
HEAD { display: none }
TABLE { display: table }
TR { display: table-row }
THEAD { display: table-header-group }
TBODY { display: table-row-group }
TFOOT { display: table-footer-group }
COL { display: table-column }
COLGROUP { display: table-column-group }
TD, TH { display: table-cell }
CAPTION { display: table-caption }
body
element should have 0.1 inch wide inset from the
left, top, right, and bottom of the printable area of the page.
Margin calculations will start from these offsets.
BODY { padding: 8px;
line-height: 1.33 }
sub
element should be treated as if its vertical-align property
were set to sub
. Similarly, the content of the sup
element should be treated
as if its vertical-align property were set to sup
.
SUB { vertical-align: sub }
SUP { vertical-align: super }
hr
element should be treated as if its area, as defined by its height and width, were outlined
by a one pixel thick, solid line.
The default line should be one pixel
high and the width of the containing box.
HR { border: 1px inset }
abbr
and acronym
elements should be rendered as scaled capital
letters, at approximately 75% of their size at the current font size. Upper case letters will be unchanged. Printers may
also choose to simply render lower case letters as upper case letters without scaling.
ABBR, ACRONYM { font-variant: small-caps;
letter-spacing: 0.1em }
h1, h2, h3, h4, h5,
and
h6
. Therefore, the printer is not
required to move the content of these elements from the bottom of
one page to the top of the next.
H1, H2, H3,
H4, H5, H6 { page-break-after: avoid;
page-break-inside: avoid }
ul, ol,
and
dl
elements.
UL, OL, DL { page-break-before: avoid }
hr
, should be treated as if the
element's border-style property were set to none
. visible
and the clip
property set to auto
.
static
.
fixed
.
The following style sheet is a modification of the sample sheet in Appendix D of Cascading Style Sheets, Level 2, revision 1 ([CSS21], Appendix D) and depends on the above guidelines.
th { font-weight: bolder; text-align: center } caption { text-align: center } body { line-height: 1.33 } h1 { font-size: 2em; margin: .67em 0 } h2 { font-size: 1.5em; margin: .83em 0 } h3 { font-size: 1.17em; margin: 1em 0 } h4, p, blockquote, ul, form, ol, dl { margin: 1.33em 0 } h5 { font-size: .83em; line-height: 1.17em; margin: 1.67em 0 } h6 { font-size: .67em; margin: 2.33em 0 } h1, h2, h3, h4, h5, h6, b, strong { font-weight: bolder } blockquote { margin-left: 40px; margin-right: 40px } i, cite, em, var, address { font-style: italic } pre, tt, code, kbd, samp { font-family: monospace } pre { white-space: pre } big { font-size: 1.17em } small, sub, sup { font-size: .83em } ol, ul, dd { margin-left: 40px } ol { list-style-type: decimal } ol ul, ul ol, ul ul, ol ol { margin-top: 0; margin-bottom: 0 } br { content: "\A" } @media print { @page { margin: 10% } blockquote, pre { page-break-inside: avoid } }
Developers of printers conforming to the enhanced layout extensions (section 2.1) MUST implement more of Cascading Style Sheets, Level 2, revision 1 [CSS21] than conforming printers, although the set of properties and their values is still less than complete.
Developers of printers are encouraged but not required to adhere to the following implementation guidelines that address unsupported properties.
table, tr, td, th,
and
caption
, should have their standard meaning and display
treatments: table, table-row, table-cell,
and
table-caption
. inset
value of the border-style property is not required.
h1, h2, h3, h4, h5,
and
h6
. Therefore, the printer
need not be concerned with moving the content
of these elements from the bottom of one page to the top of the next.
ul, ol,
and
dl
elements. The following style sheet is a modification of the sample sheet in Appendix D of [CSS21] and depends on the above guidelines.
address, blockquote, body, dd, div, dl, dt, form, h1, h2, h3, h4, h5, h6, object, ol, p, ul, hr, pr e { display: block } li { display: list-item } head { display: none } th { font-weight: bolder; text-align: center } caption { text-align: center } body { padding: 8px; line-height: 1.33 } h1 { font-size: 2em; margin: .67em 0 } h2 { font-size: 1.5em; margin: .83em 0 } h3 { font-size: 1.17em; margin: 1em 0 } h4, p, blockquote, ul, form, ol, dl, { margin: 1.33em 0 } h5 { font-size: .83em; line-height: 1.17em; margin: 1.67em 0 } h6 { font-size: .67em; margin: 2.33em 0 } h1, h2, h3, h4, h5, h6, b, strong { font-weight: bolder } blockquote { margin-left: 40px; margin-right: 40px } i, cite, em, var, address { font-style: italic } pre, tt, code, kbd, samp { font-family: monospace } pre { white-space: pre } big { font-size: 1.17em } small, sub, sup { font-size: .83em } hr { border: 1px } ol, ul, dd { margin-left: 40px } ol { list-style-type: decimal } ol ul, ul ol, ul ul, ol ol { margin-top: 0; margin-bottom: 0 } br { content: "\A" } @media print { @page { margin: 10% } blockquote, pre { page-break-inside: avoid } }
This section is informative.
This specification was prepared by the W3C CSS Working Group. The participants at the time of publication were:
List will be inserted when this document becomes a Recommendation.
This specification is based, almost exclusively, on the specification of the same name, CSS Print Profile [CSSPP] from the Printer Working Group, a program of and through the IEEE Industry Standards and Technology Organization, Inc., and the editor wishes to express his gratitude to all those who contributed to it.