Copyright © 2009 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
CSS is a language for describing the rendering of structured documents (such as HTML and XML) on screen, on paper, in speech, etc. This draft contains the features of CSS level 3 relating to list styling. It includes and extends the functionality of CSS level 2 [CSS21], which builds on CSS level 1 [CSS1]. The main extensions compared to level 2 are summarize here.
This document has been unowned since 7 November 2002.
This is a public copy of the editors' draft. It is provided for discussion only and may change at any moment. Its publication here does not imply endorsement of its contents by W3C. Don't cite this document other than as work in progress.
The (archived) public mailing list www-style@w3.org (see instructions) is preferred for discussion of this specification. When sending e-mail, please put the text “css3-lists” in the subject, preferably like this: “[css3-lists] …summary of comment…”
This document was produced by the CSS Working Group (part of the Style Activity).
This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
list-style-type’ property
list-style-image’ property
content’ property
list-style-position’ property
list-style’ shorthand property
The list model in this module differs in some important ways from the list model in CSS2, specifically in its handling of markers. Implementation experience suggested the CSS2 model overloaded the ::before and ::after pseudo-elements with too much behavior, while at the same time introducing new properties when existing properties were sufficient.
Most block-level elements in CSS generate one principal block box. In this module, we discuss two CSS mechanisms that cause an element to have an associated marker: one method associates one principal block box (for the element's content) with a separate marker box (for decoration such as a bullet, image, or number), and the other inserts a marker box into the principal box. Unlike :before and :after content, the marker box cannot affect the position of the principal box, whatever the positioning scheme.
For instance, the following example illustrates how markers may be used to add parentheses around each numbered list item. This HTML application and style sheet:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Creating a list with markers</TITLE>
<STYLE type="text/css">
LI::marker { content: "(" counter(list-item, lower-roman) ")"; }
LI { display: list-item; }
</STYLE>
</HEAD>
<BODY>
<OL>
<LI> This is the first item. </LI>
<LI> This is the second item. </LI>
<LI> This is the third item. </LI>
</OL>
</BODY>
</HTML>
should produce something like this:
(i) This is the first item. (ii) This is the second item. (iii) This is the third item.
With descendant selectors and child selectors, it's possible to specify different marker types depending on the depth of embedded lists.
A future release of this module will probably include ways to render tree lists.
To declare a list item, the ‘display’ property should be set to
‘list-item’. This, in addition to
generating a ::marker pseudo-element and enabling
the properties described below for that element, causes that element to
increment the list item counter list-item. (This
does not affect the specified or computed values of the counter
properties.)
The list-item counter is a real counter, and can
be directly affected using the ‘counter-increment’ and ‘counter-reset’ properties. It can also
be used in the counter() and counters() function forms.
The CSS3 box module may define other ‘display’
values which generate a list marker. These should also affect the
‘list-item’ counter.
Note that this new model makes the marker display type redundant. That display type is therefore obsolete in the CSS3 Lists model.
list-style-type’ property| Name: | list-style-type |
| Value: | <glyph> | <algorithmic> | <numeric> | <alphabetic> | <symbolic> | <non-repeating> | normal | none |
| Initial: | disc |
| Applies�to: | all elements with ‘display:
list-item’
|
| Inherited: | yes |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | specified value |
| Depends on: | none |
This property specifies the default appearance of the list item marker
if ‘list-style-image’ has the
value ‘none’ or if the image
pointed to by the URI cannot be displayed. The value ‘none’ specifies no marker, otherwise there are
six types of marker: glyphs, algorithmic systems, numeric systems,
alphabetic systems, symbolic systems, and non-repeating systems.
Glyphs are single characters, whereas algorithmic, numeric, alphabetic, symbolic and non-repeating systems are designed so that each item in that style gets a deterministicly different marker. This makes lists easier to navigate.
Most numbering systems have a suffix defined. It is used when generating the default content for the marker.
Other values are defined in the following sections. User agents should follow these algorithms unless a more normative source is found.
All markers with the same glyph style should use the same glyph. To
obtain other glyphs, authors should use the ‘content’
property of the ::marker pseudo-element.
check’.
(like ✓ U+2713 CHECK MARK)diamond’. On some platforms, this is
similar to ‘disc’. (like ◆ U+25C6 BLACK DIAMOND
or ♦ U+2666 BLACK DIAMOND SUIT)The definitions above may be removed and made UA-dependent if it is found that there are discrepancies in the existing implementations.
We could add more values, there are certainly plenty to choose from in UNICODE. How about a star? Or a triangle? Note that the stylesheet of this document uses triangular bullets for notes, and yet that can only be described using a pseudo-element, content property, and unicode escape. Is that too much effort for a simple triangle?
A future level of CSS may provide a way to specify different bullet types at arbitrary nesting levels. The Working Group considered adding an auto value with the following definition, but decided not to include it in this release: "The auto value is intended to cause the UA to use a list numbering style different from that of the nearest ancestor list-item element. The exact rendering depends on the user agent."
Glyphs have no suffix.
Algorithmic systems are the most complicated and are described first. For these algorithms, it is assumed that the rendering engine will apply the bidirectionality algorithm after generating the numeric strings.
Note: Readers not accustomed to reading bidirectional text should pay close attention to the directionality of characters versus their associated UNICODE codepoints. All codepoints are given in logical order, but example strings in this document should be rendered in correct reading order.
| Thousands | Hundreds | Tens | Units | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Values | Codepoints | Values | Codepoints | Values | Codepoints | Values | Codepoints | ||||
| 1000 | ռ | U+057C | 100 | ճ | U+0573 | 10 | ժ | U+056A | 1 | ա | U+0561 |
| 2000 | ս | U+057D | 200 | մ | U+0574 | 20 | ի | U+056B | 2 | բ | U+0562 |
| 3000 | վ | U+057E | 300 | յ | U+0575 | 30 | լ | U+056C | 3 | գ | U+0563 |
| 4000 | տ | U+057F | 400 | ն | U+0576 | 40 | խ | U+056D | 4 | դ | U+0564 |
| 5000 | ր | U+0580 | 500 | շ | U+0577 | 50 | ծ | U+056E | 5 | ե | U+0565 |
| 6000 | ց | U+0581 | 600 | ո | U+0578 | 60 | կ | U+056F | 6 | զ | U+0566 |
| 7000 | ւ | U+0582 | 700 | չ | U+0579 | 70 | հ | U+0570 | 7 | է | U+0567 |
| 8000 | փ | U+0583 | 800 | պ | U+057A | 80 | ձ | U+0571 | 8 | ը | U+0568 |
| 9000 | ք | U+0584 | 900 | ջ | U+057B | 90 | ղ | U+0572 | 9 | թ | U+0569 |
The suffix for the armenian numbering system is a dot (. U+002E FULL STOP).
Numbers outside the range of the armenian system are rendered using the decimal numbering style.
Decimal 2951 in lower-armenian is սջծա U+057D U+057B U+056E U+0561.
The suffix for the cjk-ideographic numbering systems is a dot (. U+002E FULL STOP). Is there a better suffix to use?
If specified explicitly, the cjk-ideograph keyword should be handled like trad-chinese-informal.
| Tens | Units | ||||
|---|---|---|---|---|---|
| Values | Codepoints | Values | Codepoints | ||
| 10 | ፲ | U+1372 | 1 | ፩ | U+1369 |
| 20 | ፳ | U+1373 | 2 | ፪ | U+136A |
| 30 | ፴ | U+1374 | 3 | ፫ | U+136B |
| 40 | ፵ | U+1375 | 4 | ፬ | U+136C |
| 50 | ፶ | U+1376 | 5 | ፭ | U+136D |
| 60 | ፷ | U+1377 | 6 | ፮ | U+136E |
| 70 | ፸ | U+1378 | 7 | ፯ | U+136F |
| 80 | ፹ | U+1379 | 8 | ፰ | U+1370 |
| 90 | ፺ | U+137A | 9 | ፱ | U+1371 |
This system is defined for all numbers greater than zero. For zero and negative numbers, the decimal system is used instead.
The suffix for the ethiopic-numeric numbering systems is a dot (. U+002E FULL STOP). Is there a better suffix to use? The alphabetic ethiopic systems use a different suffix.
The decimal number 100, in ethiopic, is ፻ U+137B
The decimal number 78010092, in ethiopic, is ፸፰፻፩፼፻፺፪ U+1378 U+1370 U+137B U+1369 U+137C U+137B U+137A U+136A.
The decimal number 780000001092, in ethiopic, is ፸፰፻፩፼፻፼፻፺፪ U+1378 U+1370 U+137B U+1369 U+137C U+137B U+137C U+137B U+137A U+136A.
| Tens of Thousands | Thousands | Hundreds | Tens | Units | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Values | Codepoints | Values | Codepoints | Values | Codepoints | Values | Codepoints | Values | Codepoints | |||||
| 10000 | ჵ | U+10F5 | 1000 | ჩ | U+10E9 | 100 | რ | U+10E0 | 10 | ი | U+10D8 | 1 | ა | U+10D0 |
| 2000 | ც | U+10EA | 200 | ს | U+10E1 | 20 | კ | U+10D9 | 2 | ბ | U+10D1 | |||
| 3000 | ძ | U+10EB | 300 | ტ | U+10E2 | 30 | ლ | U+10DA | 3 | გ | U+10D2 | |||
| 4000 | წ | U+10EC | 400 | ჳ (��) | U+10F3 (U+10E3) | 40 | მ | U+10DB | 4 | დ | U+10D3 | |||
| 5000 | ჭ | U+10ED | 500 | ფ | U+10E4 | 50 | ნ | U+10DC | 5 | ე | U+10D4 | |||
| 6000 | ხ | U+10EE | 600 | ქ | U+10E5 | 60 | ჲ | U+10F2 | 6 | ვ | U+10D5 | |||
| 7000 | ჴ | U+10F4 | 700 | ღ | U+10E6 | 70 | ო | U+10DD | 7 | ზ | U+10D6 | |||
| 8000 | ჯ | U+10EF | 800 | ყ | U+10E7 | 80 | პ | U+10DE | 8 | ჱ | U+10F1 | |||
| 9000 | ჰ | U+10F0 | 900 | შ | U+10E8 | 90 | ჟ | U+10DF | 9 | თ | U+10D7 | |||
Note that these codepoints are not all sequential.
The suffix for the georgian numbering system is a dot (. U+002E FULL STOP).
Numbers outside the range of the georgian system are rendered using the decimal numbering style.
This is a simple additive system defined for the range 1 to 999999. The digits are split into two groups of three. Within each group, appropriate digits are picked from the following list (at most one per column) and written in descending order by value (hundreds first). If there is more than one group, the first group is followed by HEBREW PUNCTUATION GERESH U+05F3.
| Hundreds | Tens | Units | ||||||
|---|---|---|---|---|---|---|---|---|
| Values | Codepoints | Values | Codepoints | Values | Codepoints | |||
| 100 | ק | U+05E7 | 10 | י | U+05D9 | 1 | א | U+05D0 |
| 200 | ר | U+05E8 | 20 | כ | U+05DB | 2 | ב | U+05D1 |
| 300 | ש | U+05E9 | 30 | ל | U+05DC | 3 | ג | U+05D2 |
| 400 | ת | U+05EA | 40 | מ | U+05DE | 4 | ד | U+05D3 |
| 500 | תק | U+05EA U+05E7 | 50 | נ | U+05E0 | 5 | ה | U+05D4 |
| 600 | תר | U+05EA U+05E8 | 60 | ס | U+05E1 | 6 | ו | U+05D5 |
| 700 | תש | U+05EA U+05E9 | 70 | ע | U+05E2 | 7 | ז | U+05D6 |
| 800 | תת | U+05EA U+05EA | 80 | פ | U+05E4 | 8 | ח | U+05D7 |
| 900 | תתק | U+05EA U+05EA U+05E7 | 90 | צ | U+05E6 | 9 | ט | U+05D8 |
If the last two digits of a group (when represented in decimal) are 15 or 16, they should be expressed not as יה U+05D9 U+05D4 (10+5) and יו U+05D9 U+05D5 (10+6), but as טו U+05D8 U+05D5 (9+6) and טז U+05D8 U+05D6 (9+7). This is done to avoid a close resemblance to the Tetragrammaton (four-letter name of God) יהוה U+05D9 U+05D4 U+05D5 U+05D4. Although this convention is originally derived from religious practice, it is universally used even in completely secular contexts.
The numerical value of each letter is fixed and not determined by position, so reordering a number group will not change its value. This may be done when a number spells out a word with negative connotations. For instance, 298, רצח U+05E8 U+05E6 U+05D7 (200+90+8), is the Hebrew for "murder", so it is sometimes written as רחצ U+05E8 U+05D7 U+05E6 (200+8+90). Words are sometimes similarly rearranged when a reordered form has especially positive connotations, for example 18, יח U+05D9 U+05D7 (10+8) is often written as חי U+05D7 U+05D9 (8+10), the Hebrew for "alive". Unlike the exception for 15 and 16, using the regular form in these cases is not considered an error.
Some text about geresh/gershayim is commented out here.
The suffix for the hebrew numbering system is a dot (. U+002E FULL STOP).
Numbers outside the range of the Hebrew system are rendered using the decimal numbering style.
This table shows the decimal number in the first cell, and the equivalent hebrew number in the second.
| Decimal | Hebrew |
|---|---|
| -3 | -3 |
| -2 | -2 |
| -1 | -1 |
| 0 | 0 |
| 1 | א |
| 2 | ב |
| 3 | ג |
| 4 | ד |
| 5 | ה |
| 97 | צז |
| 98 | צח |
| 99 | צט |
| 100 | ק |
| 101 | קא |
| 944 | תתקמד |
| 945 | תתקמה |
| 946 | תתקמו |
| 999 | תתקצט |
| 1000 | א׳ |
| 1001 | א׳א |
| 1998 | א׳תתקצח |
| 1999 | א׳תתקצט |
| 2000 | ב׳ |
| 2001 | ב׳א |
| 2003 | ב׳ג |
| 2748 | ב׳תשמח |
| 2750 | ב׳תשנ |
This example (like all other examples) is non-normative. If one of the numbers above is inconsistent with the rules described above, then the example should be disregarded.
| Values | Codepoints | |
|---|---|---|
| Second Group Marker | 万 | U+4E07 |
| Third Group Marker | 億 | U+5104 |
| Fourth Group Marker | 兆 | U+5146 |
| Second Digit Marker | 拾 | U+62FE |
| Third Digit Marker | 佰 | U+4F70 |
| Fourth Digit Marker | 仟 | U+4EDF |
| Digit 0 | 零 | U+96F6 |
| Digit 1 | 壹 | U+58F9 |
| Digit 2 | 貳 | U+8CB3 |
| Digit 3 | 參 | U+53C3 |
| Digit 4 | 肆 | U+8086 |
| Digit 5 | 伍 | U+4F0D |
| Digit 6 | 陸 | U+9678 |
| Digit 7 | 柒 | U+67D2 |
| Digit 8 | 捌 | U+634C |
| Digit 9 | 玖 | U+7396 |
| Values | Codepoints | |
|---|---|---|
| Second Group Marker | 萬 | U+842C |
| Third Group Marker | 億 | U+5104 |
| Fourth Group Marker | 兆 | U+5146 |
| Second Digit Marker | 萬 | U+842C |
| Third Digit Marker | 億 | U+5104 |
| Fourth Digit Marker | 兆 | U+5146 |
| Digit 0 | 零 | U+96F6 |
| Digit 1 | 壹 | U+58F9 |
| Digit 2 | 贰 | U+8D30 |
| Digit 3 | 叁 | U+53C1 |
| Digit 4 | 肆 | U+8086 |
| Digit 5 | 伍 | U+4F0D |
| Digit 6 | 陆 | U+9646 |
| Digit 7 | 柒 | U+67D2 |
| Digit 8 | 捌 | U+634C |
| Digit 9 | 玖 | U+7396 |
| Values | Codepoints | |
|---|---|---|
| Second Group Marker | 万 | U+4E07 |
| Third Group Marker | 億 | U+5104 |
| Fourth Group Marker | 兆 | U+5146 |
| Second Digit Marker | 万 | U+4E07 |
| Third Digit Marker | 亿 | U+4EBF |
| Fourth Digit Marker | 兆 | U+5146 |
| Digit 0 | 零 | U+96F6 |
| Digit 1 | 壹 | U+58F9 |
| Digit 2 | 貳 | U+8CB3 |
| Digit 3 | 參 | U+53C3 |
| Digit 4 | 肆 | U+8086 |
| Digit 5 | 伍 | U+4F0D |
| Digit 6 | 陸 | U+9678 |
| Digit 7 | 柒 | U+67D2 |
| Digit 8 | 捌 | U+634C |
| Digit 9 | 玖 | U+7396 |
| Values | Codepoints | |
|---|---|---|
| Second Group Marker | 萬 | U+842C |
| Third Group Marker | 億 | U+5104 |
| Fourth Group Marker | 兆 | U+5146 |
| Second Digit Marker | 萬 | U+842C |
| Third Digit Marker | 億 | U+5104 |
| Fourth Digit Marker | 兆 | U+5146 |
| Digit 0 | 零 | U+96F6 |
| Digit 1 | 壹 | U+58F9 |
| Digit 2 | 貳 | U+8CB3 |
| Digit 3 | 參 | U+53C3 |
| Digit 4 | 肆 | U+8086 |
| Digit 5 | 伍 | U+4F0D |
| Digit 6 | 陸 | U+9678 |
| Digit 7 | 柒 | U+67D2 |
| Digit 8 | 捌 | U+634C |
| Digit 9 | 玖 | U+7396 |
| Value | Codepoints | |
|---|---|---|
| 1 | ܩ̭ | U+0729 U+032D |
| 2 | ܪ̭ | U+072A U+032D |
| 3 | ܫ̭ | U+072B U+032D |
| 4 | ܬ̭ | U+072C U+032D |
| 5 | ܬ̭ܪ̭ | U+072C U+032D U+072A U+032D |
| 6 | ܬ̭ܩ̭ | U+072C U+032D U+0729 U+032D |
| 7 | ܬ̭ܫ̭ | U+072C U+032D U+072B U+032D |
| 8 | ܬ̭ܬ̭ | U+072C U+032D U+072C U+032D |
| 9 | ܬ̭ܬ̭ܩ̭ | U+072C U+032D U+072C U+032D U+0729 U+032D |
| Value | Codepoints | |
|---|---|---|
| 1 | ܝ̭ | U+071D U+032D |
| 2 | ܟ̭ | U+071F U+032D |
| 3 | ܠ̭ | U+0720 U+032D |
| 4 | ܡ̭ | U+0721 U+032D |
| 5 | ܢ̭ | U+0722 U+032D |
| 6 | ܣ̭ | U+0723 U+032D |
| 7 | ܦ̭ | U+0726 U+032D |
| 8 | ܦ̭ | U+0726 U+032D |
| 9 | ܨ̭ | U+0728 U+032D |
| Value | Codepoints | |
|---|---|---|
| 1 | ܐ̭ | U+0710 U+032D |
| 2 | ܒ̭ | U+0712 U+032D |
| 3 | ܣ̭ | U+0723 U+032D |
| 4 | ܕ̭ | U+0715 U+032D |
| 5 | ܗ̭ | U+0717 U+032D |
| 6 | ܘ̭ | U+0718 U+032D |
| 7 | ܙ̭ | U+0719 U+032D |
| 8 | ܚ̭ | U+071A U+032D |
| 9 | ܛ̭ | U+071B U+032D |
This assumes that numbers 10000 to 999999 are represented using the combination of characters with the combining macron below. It is possible to represent them using the combination of characters with the combining acute accent, as well. Which form is preferred in practice?
The suffix for the syriac numbering system is a dot (. U+002E FULL STOP).
Numbers outside the range of the syriac system are rendered using the decimal numbering style.
| Values | Codepoints | |
|---|---|---|
| 1 | ௧ | U0BE79 |
| 2 | ௨ | U+0BE8 |
| 3 | ௩ | U+0BE9 |
| 4 | ௪ | U+0BEA |
| 5 | ௫ | U+0BEB |
| 6 | ௬ | U+0BEC |
| 7 | ௭ | U+0BED |
| 8 | ௮ | U+0BEE |
| 9 | ௯ | U+0BEF |
The suffix for the tamil numbering system is a dot (. U+002E FULL STOP).
Numbers outside the range of the tamil system are rendered using the decimal numbering style.
The number 420, in tamil, is written ௪௱௨௰ U+0BEA U+0BF1 U+0BE8 U+0BF0.
| Values | Codepoints | |
|---|---|---|
| Second Group Marker | 万 | U+4E07 |
| Third Group Marker | 亿 | U+4EBF |
| Fourth Group Marker | 兆 | U+5146 |
| Second Digit Marker | 万 | U+4E07 |
| Third Digit Marker | 亿 | U+4EBF |
| Fourth Digit Marker | 兆 | U+5146 |
| Digit 0 | 零 | U+96F6 |
| Digit 1 | 一 | U+4E00 |
| Digit 2 | 亼 | U+4EBC |
| Digit 3 | 三 | U+4E09 |
| Digit 4 | 四 | U+56DB |
| Digit 5 | 五 | U+4E94 |
| Digit 6 | 六 | U+516D |
| Digit 7 | 七 | U+4E03 |
| Digit 8 | 八 | U+516B |
| Digit 9 | 九 | U+4E5D |
| Values | Codepoints | |
|---|---|---|
| Second Group Marker | 萬 | U+842C |
| Third Group Marker | 億 | U+5104 |
| Fourth Group Marker | 兆 | U+5146 |
| Second Digit Marker | 萬 | U+842C |
| Third Digit Marker | 億 | U+5104 |
| Fourth Digit Marker | 兆 | U+5146 |
| Digit 0 | 零 | U+96F6 |
| Digit 1 | 一 | U+4E00 |
| Digit 2 | 亼 | U+4EBC |
| Digit 3 | 三 | U+4E09 |
| Digit 4 | 四 | U+56DB |
| Digit 5 | 五 | U+4E94 |
| Digit 6 | 六 | U+516D |
| Digit 7 | 七 | U+4E03 |
| Digit 8 | 八 | U+516B |
| Digit 9 | 九 | U+4E5D |
| Thousands | Hundreds | Tens | Units | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Values | Codepoints | Values | Codepoints | Values | Codepoints | Values | Codepoints | ||||
| 1000 | Ռ | U+054C | 100 | Ճ | U+0543 | 10 | Ժ | U+053A | 1 | Ա | U+0531 |
| 2000 | Ս | U+054D | 200 | Մ | U+0544 | 20 | Ի | U+053B | 2 | Բ | U+0532 |
| 3000 | Վ | U+054E | 300 | Յ | U+0545 | 30 | Լ | U+053C | 3 | Գ | U+0533 |
| 4000 | Տ | U+054F | 400 | Ն | U+0546 | 40 | Խ | U+053D | 4 | Դ | U+0534 |
| 5000 | Ր | U+0550 | 500 | Շ | U+0547 | 50 | Ծ | U+053E | 5 | Ե | U+0535 |
| 6000 | Ց | U+0551 | 600 | Ո | U+0548 | 60 | Կ | U+053F | 6 | Զ | U+0536 |
| 7000 | Ւ | U+0552 | 700 | Չ | U+0549 | 70 | Հ | U+0540 | 7 | Է | U+0537 |
| 8000 | Փ | U+0553 | 800 | Պ | U+054A | 80 | Ձ | U+0541 | 8 | Ը | U+0538 |
| 9000 | Ք | U+0554 | 900 | Ջ | U+054B | 90 | Ղ | U+0542 | 9 | Թ | U+0539 |
Decimal 2951 in upper-armenian is ՍՋԾԱ U+054D U+054B U+053E U+0531.
The suffix for roman numerals is a dot (. U+002E FULL STOP).
Zero and negative numbers are rendered using the decimal numbering style.
For example, decimal 4294967296 is, in the upper-roman numbering style:

Similarly, decimal 15000 is ↂↁ (U+2182 U+2181) and decimal -47 would be rendered as -47 (negative numbers do not have roman numeral equivalents).
Numeric and alphabetic systems use a simple repeating scheme. Each digit is used in turn, and when the digits are exhausted, an extra column of digits is added in front and all the combinations used up to that point are reused for each of the digits. For example, if the digits are A, B and C, then the sequence would be A, B, C, AA, AB, AC, BA, BB, BC, CA, CB, CC, AAA, AAB, AAC, ABA, ABB, etc.
The difference between numeric and alphabetic systems is that numeric systems have a zero value which is not a significant digit (1, 2, ... 9, 10, 11 ...), while alphabetic systems have no zero value and their first digit is significant (A, B, ... Z, AA, AB ...). (An insignificant digit is one which could be prefixed without changing the meaning of the number. For example, 1 and 0001 are both representations of the number one, while A and AAAA represent values 18278 positions apart.) Consequently, numeric systems may go zero or negative, while alphabetic systems are only defined for positive values. If an alphabetic system is selected to render zero or a negative number then the decimal numbering style must be used instead.
Numeric systems are detailed in the table below. The value for "one" is always the second character listed, the first character being the "zero" value.
For all these systems, negative numbers are first converted as if they were positive numbers, then have - U+002D prefixed.
| System | Characters | Codepoints | Base | Suffix | Notes |
|---|---|---|---|---|---|
| arabic-indic | ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ | U+0660, U+0661, U+0662, U+0663, U+0664, U+0665, U+0666, U+0667, U+0668, U+0669 | 10 | . U+002E | |
| binary | 0 1 | U+0030, U+0031 | 2 | . U+002E | |
| bengali | ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ | U+09E6, U+09E7, U+09E8, U+09E9, U+09EA, U+09EB, U+09EC, U+09ED, U+09EE, U+09EF | 10 | . U+002E | |
| cambodian, khmer | ០ ១ ២ ៣ ៤ ៥ ៦ ៧ ៨ ៩ | U+17E0, U+17E1, U+17E2, U+17E3, U+17E4, U+17E5, U+17E6, U+17E7, U+17E8, U+17E9 | 10 | . U+002E | |
| decimal | 0 1 2 3 4 5 6 7 8 9 | U+0030, U+0031, U+0032, U+0033, U+0034, U+0035, U+0036, U+0037, U+0038, U+0039 | 10 | . U+002E | |
| decimal-leading-zero | 0 1 2 3 4 5 6 7 8 9 | U+0030, U+0031, U+0032, U+0033, U+0034, U+0035, U+0036, U+0037, U+0038, U+0039 | 10 | . U+002E | Note 1 |
| devanagari | ० १ २ ३ ४ ५ ६ ७ ८ ९ | U+0966, U+0967, U+0968, U+0969, U+096A, U+096B, U+096C, U+096D, U+096E, U+096F | 10 | . U+002E | |
| gujarati | ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯ | U+0AE6, U+0AE7, U+0AE8, U+0AE9, U+0AEA, U+0AEB, U+0AEC, U+0AED, U+0AEE, U+0AEF | 10 | . U+002E | |
| gurmukhi | ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ | U+0A66, U+0A67, U+0A68, U+0A69, U+0A6A, U+0A6B, U+0A6C, U+0A6D, U+0A6E, U+0A6F | 10 | . U+002E | |
| kannada | ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯ | U+0CE6, U+0CE7, U+0CE8, U+0CE9, U+0CEA, U+0CEB, U+0CEC, U+0CED, U+0CEE, U+0CEF | 10 | . U+002E | |
| lower-hexadecimal | 0 1 2 3 4 5 6 7 8 9 a b c d e f | U+0030, U+0031, U+0032, U+0033, U+0034, U+0035, U+0036, U+0037, U+0038, U+0039, U+0061, U+0062, U+0063, U+0064, U+0065, U+0066 | 16 | . U+002E | |
| lao | ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ | U+0ED0, U+0ED1, U+0ED2, U+0ED3, U+0ED4, U+0ED5, U+0ED6, U+0ED7, U+0ED8, U+0ED9 | 10 | . U+002E | |
| malayalam | ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯ | U+0D66, U+0D67, U+0D68, U+0D69, U+0D6A, U+0D6B, U+0D6C, U+0D6D, U+0D6E, U+0D6F | 10 | . U+002E | |
| mongolian | ᠐ ᠑ ᠒ ᠓ ᠔ ᠕ ᠖ ᠗ ᠘ ᠙ | U+1810, U+1811, U+1812, U+1813, U+1814, U+1815, U+1816, U+1817, U+1818, U+1819 | 10 | . U+002E | |
| myanmar | ၀ ၁ ၂ ၃ ၄ ၅ ၆ ၇ ၈ ၉ | U+1040, U+1041, U+1042, U+1043, U+1044, U+1045, U+1046, U+1047, U+1048, U+1049 | 10 | . U+002E | |
| octal | 0 1 2 3 4 5 6 7 | U+0030, U+0031, U+0032, U+0033, U+0034, U+0035, U+0036, U+0037 | 8 | . U+002E | |
| oriya | ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ | U+0B66, U+0B67, U+0B68, U+0B69, U+0B6A, U+0B6B, U+0B6C, U+0B6D, U+0B6E, U+0B6F | 10 | . U+002E | |
| persian, urdu | ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ | U+06F0, U+06F1, U+06F2, U+06F3, U+06F4, U+06F5, U+06F6, U+06F7, U+06F8, U+06F9 | 10 | . U+002E | |
| super-decimal | ⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ | U+2070, U+00B9, U+00B2, U+00B3, U+2074, U+2075, U+2076, U+2077, U+2078, U+2079 | 10 | (none) | The UA may use 0-9 in combination with font features, or synthesize superscript glyphs, instead of using the Unicode superscript characters. |
| telugu | ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯ | U+0C66, U+0C67, U+0C68, U+0C69, U+0C6A, U+0C6B, U+0C6C, U+0C6D, U+0C6E, U+0C6F | 10 | . U+002E | |
| tibetan | ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ | U+0F20, U+0F21, U+0F22, U+0F23, U+0F24, U+0F25, U+0F26, U+0F27, U+0F28, U+0F29 | 10 | . U+002E | |
| thai | ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ | U+0E50, U+0E51, U+0E52, U+0E53, U+0E54, U+0E55, U+0E56, U+0E57, U+0E58, U+0E59 | 10 | . U+002E | |
| upper-hexadecimal | 0 1 2 3 4 5 6 7 8 9 A B C D E F | U+0030, U+0031, U+0032, U+0033, U+0034, U+0035, U+0036, U+0037, U+0038, U+0039, U+0041, U+0042, U+0043, U+0044, U+0045, U+0046 | 16 | . U+002E |
Note 1: Numbers -9 to 9 in the decimal-leading-zero system should be prefixed by an extra single 0 U+0030.
The decimal number -7645, in the thai numbering system, is -๗๖๔๕ U+002D U+0E57 U+0E56 U+0E54 U+0E55.
Alphabetic systems are detailed in the next table. They are similar to numeric systems, see the previous section for more details. The value for "one" is always the first character listed, there being no "zero" value for these systems. Note: Many of the codepoints in the following table are not contiguous, and several systems in this table use a suffix other than a dot.
| System | Characters | Codepoints | Base | Suffix | Notes |
|---|---|---|---|---|---|
| afar, ethiopic-halehame-aa-et, ethiopic-halehame-aa-er | ሀ ለ ሐ መ ረ ሰ በ ተ ነ አ ከ ወ ዐ የ ደ ገ ጸ ፈ | U+1200, U+1208, U+1210, U+1218, U+1228, U+1230, U+1260, U+1270, U+1290, U+12A0, U+12A8, U+12C8, U+12D0, U+12E8, U+12F0, U+1308, U+1338, U+1348 | 18 | ፦ U+1366 | |
| amharic, ethiopic-halehame-am-et | ሀ ለ ሐ መ ሠ ረ ሰ ሸ ቀ በ ተ ቸ ኀ ነ ኘ አ ከ ኸ ወ ዐ ዘ ዠ የ ደ ጀ ገ ጠ ጨ ጰ ጸ ፀ ፈ ፐ | U+1200, U+1208, U+1210, U+1218, U+1220, U+1228, U+1230, U+1238, U+1240, U+1260, U+1270, U+1278, U+1280, U+1290, U+1298, U+12A0, U+12A8, U+12B8, U+12C8, U+12D0, U+12D8, U+12E0, U+12E8, U+12F0, U+1300, U+1308, U+1320, U+1328, U+1330, U+1338, U+1340, U+1348, U+1350 | 33 | ፦ U+1366 | |
| amharic-abegede, ethiopic-abegede-am-et | አ በ ገ ደ ጀ ሀ ወ ዘ ዠ ሐ ጠ ጨ የ ከ ኸ ለ መ ነ ኘ ሠ ዐ ፈ ጸ ቀ ረ ሰ ሸ ተ ቸ ኀ ፀ ጰ ፐ | U+12A0, U+1260, U+1308, U+12F0, U+1300, U+1200, U+12C8, U+12D8, U+12E0, U+1210, U+1320, U+1328, U+12E8, U+12A8, U+12B8, U+1208, U+1218, U+1290, U+1298, U+1220, U+12D0, U+1348, U+1338, U+1240, U+1228, U+1230, U+1238, U+1270, U+1278, U+1280, U+1340, U+1330, U+1350 | 33 | ፦ U+1366 | |
| cjk-earthly-branch | 子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥 | U+5B50, U+4E11, U+5BC5, U+536F, U+8FB0, U+5DF3, U+5348, U+672A, U+7533, U+9149, U+620C, U+4EA5 | 12 | . U+002E | |
| cjk-heavenly-stem | 甲 乙 丙 丁 戊 己 庚 辛 壬 癸 | U+7532, U+4E59, U+4E19, U+4E01, U+620A, U+5DF1, U+5E9A, U+8F9B, U+58EC, U+7678 | 10 | . U+002E | |
| ethiopic, ethiopic-halehame-gez | ሀ ለ ሐ መ ሠ ረ ሰ ቀ በ ተ ኀ ነ አ ከ ወ ዐ ዘ የ ደ ገ ጠ ጰ ጸ ፀ ፈ ፐ | U+1200, U+1208, U+1210, U+1218, U+1220, U+1228, U+1230, U+1240, U+1260, U+1270, U+1280, U+1290, U+12A0, U+12A8, U+12C8, U+12D0, U+12D8, U+12E8, U+12F0, U+1308, U+1320, U+1330, U+1338, U+1340, U+1348, U+1350 | 26 | ፦ U+1366 | |
| ethiopic-abegede, ethiopic-abegede-gez | አ በ ገ ደ ሀ ወ ዘ ሐ ጠ የ ከ ለ መ ነ ሠ ዐ ፈ ጸ ቀ ረ ሰ ተ ኀ ፀ ጰ ፐ | U+12A0, U+1260, U+1308, U+12F0, U+1200, U+12C8, U+12D8, U+1210, U+1320, U+12E8, U+12A8, U+1208, U+1218, U+1290, U+1220, U+12D0, U+1348, U+1338, U+1240, U+1228, U+1230, U+1270, U+1280, U+1340, U+1330, U+1350 | 26 | ፦ U+1366 | |
| hangul-consonant | ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ | U+3131, U+3134, U+3137, U+3139, U+3141, U+3142, U+3145, U+3147, U+3148, U+314A, U+314B, U+314C, U+314D, U+314E | 14 | . U+002E | |
| hangul | 가 나 다 라 마 바 사 아 자 차 카 타 파 하 | U+AC00, U+B098, U+B2E4, U+B77C, U+B9C8, U+BC14, U+C0AC, U+C544, U+C790, U+CC28, U+CE74, U+D0C0, U+D30C, U+D558 | 14 | . U+002E | |
| hiragana-iroha | い ろ は に ほ へ と ち り ぬ る を わ か よ た れ そ つ ね な ら む う ゐ の お く や ま け ふ こ え て あ さ き ゆ め み し ゑ ひ も せ す | U+3044, U+308D, U+306F, U+306B, U+307B, U+3078, U+3068, U+3061, U+308A, U+306C, U+308B, U+3092, U+308F, U+304B, U+3088, U+305F, U+308C, U+305D, U+3064, U+306D, U+306A, U+3089, U+3080, U+3046, U+3090, U+306E, U+304A, U+304F, U+3084, U+307E, U+3051, U+3075, U+3053, U+3048, U+3066, U+3042, U+3055, U+304D, U+3086, U+3081, U+307F, U+3057, U+3091, U+3072, U+3082, U+305B, U+3059 | 47 | . U+002E | One character is not in this list. |
| hiragana | あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん | U+3042, U+3044, U+3046, U+3048, U+304A, U+304B, U+304D, U+304F, U+3051, U+3053, U+3055, U+3057, U+3059, U+305B, U+305D, U+305F, U+3061, U+3064, U+3066, U+3068, U+306A, U+306B, U+306C, U+306D, U+306E, U+306F, U+3072, U+3075, U+3078, U+307B, U+307E, U+307F, U+3080, U+3081, U+3082, U+3084, U+3086, U+3088, U+3089, U+308A, U+308B, U+308C, U+308D, U+308F, U+3090, U+3091, U+3092, U+3093 | 48 | . U+002E | One character is not in this list. |
| katakana-iroha | イ ロ ハ ニ ホ ヘ ト チ リ ヌ ル ヲ ワ カ ヨ タ レ ソ ツ ネ ナ ラ ム ウ ヰ ノ オ ク ヤ マ ケ フ コ エ テ ア サ キ ユ メ ミ シ ヱ ヒ モ セ ス | U+30A4, U+30ED, U+30CF, U+30CB, U+30DB, U+30D8, U+30C8, U+30C1, U+30EA, U+30CC, U+30EB, U+30F2, U+30EF, U+30AB, U+30E8, U+30BF, U+30EC, U+30BD, U+30C4, U+30CD, U+30CA, U+30E9, U+30E0, U+30A6, U+30F0, U+30CE, U+30AA, U+30AF, U+30E4, U+30DE, U+30B1, U+30D5, U+30B3, U+30A8, U+30C6, U+30A2, U+30B5, U+30AD, U+30E6, U+30E1, U+30DF, U+30B7, U+30F1, U+30D2, U+30E2, U+30BB, U+30B9 | 47 | . U+002E | One character is not in this list. |
| katakana | ア イ ウ エ オ カ キ ク ケ, コ サ シ ス セ ソ タ チ ツ, テ ト ナ ニ ヌ ネ ノ ハ ヒ, フ ヘ ホ マ ミ ム メ モ ヤ, ユ ヨ ラ リ ル レ ロ ワ ヰ, ヱ ヲ ン | U+30A2, U+30A4, U+30A6, U+30A8, U+30AA, U+30AB, U+30AD, U+30AF, U+30B1, U+30B3, U+30B5, U+30B7, U+30B9, U+30BB, U+30BD, U+30BF, U+30C1, U+30C4, U+30C6, U+30C8, U+30CA, U+30CB, U+30CC, U+30CD, U+30CE, U+30CF, U+30D2, U+30D5, U+30D8, U+30DB, U+30DE, U+30DF, U+30E0, U+30E1, U+30E2, U+30E4, U+30E6, U+30E8, U+30E9, U+30EA, U+30EB, U+30EC, U+30ED, U+30EF, U+30F0, U+30F1, U+30F2, U+30F3 | 48 | . U+002E | Four characters are not in this list. |
| lower-alpha, lower-latin | a b c d e f g h i j k l m n o p q r s t u v w x y z | U+0061, U+0062, U+0063, U+0064, U+0065, U+0066, U+0067, U+0068, U+0069, U+006A, U+006B, U+006C, U+006D, U+006E, U+006F, U+0070, U+0071, U+0072, U+0073, U+0074, U+0075, U+0076, U+0077, U+0078, U+0079, U+007A | 26 | . U+002E | |
| lower-greek | α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω | U+03B1, U+03B2, U+03B3, U+03B4, U+03B5, U+03B6, U+03B7, U+03B8, U+03B9, U+03BA, U+03BB, U+03BC, U+03BD, U+03BE, U+03BF, U+03C0, U+03C1, U+03C3, U+03C4, U+03C5, U+03C6, U+03C7, U+03C8, U+03C9 | 24 | . U+002E | How should U+03C2 (final sigma) be treated? |
| lower-norwegian | a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å | U+0061, U+0062, U+0063, U+0064, U+0065, U+0066, U+0067, U+0068, U+0069, U+006A, U+006B, U+006C, U+006D, U+006E, U+006F, U+0070, U+0071, U+0072, U+0073, U+0074, U+0075, U+0076, U+0077, U+0078, U+0079, U+007A, U+00E6, U+00F8, U+00E5 | 29 | none | |
| oromo, ethiopic-halehame-om-et | ሀ ለ መ ረ ሰ ሸ ቀ በ ተ ቸ ነ ኘ አ ከ ወ የ ደ ዸ ጀ ገ ጠ ጨ ጸ ጰ ፈ | U+1200, U+1208, U+1218, U+1228, U+1230, U+1238, U+1240, U+1260, U+1270, U+1278, U+1290, U+1298, U+12A0, U+12A8, U+12C8, U+12E8, U+12F0, U+12F8, U+1300, U+1308, U+1320, U+1328, U+1338, U+1330, U+1348 | 25 | ፦ U+1366 | |
| sidama, ethiopic-halehame-sid-et | ሀ ለ ሐ መ ረ ሰ ሸ ቀ በ ተ ቸ ነ ኘ አ ከ ወ የ ደ ዸ ጀ ገ ጠ ጨ ጸ ጰ ፈ | U+1200, U+1208, U+1210, U+1218, U+1228, U+1230, U+1238, U+1240, U+1260, U+1270, U+1278, U+1290, U+1298, U+12A0, U+12A8, U+12C8, U+12E8, U+12F0, U+12F8, U+1300, U+1308, U+1320, U+1328, U+1338, U+1330, U+1348 | 26 | ፦ U+1366 | |
| somali, ethiopic-halehame-so-et | ሀ ለ ሐ መ ረ ሰ ሸ ቀ በ ተ ነ አ ከ ኸ ወ ዐ የ ደ ጀ ገ ጸ ፈ | U+1200, U+1208, U+1210, U+1218, U+1228, U+1230, U+1238, U+1240, U+1260, U+1270, U+1290, U+12A0, U+12A8, U+12B8, U+12C8, U+12D0, U+12E8, U+12F0, U+1300, U+1308, U+1338, U+1348 | 22 | ፦ U+1366 | |
| tigre, ethiopic-halehame-tig | ሀ ለ ሐ መ ረ ሰ ሸ ቀ በ ተ ቸ ነ አ ከ ወ ዐ ዘ የ ደ ጀ ገ ጠ ጨ ጸ ጰ ፈ ፐ | U+1200, U+1208, U+1210, U+1218, U+1228, U+1230, U+1238, U+1240, U+1260, U+1270, U+1278, U+1290, U+12A0, U+12A8, U+12C8, U+12D0, U+12D8, U+12E8, U+12F0, U+1300, U+1308, U+1320, U+1328, U+1338, U+1330, U+1348, U+1350 | 27 | ፦ U+1366 | |
| tigrinya-er, ethiopic-halehame-ti-er | ሀ ለ ሐ መ ረ ሰ ሸ ቀ ቐ በ ተ ቸ ነ ኘ አ ከ ኸ ወ ዐ ዘ ዠ የ ደ ጀ ገ ጠ ጨ ጰ ጸ ፈ ፐ | U+1200, U+1208, U+1210, U+1218, U+1228, U+1230, U+1238, U+1240, U+1250, U+1260, U+1270, U+1278, U+1290, U+1298, U+12A0, U+12A8, U+12B8, U+12C8, U+12D0, U+12D8, U+12E0, U+12E8, U+12F0, U+1300, U+1308, U+1320, U+1328, U+1330, U+1338, U+1348, U+1350 | 31 | ፦ U+1366 | |
| tigrinya-er-abegede, ethiopic-abegede-ti-er | አ በ ገ ደ ጀ ሀ ወ ዘ ዠ ሐ ጠ ጨ የ ከ ኸ ለ መ ነ ኘ ዐ ፈ ጸ ቀ ቐ ረ ሰ ሸ ተ ቸ ጰ ፐ | U+12A0, U+1260, U+1308, U+12F0, U+1300, U+1200, U+12C8, U+12D8, U+12E0, U+1210, U+1320, U+1328, U+12E8, U+12A8, U+12B8, U+1208, U+1218, U+1290, U+1298, U+12D0, U+1348, U+1338, U+1240, U+1250, U+1228, U+1230, U+1238, U+1270, U+1278, U+1330, U+1350 | 31 | ፦ U+1366 | |
| tigrinya-et, ethiopic-halehame-ti-et | ሀ ለ ሐ መ ሠ ረ ሰ ሸ ቀ ቐ በ ተ ቸ ኀ ነ ኘ አ ከ ኸ ወ ዐ ዘ ዠ የ ደ ጀ ገ ጠ ጨ ጰ ጸ ፀ ፈ ፐ | U+1200, U+1208, U+1210, U+1218, U+1220, U+1228, U+1230, U+1238, U+1240, U+1250, U+1260, U+1270, U+1278, U+1280, U+1290, U+1298, U+12A0, U+12A8, U+12B8, U+12C8, U+12D0, U+12D8, U+12E0, U+12E8, U+12F0, U+1300, U+1308, U+1320, U+1328, U+1330, U+1338, U+1340, U+1348, U+1350 | 34 | ፦ U+1366 | |
| tigrinya-et-abegede, ethiopic-abegede-ti-et | አ በ ገ ደ ጀ ሀ ወ ዘ ዠ ሐ ጠ ጨ የ ከ ኸ ለ መ ነ ኘ ሠ ዐ ፈ ጸ ቀ ቐ ረ ሰ ሸ ተ ቸ ኀ ፀ ጰ ፐ | U+12A0, U+1260, U+1308, U+12F0, U+1300, U+1200, U+12C8, U+12D8, U+12E0, U+1210, U+1320, U+1328, U+12E8, U+12A8, U+12B8, U+1208, U+1218, U+1290, U+1298, U+1220, U+12D0, U+1348, U+1338, U+1240, U+1250, U+1228, U+1230, U+1238, U+1270, U+1278, U+1280, U+1340, U+1330, U+1350 | 34 | ፦ U+1366 | |
| upper-alpha, upper-latin | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z | U+0041, U+0042, U+0043, U+0044, U+0045, U+0046, U+0047, U+0048, U+0049, U+004A, U+004B, U+004C, U+004D, U+004E, U+004F, U+0050, U+0051, U+0052, U+0053, U+0054, U+0055, U+0056, U+0057, U+0058, U+0059, U+005A | 26 | . U+002E | |
| upper-greek | Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω | U+0391, U+0392, U+0393, U+0394, U+0395, U+0396, U+0397, U+0398, U+0399, U+039A, U+039B, U+039C, U+039D, U+039E, U+039F, U+03A0, U+03A1, U+03A3, U+03A9 | 24 | . U+002E | |
| upper-norwegian | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å | U+0041, U+0042, U+0043, U+0044, U+0045, U+0046, U+0047, U+0048, U+0049, U+004A, U+004B, U+004C, U+004D, U+004E, U+004F, U+0050, U+0051, U+0052, U+0053, U+0054, U+0055, U+0056, U+0057, U+0058, U+0059, U+005A, U+00C6, U+00D8, U+00C5 | 29 | none |
Symbolic systems use a very simple repeating scheme. Each symbol is used in turn, and once the last symbol has been used, the same symbols are used again but in pairs, and then in threes, and then fours, and so on.
Symbolic systems are detailed in the next table. Like glyphs, they have no suffix.
| System | Characters | Codepoints | Notes |
|---|---|---|---|
| asterisks | * | U+002A | |
| footnotes | * ⁑ † ‡ | U+002A, U+2051, U+2020, U+2021 | What about U+2042 ASTERISM? |
For example, the first 14 digits of the footnotes system are *, ⁑, †, ‡, **, ⁑⁑, ††, ‡‡, ***, ⁑⁑⁑, †††, ‡‡‡, ****, ⁑⁑⁑⁑.
The last kind of numbering system is non-repeating. These specify a one to one mapping of numbers to UNICODE glyphs. These are only useful for limited ranges of numbers, beyond which user agents must either synthesize the missing glyphs or fall back on the decimal numbering style.
Should we explicitly define the rules for synthesis? Should we forbid synthesis?
The mappings for each non-repeating system is described below. These numbering systems do not have suffixes, as they typically contain their own punctuation.
| System | Range | Codepoint Mapping | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| circled-decimal | 0-20 |
| |||||||||||||||||||||
| circled-lower-latin | 1-26 |
| |||||||||||||||||||||
| circled-upper-latin | 1-26 |
| |||||||||||||||||||||
| dotted-decimal | 1-20 |
| |||||||||||||||||||||
| double-circled-decimal | 1-10 |
| |||||||||||||||||||||
| filled-circled-decimal | 11-20 |
| |||||||||||||||||||||
| parenthesised-decimal | 1-20 |
| |||||||||||||||||||||
| parenthesised-lower-latin | 1-26 |
|
Note: The following systems and UNICODE characters have not been given keywords: The superscript and subscript digits (starting at U+2070), the tag characters (starting at U+E0001), the variation forms of latin and greek characters (starting at U+1D400), the halfwidth and fullwidth forms (starting at U+FF01), most of the dingbats (starting at U+2701, including about 64 different star-like bullets, a dozen square bullets, three different kinds of circled decimal digits, as well as a sleuth of arrows and icons like pens and pencils), any of the miscellaneous symbols (starting at U+2600, including numbered recycled symbols, die faces, and many other icons), some of the General Punctuation bullets (e.g. hyphens and dashes at U+2010 to U+2015, triangular bullets starting at U+2023), most of the geometric shapes (starting at U+25A0, including U+25C9), all the enclosed cjk letters and months (starting at U+3200), hangzhou-style numerals (U+3021 to U+3029), the traditional greek numbering systems, the new ethiopic romanised Oromo system Qubee, korean, korean-hangul, korean-check, coptic, and probably many others.
A user agent that does not recognize a numbering system should ignore the declaration in which the numbering system is used.
For example, the following HTML document:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Lowercase latin numbering</TITLE>
<STYLE type="text/css">
OL { list-style-type: lower-roman; list-style-type: ethiopic-halehame-om-et; }
</STYLE>
</HEAD>
<BODY>
<OL>
<LI> This is the first item.
<LI> This is the second item.
<LI> This is the third item.
</OL>
</BODY>
</HTML>
might produce something like this in a user agent that does not support the ethiopic-halehame-om-et list style type:
i. This is the first item. ii. This is the second item. iii. This is the third item.
Note that the list marker alignment (here, right justified) depends on the user agent style sheet's rules for the ::marker pseudo-element.
list-style-image’
property| Name: | list-style-image |
| Value: | <uri> | none |
| Initial: | none |
| Applies�to: | all elements with ‘display:
list-item’
|
| Inherited: | yes |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | specified value |
| Depends on: | none |
This property sets the image that will be used as the list item marker.
When the image is available, it will replace the marker set with the ‘list-style-type’ marker.
The following example sets the marker at the beginning of each list item to be the image "ellipse.png".
LI { list-style-image: url("http://www.example.com/ellipse.png") }
content’
propertyIf a ::marker pseudo-element has its ‘content’
property set to normal, the following algorithm should be used to generate
the computed value of the property. Note that there being a computed value
of the ‘content’ property is not enough for the
::marker pseudo-element to be rendered. See the
section on the ‘list-style-position’
property below.
list-style-image’ is not
‘none’, and if the image is
valid, then the content is the value of the ‘list-style-image’
property.
none’, then the computed value of the ‘content’
property is counter(list-item,
<list-style-type>) followed by a string, where
<list-style-type> is the computed value of the ‘list-style-type’
property, or the default style type for the list-item counter if the
‘list-style-type’ has the
value ‘normal’, and the string is the suffix for
the list style type in question (which may be empty).
Ths algorithm may be superseded by a more detailed algorithm given in the Generated and Replaced Content module, when it is released.
Given the following style sheet:
li { display: list-item; list-style-type: decimal /* initial value */; }
li::marker { content: normal /* initial value */; }
And the following document fragment:
<li> List Item </li>
The computed value of the ‘content’ property on the ::marker pseudo-element of the list item element is:
counter(list-item, decimal) '\002E'
list-style-position’
property| Name: | list-style-position |
| Value: | inside | outside |
| Initial: | outside |
| Applies�to: | all elements with ‘display:
list-item’
|
| Inherited: | yes |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | specified value |
| Depends on: | none |
This property specifies the position of the marker box in the principal block box. Values have the following meanings:
Note that a marker is only generated if the computed value of the ‘content’
property for the element's ::marker pseudo-element
is not inhibit.
For example:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Comparison of inside/outside position</TITLE>
<STYLE type="text/css">
UL { list-style: outside }
UL.compact { list-style: inside }
</STYLE>
</HEAD>
<BODY>
<UL>
<LI>first list item comes first</LI>
<LI>second list item comes second</LI>
</UL>
<HT>
<UL class="compact">
<LI>first list item comes first</LI>
<LI>second list item comes second</LI>
</UL>
</BODY>
</HTML>
The above example may be formatted as:

In right-to-left text, the markers would have been on the right side of the box.
list-style’ shorthand property| Name: | list-style |
| Value: | [ <‘list-style-type’> ||
<‘list-style-position’>
|| <‘list-style-image’>
]
|
| Initial: | not defined for shorthand properties |
| Applies�to: | all elements with ‘display:
list-item’
|
| Inherited: | not defined for shorthand properties |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | not defined for shorthand properties |
| Depends on: | none |
The ‘list-style’ property is a
shorthand notation for setting the three properties ‘list-style-type’, ‘list-style-image’, and
‘list-style-position’
at the same place in the style sheet.
For example:
UL { list-style: upper-roman inside } /* Any UL */
UL > UL { list-style: circle outside } /* Any UL child of a UL */
Although authors may specify ‘list-style’
information directly on list item elements (e.g., LI in HTML), they should
do so with care. The following rules look similar, but the first declares
a descendant selector and the second a (more specific) child selector.
OL.alpha LI { list-style: lower-alpha } /* Any LI descendant of an OL */
OL.alpha > LI { list-style: lower-alpha } /* Any LI child of an OL */
Authors who use only the descendant selector may not achieve the results they expect. Consider the following rules:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>WARNING: Unexpected results due to cascade</TITLE>
<STYLE type="text/css">
OL.alpha LI { list-style: lower-alpha }
UL LI { list-style: disc }
</STYLE>
</HEAD>
<BODY>
<OL class="alpha">
<LI>level 1
<UL>
<LI>level 2</LI>
</UL>
</LI>
</OL>
</BODY>
</HTML>
The desired rendering would have level 1 list items with ‘lower-alpha’ labels
and level 2 items with ‘disc’ labels. However, the cascading order
will cause the first style rule (which includes specific class
information) to mask the second. The following rules solve the problem by
employing a child selector instead:
OL.alpha > LI { list-style: lower-alpha }
UL LI { list-style: disc }
Another solution would be to specify ‘list-style’
information only on the list type elements:
OL.alpha { list-style: lower-alpha }
UL { list-style: disc }
Inheritance will transfer the ‘list-style’
values from OL and UL elements to LI elements. This is the recommended way
to specify list style information.
A URI value may be combined with any other value, as in:
UL { list-style: url("http://png.com/ellipse.png") disc }
In the example above, the ‘disc’ will be used when the image is
unavailable.
A value of ‘none’ for the ‘list-style’ property sets both
‘list-style-type’ and ‘list-style-image’ to
‘none’, because it sets the ‘list-style-type’ to none
(that is the first value in the list), and the initial value of the ‘list-style-image’
property, which isn't listed in that declaration, is none. For this
reason,
LI { list-style: none; }
will ensure that no list-item marker is displayed on LI elements, except
if a value is explicitly given to the ‘content’ property of the ::marker pseudo-element. In general, the best way to
ensure that no marker is rendered is to not set the ‘display’
property to list-item.
Markers are created by setting an element's ‘display’
property to list-item. The list-item display type is, in every other respect,
identical to the block display type.
The marker box is only created if the computed value of the ‘content’
property for the pseudo-element is not inhibit. The
rest of this section discusses the details of the positioning of the
marker box if it is positioned outside. For details on positioning the
marker box when it is an inside list marker, see the section on ‘list-style-position’.
If the elements' ‘list-style-position’
property has the value outside, then the
value of the element's ::marker pseudo-element's
‘content’ property is formatted in an
independent marker box, outside the principal box. Marker boxes are
formatted as an inline-block (i.e., they fit in one line box), so they are
not as flexible as floats or absolutely positioned boxes.
Marker boxes have padding, borders and margins, just like inline-block
elements. The marker box will be vertically aligned with the first line of
content in the principal box, as specified by the pseudo-element's ‘vertical-align’ property. The marker
box participates in the height calculation of the principal box's first
line box. Thus, markers are aligned with the first line of an element's
content. If no first line box exists in a principal box, the marker box
establishes its line box alone. (The first line of a principle box is the
one matched by the box's ‘::first-line’
pseudo-element.)
The marker box is horizontally aligned with the start of the line box.
Thus if a float intersects the element, moving the line box start, the
marker box is moved as well. It is the responsibility of the author to
ensure that sufficient margins are provided to prevent marker boxes
overlapping with the floats. If the marker box is generating the line box,
then it is aligned with the content area's start edge. The box model
defines the properties ‘float-displace’ and ‘indent-edge-reset’ to control how far
line boxes are moved in the presence of floats.
If the value of the ‘width’ property is auto, the marker box content width is that of the
content, otherwise it is the value of ‘width’. For values of ‘width’ less
than the content width, the overflow is visible. The ‘overflow’
property does not apply. The ‘text-align’ property determines the
horizontal alignment of the content in the marker box.
Marker boxes may overlap principal boxes and other marker boxes. Overlap could happen for several reasons. If several nested elements without inline content all have marker boxes, for instance, or if a marker box has negative margins. Marker boxes are rendered at the same stack level as inline content of the principle box, as if it was the first box of the first line box.
The CSS2 ‘marker-offset’ property is obsoleted in
this model and has no effect. (It is replaced by the ‘margin-right’ property in left-to-right
text, and the ‘margin-left’ property in right-to-left
text.)
In the following example, the content is centered within a marker box of a fixed width. This document:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Content alignment in the marker box</TITLE>
<STYLE type="text/css">
LI::marker {
content: "(" counter(counter) ")";
width: 6em;
text-align: center;
}
LI {
display: list-item;
counter-increment: counter;
}
</STYLE>
</HEAD>
<BODY>
<OL>
<LI> This is the first item. </LI>
<LI> This is the second item. </LI>
<LI> This is the third item. </LI>
</OL>
</BODY>
</HTML>
should produce something like this:
(1) This is the
first item.
(2) This is the
second item.
(3) This is the
third item.
The next example uses markers to number notes (paragraphs).
The following document:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Markers to create numbered notes4>/TITLE>
<STYLE type="text/css">
P { margin-left: 12 em; }
P.Note::marker {
content: url("note.gif") "Note " counter(note-counter) ":";
text-align: left;
width: 10em;
}
P.Note {
display: list-item;
counter-increment: note-counter;
}
</STYLE>
</HEAD>
<BODY>
<P>This is the first paragraph in this document.</P>
<P CLASS="Note">This is a very short document.</P>
<P>This is the end.</P>
</BODY>
</HTML>
should produce something like:
This is the first paragraph
in this document.
Note 1: This is a very short
document.
This is the end.
The following example illustrates how markers may be offset from their element. This HTML application and style sheet:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Marker example 5</TITLE>
<STYLE type="text/css">
P { margin-left: 8em } /* Make space for counters */
LI::marker { margin: 0 3em 0 0; content: counter(list-item, lower-roman) "."; }
LI { display: list-item }
</STYLE>
</HEAD>
<BODY>
<P> This is a long preceding paragraph ...</P>
<OL>
<LI> This is the first item.
<LI> This is the second item.
<LI> This is the third item.
</OL>
<P> This is a long following paragraph ...</P>
</BODY>
</HTML>
should produce something like this:
This is a long preceding
paragraph ...
i. This is the first item.
ii. This is the second item.
iii. This is the third item.
This is a long following
paragraph ...
(Note the use of the implicit counter increment.)
This module has two profiles: CSS Level 1 and Full. There is no CSS2 profile because this module is incompatible with the CSS2 list model.
The CSS Level 1 module consists of ‘list-style’,
‘list-style-position’,
‘list-style-image’, and
‘list-style-type’ (but only
the following values: ‘disc’, ‘circle,
square’, ‘decimal’, ‘lower-roman’, ‘upper-roman’,
‘lower-alpha’, ‘upper-alpha’,
‘none’). It does not include the
::marker pseudo element.
The Full profile contains everything.
This section is informative, nor normative.
/* Set up list items */
li { display: list-item; /* counter-increment: list-item; (implied by display: list-item) */ }
/* Set up ol and ul so that they reset the list-item counter */
ol, ul { counter-reset: list-item; }
/* Default list style types for ordered lists */
ol { list-style-type: decimal; }
/* Default list style types for unordered lists up to 3 deep */
ul { list-style-type: disc; }
ul ul { list-style-type: square; }
ul ul ul { list-style-type: circle; }
/* The type attribute on ol and ul elements */
ul[type="disc"] { list-style-type: disc; }
ul[type="circle"] { list-style-type: circle; }
ul[type="square"] { list-style-type: square; }
ol[type="1"] { list-style-type: decimal; }
ol[type="a"] { list-style-type: lower-alpha; }
ol[type="A"] { list-style-type: upper-alpha; }
ol[type="i"] { list-style-type: lower-roman; }
ol[type="I"] { list-style-type: upper-roman; }
/* The start attribute on ol elements */
ol[start] { counter-reset: list-item attr(start, integer, 1); counter-increment: list-item -1; }
/* The value attribute on li elements */
li[value] { counter-reset: list-item attr(value, integer, 1); counter-increment: none; }
/* The above rules don't fully describe HTML4 lists, since they do not cover
behaviors such as margins and the like. The following rules could be used
for this purpose:
ol, ul { display: block; margin: 1em 0; padding-left: 2.5em; }
ol ol, ol ul, ul ul, ul ol { margin-top: 0; margin-bottom: 0; }
li::marker { margin-right: 1em; text-align: right; }
*/
Another example is required here.
The following people and documentation they wrote were very useful for defining the numbering systems: Alexander Savenkov, Aryeh Gregor, Frank Tang, Jonathan Rosenne, Karl Ove Hufthammer, Musheg Arakelyan, Nariné Renard Karapetyan, Randall Bart, Richard Ishida Simon Montagu
As described in the introduction section, there are significant changes in this module when compared to CSS2.
marker-offset’ property is obsoleted.
| Property | Values | Initial | Applies to | Inh. | Percentages | Media |
|---|---|---|---|---|---|---|
| list-style | [ <‘list-style-type’> || <‘list-style-position’> || <‘list-style-image’> ] | not defined for shorthand properties | all elements with ‘display: list-item’ | not defined for shorthand properties | N/A | visual |
| list-style-image | <uri> | none | none | all elements with ‘display: list-item’ | yes | N/A | visual |
| list-style-position | inside | outside | outside | all elements with ‘display: list-item’ | yes | N/A | visual |
| list-style-type | <glyph> | <algorithmic> | <numeric> | <alphabetic> | <symbolic> | <non-repeating> | normal | none | disc | all elements with ‘display: list-item’ | yes | N/A | visual |