Add final level 3 tab-size and processing details
3.1. White Space Collapsing: the text-space-collapse propertyThis section is still under discussion and may change in future drafts.
Name: text-space-collapse Value: collapse | discard | preserve | preserve-auto | preserve-trim | preserve-breaks | preserve-spaces Initial: collapse Applies to: all elements Inherited: yes Percentages: n/a Media: visual Computed value: as specified Animatable: noThis property declares whether and how white space inside the element is collapsed. Values have the following meanings, which must be interpreted according to the white space processing rules:
Note: the preserve-trim value is at risk.
The CSSWG would appreciate feedback on the use cases for this value, to evaluate whether this value is needed at all and if so, if trimming leading spaces could be needed as well.
xml:space="preserve"
in SVG.)
Does this preserve line break opportunities or no? Do we need a "hide" value?
The following style rules implement MathML’s white space processing:
@namespace m "http://www.w3.org/1998/Math/MathML"; m|* { text-space-collapse: discard; } m|mi, m|mn, m|mo, m|ms, m|mtext { text-space-collapse: trim-inner; }
This section is still under discussion and may change in future drafts.
3.2. White Space Trimming: the text-space-trim property Name: text-space-trim Value: none | trim-inner || discard-before || discard-after Initial: none Applies to: all elements Inherited: no Percentages: n/a Media: visual Computed value: as specified Animatable: noThis property allows authors to specify trimming behavior at the beginning and end of a box. Values have the following meanings, which must be interpreted according to the white space processing rules:
The following style rules render DT elements as a comma-separated list:
dt { display: inline; } dt + dt:before { content: ", "; text-space-collapse: discard-before; }4. Line Breaking and Word Boundaries 5. Text Wrapping
Text wrapping is controlled by the text-wrap, wrap-before, wrap-after, wrap-inside, and overflow-wrap properties:
Add final level 3 overflow-wrap
5.1. Text Wrap Settings: the text-wrap property Name: text-wrap Value: normal | nowrap | balance Initial: normal Applies to: all elements Inherited: yes Percentages: n/a Media: visual Computed value: as specified Animatable: noThis property specifies the mode for text wrapping. Possible values:
For balancing purposes, the inline-size to consider includes any length taken up by floats that shorten the line box. The inline-size to consider comes before any adjustments for justification. Line boxes are balanced when the standard deviation from the average inline-size consumed is reduced over the block (including lines that end in a forced break).
The exact algorithm is UA-defined.
UAs may treat this value as normal if there are more than ten lines to balance.
Regardless of the text-wrap value, lines always break at forced breaks: for all values, line-breaking behavior defined for the BK, CR, LF, CM NL, and SG line breaking classes in [UAX14] must be honored.
UAs that allow breaks at punctuation other than spaces should prioritize breakpoints. For example, if breaks after slashes have a lower priority than spaces, the sequence “check /etc” will never break between the ‘/’ and the ‘e’. The UA may use the width of the containing block, the text’s language, and other factors in assigning priorities. As long as care is taken to avoid such awkward breaks, allowing breaks at appropriate punctuation other than spaces is recommended, as it results in more even-looking margins, particularly in narrow measures.
5.2. Inline breaks between boxes: the wrap-before/wrap-after properties Name: wrap-before, wrap-after Value: auto | avoid | avoid-line | avoid-flex | line | flex Initial: auto Applies to: inline-level boxes and flex items Inherited: no Percentages: n/a Media: visual Computed value: as specified Animatable: noThese properties specify modifications to break opportunities in line breaking (and flex line breaking [CSS3-FLEXBOX]). Possible values:
Forced line breaks on inline-level boxes propagate upward through any parent inline boxes the same way forced breaks on block-level boxes propagate upward through any parent block boxes in the same fragmentation context. [CSS3-BREAK]
5.3. Line breaks within boxes: the wrap-inside property Name: wrap-inside Value: auto | avoid Initial: auto Applies to: inline boxes Inherited: no Percentages: n/a Media: visual Computed value: as specified Animatable: noIf boxes with avoid are nested and the UA must break within these boxes, a break in an outer box must be used before a break within an inner box may be used.
The priority of breakpoints can be set to reflect the intended grouping of text.
Given the rules
footer { wrap-inside: avoid; } venue { wrap-inside: avoid; } date { wrap-inside: avoid; } place { wrap-inside: avoid; }
and the following markup:
<footer> <venue>27th Internationalization and Unicode Conference</venue> • <date>April 7, 2005</date> • <place>Berlin, Germany</place> </footer>
In a narrow window the footer could be broken as
27th Internationalization and Unicode Conference • April 7, 2005 • Berlin, Germany
or in a narrower window as
27th Internationalization and Unicode Conference • April 7, 2005 • Berlin, Germany
but not as
27th Internationalization and Unicode Conference • April 7, 2005 • Berlin, Germany6. Last Line Minimum Length
See
thread. Issue is about requiring a minimum length for lines. Common measures seem to be
Suggestion for value space is ''match-indent | <length> | <percentage>'' (with Xch given as an example to make that use case clear). Alternately <integer> could actually count the characters.
It’s unclear how this would interact with text balancing (above); one earlier proposal had them be the same property (with 100% meaning full balancing).
People have requested word-based limits, but since this is really dependent on the length of the word, character-based is better.
7. Shorthand for White Space and Wrapping: the white-space property Name: white-space Value: normal | pre | nowrap | pre-wrap | pre-wrap-auto | pre-line Initial: auto Applies to: all elements Inherited: yes Percentages: n/a Media: visual Computed value: as specified Animatable: noThis property is a shorthand for text-space-collapse, text-wrap, and text-space-trim.
Note: This shorthand combines both inheritable and non-inheritable properties. If this is a problem, please inform the CSSWG.
The following table gives the mapping of the values of the shorthand to its longhands.
8. Breaking Within Words 8.1. Hyphens: the hyphenate-character property Name: hyphenate-character Value: auto | <string> Initial: auto Applies to: all elements Inherited: yes Percentages: n/a Media: visual Computed value: as specified Animatable: noThis property specifies strings that are shown between parts of hyphenated words. The auto value means that the user agent should find an appropriate value, preferably from the same source as the hyphenation dictionary. If a string is specified, it appears at the end of the line before a hyphenation break.
In Latin scripts, the hyphen character (U+2010) is often used to indicate that a word has been split. Normally, it will not be necessary to set it explicitly. However, this can easily be done:
article { hyphenate-character: "\2010" }
Both hyphens triggered by automatic hyphenation and hyphens triggered by soft hyphens are rendered according to hyphenate-character.
8.2. Hyphenation Size Limit: the hyphenate-limit-zone property Name: hyphenate-limit-zone Value: <percentage> | <length> Initial: 0 Applies to: block containers Inherited: yes Percentages: refers to width of the line box Media: visual Computed value: as specified Animatable: noIs hyphenate-limit-zone a good name? Comments/suggestions?
This property specifies the maximum amount of unfilled space (before justification) that may be left in the line box before hyphenation is triggered to pull part of a word from the next line back up into the current line.
8.3. Hyphenation Character Limits: the hyphenate-limit-chars property Name: hyphenate-limit-chars Value: [ auto | <integer> ]{1,3} Initial: auto Applies to: all elements Inherited: yes Percentages: n/a Media: visual Computed value: as specified Animatable: noThis property specifies the minimum number of characters in a hyphenated word. If the word does not meet the required minimum number of characters in the word / before the hyphen / after the hyphen, then the word must not be hyphenated. Nonspacing combining marks (Unicode class) and intra-word punctuation (Unicode classes P*) do not count towards the minimum.
If three values are specified, the first value is the required minimum for the total characters in a word, the second value is the minimum for characters before the hyphenation point, and the third value is the minimum for characters after the hyphenation point. If the third value is missing, it is the same as the second. If the second value is missing, then it is auto. The auto value means that the UA chooses a value that adapts to the current layout.
Unless the UA is able to calculate a better value, it is suggested that auto means 2 for before and after, and 5 for the word total.
In the example below, the minimum size of a hyphenated word is left to the UA (which means it may vary depending on the language, the length of the line, or other factors), but the minimum number of characters before and after the hyphenation point is set to 3.
p { hyphenate-limit-chars: auto 3; }8.4. Hyphenation Line Limits: the hyphenate-limit-lines and hyphenate-limit-last properties Name: hyphenate-limit-lines Value: no-limit | <integer> Initial: no-limit Applies to: block containers Inherited: yes Percentages: n/a Media: visual Computed value: as specified Animatable: no
This property indicates the maximum number of successive hyphenated lines in an element. The no-limit value means that there is no limit.
In some cases, user agents may not be able to honor the specified value. (See overflow-wrap.) It is not defined whether hyphenation introduced by such emergency breaking influences nearby hyphenation points.
Name: hyphenate-limit-last Value: none | always | column | page | spread Initial: none Applies to: block containers Inherited: yes Percentages: n/a Media: visual Computed value: as specified Animatable: noThis property indicates hyphenation behavior at the end of elements, column, pages and spreads. A spread is a set of two pages that are visible to the reader at the same time. Values are:
p { hyphenate-limit-last: always } div.chapter { hyphenate-limit-last: spread }
A paragraph may be formatted like this when 'hyphenate-limit-last: none' is set:
This is just a simple example to show Antarc- tica.
With 'hyphenate-limit-last: always' one would get:
This is just a simple example to show Antarctica.9. Alignment and Justification
Add this value to text-align
When multiple cells in a column have an alignment character specified, the alignment character of each such cell in the column is centered along a single column-parallel axis and the rest of the text in the column shifted accordingly. (Note that the strings do not have to be the same for each cell, although they usually are.)
The following style sheet:
TD { text-align: "." center }
will cause the column of dollar figures in the following HTML table:
<TABLE> <COL width="40"> <TR> <TH>Long distance calls <TR> <TD> $1.30 <TR> <TD> $2.50 <TR> <TD> $10.80 <TR> <TD> $111.01 <TR> <TD> $85. <TR> <TD> N/A <TR> <TD> $.05 <TR> <TD> $.06 </TABLE>
to align along the decimal point. The table might be rendered as follows:
+---------------------+ | Long distance calls | +---------------------+ | $11.30 | | $22.50 | | $0.80 | | $200567.01 | | $85. | | N/A | | $.05 | | $.06 | +---------------------+
A keyword value may be specified in conjunction with the <string> value; if it is not given, it defaults to right. This value is used:
Right alignment is used by default for character-based alignment because numbering systems are almost all left-to-right even in right-to-left writing systems, and the primary use case of character-based alignment is for numerical alignment.
If the alignment character appears more than once in the text, the first instance is used for alignment. If the alignment character does not appear in a cell at all, the string is aligned as if the alignment character had been inserted at the end of its contents.
Character-based alignment occurs before table cell width computation so that auto width computations can leave enough space for alignment. Whether column-spanning cells participate in the alignment prior to or after width computation is undefined. If width constraints on the cell contents prevent full alignment throughout the column, the resulting alignment is undefined.
10. SpacingAdd final level 3 word-spacing, letter-spacing
10.1. Character Class Spacing: the text-spacing property Name: text-spacing Value: normal | none | [ trim-start | space-start ] || [ trim-end | space-end | allow-end ] || [ trim-adjacent | space-adjacent ] || no-compress || ideograph-alpha || ideograph-numeric || punctuation Initial: normal Applies to: block containers Inherited: yes Percentages: N/A Media: visual Computed value: specified valueThis property controls spacing between adjacent characters on the same line within the same inline formatting context using a set of character-class-based rules. Such spacing can either be created between or trimmed from the affected glyphs. Values are defined as follows:
Note: A commonly used algorithm for determining this behavior is specified in [JLREQ].
Note: A commonly used algorithm for determining this behavior is specified in [JLREQ].
In this level, if the element’s content language is French, narrow no-break space (U+202F) and no-break space (U+00A0) is inserted where required by French typographic guidelines. Otherwise this value has no effect. However future specifications may add automatic spacing behavior for other languages.
Note: An example of compression rules is given for Japanese in 3.8 Line Adjustment in [JLREQ].
This property is additive with the word-spacing and letter-spacing properties. That is, the amount of spacing contributed by the letter-spacing setting (if any) is added to the spacing created by text-spacing. The same applies to word-spacing.
At element boundaries, the amount of extra spacing introduced between characters is determined by and rendered within the innermost element that contains the boundary. If the extra spacing is applied to a particular glyph, then the spacing is determined by the innermost element containing that glyph.
Note: Values other than normal, none, trim-start, trim-end, and space-end are at-risk and may be dropped from this level of CSS. They are defined here currently to help work out a complete design of this feature.
Support for this property is optional. It is strongly recommended for UAs that wish to support CJK typography.
It was requested to add a value for doubling the space after periods.
10.1.1. Fullwidth Punctuation CollapsingTypically, fullwidth characters have glyphs with the same advance width as a standard Han character (e.g. 水 U+6C34). However, many fullwidth punctuation glyphs only take up part of the fullwidth design space. Thus such punctuation are not always set fullwidth. Several values of text-spacing allow the author to control when such characters are set half-width (typically half the width of an ideograph) and when they are set full-width.
In order to set the text as specified, the UA will need to either
Some fonts use proportional glyphs for fullwidth punctuation characters. For such proportional glyphs, the given advance width is considered simultaneously full-width and half-width: no space is added or removed.
The advance width of a standard Han character can be determined either from font metrics such as the OpenType ideo
and idtp
baselines for the opposite writing mode, or by taking the advance width of a Han character such as 水 U+6C34. (The opposite writing mode must be used because some fonts are compressed so that the characters are not square.) More information on OpenType metrics can be found in the OpenType spec. Note that if 水 U+6C34, 卜 U+535C, and 一 U+4E00 do not all have the same advance width, the font has proportional ideographs and the fullwidth advance width cannot be reliably determined by measuring glyphs.
Unless text-spacing is set to space-adjacent or none (or the font has proportional fullwidth punctuation glyphs), the UA must collapse the space typically associated with such full width glyphs as follows:
The following example table lists the punctuation pairs affected by adjancent-pairs trimming. It uses halfwidth equivalents to approximate the trimming effect.
Demonstration of adjacent-pairs punctuation trimming Combination Sample Pair Looks Like Opening—Opening 〔+( 〔( Middle Dot—Opening ・+( ・( Closing—Opening 〕+( ) ( Ideographic Space—Opening +( ( Closing—Closing )+〕 )〕 Closing—Middle Dot )+・ )・ Closing—Ideographic Space )+ ) 10.1.2. Text Spacing Character ClassesIn the context of this property the following definitions apply:
Classes and Unicode code points need to be reviewed.
Ps
) that belongs to the CJK Symbols and Punctuation block (U+3000–U+303F) or is categorized as East Asian Fullwidth (F) by [UAX11]. Also includes LEFT SINGLE QUOTATION MARK (U+2018) and LEFT DOUBLE QUOTATION MARK (U+201C). When trimmed, the left (for horizontal text) or top (for vertical text) half is kerned.
Pe
) that belongs to the CJK Symbols and Punctuation block (U+3000–U+303F) or is categorized as East Asian Fullwidth (F) by [UAX11]. Also includes RIGHT SINGLE QUOTATION MARK (U+2019) and RIGHT DOUBLE QUOTATION MARK (U+201D). May also include fullwidth colon punctuation and/or fullwidth dot punctuation (see below). When trimmed, the right (for horizontal text) or bottom (for vertical text) half is kerned.
Whether fullwidth colon punctuation and fullwidth dot punctuation should be considered fullwidth closing punctuation or fullwidth middle dot punctuation depends on where in the glyph’s box the punctuation is drawn. If the punctuation is centered, then it should be considered middle dot punctuation. If the punctuation is drawn to one side (left in horizontal text, top in vertical text) and the other half is therefore blank then the punctuation should be considered closing punctuation and trimmed accordingly.
The UA must classify fullwidth colon punctuation and fullwidth dot punctuation under either the fullwidth closing punctuation category or the fullwidth middle dot punctuation category as appropriate. The UA may rely on language conventions and the writing mode (horizontal vs. vertical), and/or font information to determine this categorization. The UA may also add additional characters to any category as appropriate.
The following informative table summarizes language conventions for classifying fullwidth colon and dot punctuation:
colon punctuation dot punctuation Simplified Chinese (horizontal) closing closing Simplified Chinese (vertical) closing closing Traditional Chinese middle dot middle dot Korean middle dot closing Japanese middle dot closingNote that for Chinese fonts at least, the author observes that the standard convention is often not followed.
10.1.3. Japanese Paragraph-start Conventions in CSSJapanese has three common start-edge typesetting schemes, which are distinguished by their handling of opening brackets.
Positioning of opening brackets at line head [JLREQ]
Assuming a UA style sheet of p { margin: 1em 0; }
, CSS can achieve the Japanese typesetting styles with the following rules:
p { /* Flush alignment */ margin: 0; text-indent: 1em; text-spacing: trim-start; }
p { /* Fullwidth alignment */ margin: 0; text-indent: 1em; text-spacing: normal; }
p { /* Hanging alignment */ margin: 0; text-indent: 1em; text-spacing: trim-start; hanging-punctuation: first; }
Add final level 3 content
AcknowledgementsAdd final level 3 list, with Randy Edmunds and Florian Rivoal added
Conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in the normative parts of this document are to be interpreted as described in RFC 2119. However, for readability, these words do not appear in all uppercase letters in this specification.
All of the text of this specification is normative except sections explicitly marked as non-normative, examples, and notes. [RFC2119]
Examples in this specification are introduced with the words "for example" or are set apart from the normative text with class="example"
, like this:
Informative notes begin with the word "Note" and are set apart from the normative text with class="note"
, like this:
Note, this is an informative note.
Advisements are normative sections styled to evoke special attention and are set apart from other normative text with <strong class="advisement">
, like this: UAs MUST provide an accessible alternative.
A style sheet is conformant to this specification if all of its statements that use syntax defined in this module are valid according to the generic CSS grammar and the individual grammars of each feature defined in this module.
A renderer is conformant to this specification if, in addition to interpreting the style sheet as defined by the appropriate specifications, it supports all the features defined by this specification by parsing them correctly and rendering the document accordingly. However, the inability of a UA to correctly render a document due to limitations of the device does not make the UA non-conformant. (For example, a UA is not required to render color on a monochrome monitor.)
An authoring tool is conformant to this specification if it writes style sheets that are syntactically correct according to the generic CSS grammar and the individual grammars of each feature in this module, and meet all other conformance requirements of style sheets as described in this module.
So that authors can exploit the forward-compatible parsing rules to assign fallback values, CSS renderers must treat as invalid (and ignore as appropriate) any at-rules, properties, property values, keywords, and other syntactic constructs for which they have no usable level of support. In particular, user agents must not selectively ignore unsupported component values and honor supported values in a single multi-value property declaration: if any value is considered invalid (as unsupported values must be), CSS requires that the entire declaration be ignored.
To avoid clashes with future CSS features, the CSS2.1 specification reserves a prefixed syntax for proprietary and experimental extensions to CSS.
Prior to a specification reaching the Candidate Recommendation stage in the W3C process, all implementations of a CSS feature are considered experimental. The CSS Working Group recommends that implementations use a vendor-prefixed syntax for such features, including those in W3C Working Drafts. This avoids incompatibilities with future changes in the draft.
Once a specification reaches the Candidate Recommendation stage, non-experimental implementations are possible, and implementors should release an unprefixed implementation of any CR-level feature they can demonstrate to be correctly implemented according to spec.
To establish and maintain the interoperability of CSS across implementations, the CSS Working Group requests that non-experimental CSS renderers submit an implementation report (and, if necessary, the testcases used for that implementation report) to the W3C before releasing an unprefixed implementation of any CSS features. Testcases submitted to W3C are subject to review and correction by the CSS Working Group.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4