Copyright © 2002 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
This CSS level 3 module describes how lists are styled.
This document is a draft of one of the "modules" [CSS3INTRO] for the upcoming CSS3 specification. It extends, but also proposes changes to the functionality provided by the existing CSS level 2.
This document is a working draft of the CSS working group which is part of the style activity (see summary).
Comments on, and discussions of this draft can be sent on the (archived) public mailing list www-style@w3.org (see instructions). W3C Members can also send comments directly to the CSS working group.
This is a working draft and may therefore be updated, replaced or rendered obsolete by other W3C documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress". Its publication does not imply endorsement by the W3C membership or the CSS Working Group (members only).
To find the latest version of this working draft, please follow the "Latest version" link above, or visit the list of W3C Technical Reports.
Patent disclosures relevant to CSS may be found on the Working Group's public patent disclosure page.
This document may be available in translations in the future. The English version of this specification is the only normative version.
This CSS3 module depends on the following other CSS3 modules:
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.
Name: | 'list-style-type' |
Value: | <glyph> | <algorithmic> | <numeric> | <alphabetic> | <symbolic> | <non-repeating> | normal | none |
Initial: | disc |
Appliesto: | 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.
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+0578 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 two characters for the 7000 digit should be combined and rendered as one character. When the U+0302 character combines with the 7000 characters, it does so as if the two characters were one.
The suffix for the armenian numbering system is a dot . U+002E.
Numbers outside the range of the armenian system are rendered using the decimal numbering style.
Decimal 7482951 in lower-armenian is ու̂ն̂ձ̂սջծա U+0578 U+0582 U+0302 U+0576 U+0302 U+0571 U+0302 U+057D U+057B U+056E U+0561.
The suffix for the cjk-ideographic numbering systems is a dot . U+002E. 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. 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+10EF | 1000 | შ | U+10E8 | 100 | რ | U+10E0 | 10 | ი | U+10D8 | 1 | ა | U+10D0 |
2000 | ჩ | U+10E9 | 200 | ს | U+10E1 | 20 | კ | U+10D9 | 2 | ბ | U+10D1 | |||
3000 | ც | U+10EA | 300 | ტ | U+10E2 | 30 | ლ | U+10DA | 3 | გ | U+10D2 | |||
4000 | ძ | U+10EB | 400 | უ | U+10E3 | 40 | მ | U+10DB | 4 | დ | U+10D3 | |||
5000 | წ | U+10EC | 500 | ჳ | U+10F3 | 50 | ნ | U+10DC | 5 | ე | U+10D4 | |||
6000 | ჭ | U+10ED | 600 | ფ | U+10E4 | 60 | ჲ | U+10F2 | 6 | ვ | U+10D5 | |||
7000 | ხ | U+10EE | 700 | ქ | U+10E5 | 70 | ო | U+10DD | 7 | ზ | U+10D6 | |||
8000 | ჴ | U+10F4 | 800 | ღ | U+10E6 | 80 | პ | U+10DE | 8 | ჱ | U+10F1 | |||
9000 | ჵ | U+10F5 | 900 | ყ | U+10E7 | 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.
Numbers outside the range of the georgian system are rendered using the decimal numbering style.
For each group of three digits in the decimal system, the requisite numbers are selected from the following list.
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 |
Groups for more significant numbers are placed before groups for less significant numbers (as in the decimal system). Each group is separated by a space U+0020.
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.
When a group or set of adjacent groups would have the numerical value zero, the word for "thousands", אלפי U+05D0 U+05DC U+05E4 U+05D9, is repeatedly inserted, one for each group up to the zero. The final group of thousands in a chain has a final form ם U+05DD appended at the end. For instance the decimal number 3000123 would be represented as ג אלפי אלפים קכג U+05D2 U+0020 U+05D0 U+05DC U+05E4 U+05D9 U+0020 U+05D0 U+05DC U+05E4 U+05D9 U+05DD U+0020 U+05E7 U+05DB U+05D2 (3, space, thousands, space, thousands with final form, space, 100+20+3). For grammatical reasons, the first "thousands" word after a group consisting of only the number 1 is represented by אלף U+05D0 U+05DC U+05E3. It does not have the final ם U+05DD appended, even if it occurs on its own. The number 2000 at the end of the number is represented by אלפיים U+05D0 U+05DC U+05E4 U+05D9 U+05D9 U+05DD (and does not get anything else appended at the end). The number 2 is not otherwise special (for example 2000000 is simply ב אלפי אלפים U+05D1 U+0020 U+05D0 U+05DC U+05E4 U+05D9 U+0020 U+05D0 U+05DC U+05E4 U+05D9 U+05DD (2, space, thousands, space, thousands with final form).
Some text about geresh/gershayim is commented out here.
For zero, the word אפס U+05D0 U+05E4 U+05E1 is used.
The suffix for the hebrew numbering system is a dot . U+002E.
For numbers less than zero, the 'decimal' system is used instead.
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 | אפס |
1 | א |
2 | ב |
3 | ג |
4 | ד |
5 | ה |
97 | צז |
98 | צח |
99 | צט |
100 | ק |
101 | קא |
944 | תתקמד |
945 | תתקמה |
946 | תתקמו |
999 | תתקצט |
1000 | אלף |
1001 | א א |
1998 | א תתקצח |
1999 | א תתקצט |
2000 | אלפיים |
2001 | ב א |
2003 | ב ג |
2748 | ב תשמח |
2750 | ב תשנ |
1000000 | אלף אלפים |
1500000 | א תק אלפים |
2000000 | ב אלפי אלפים |
9999999 | ט תתקצט תתקצט |
10000212 | י אלפי אלפים ריב |
10000425 | י אלפי אלפים תכה |
10000851 | י אלפי אלפים תתנא |
10001064 | י א סד |
10001277 | י א רעז |
980000002000 | תתקפ אלפי אלפי אלפים אלפיים |
990000002000 | תתקצ אלפי אלפי אלפים אלפיים |
1000000000000 | אלף אלפי אלפי אלפים |
1000500000000 | אלף אלפי אלפי אלפים תק אלפי אלפים |
1000500002000 | אלף אלפי אלפי אלפים תק אלפיים |
1003000000000 | א ג אלפי אלפי אלפים |
1047500002000 | א מז תק אלפיים |
4823885215073 | ד תתכג תתפה רטו עג |
5249872460970 | ה רמט תתעב תס תתקע |
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.
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.
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+0548 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 |
There are two letters for 10,000 and 20,000 (U+0555 and U+0556 respectively), but whether and how they should be used is unclear.
Decimal 7482951 in upper-armenian is ՈՒ̂Ն̂Ձ̂ՍՋԾԱ U+0548 U+0552 U+0302 U+0546 U+0302 U+0541 U+0302 U+054D U+054B U+053E U+0531.
The suffix for roman numerals is a dot . U+002E.
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 | |
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.
Name: | 'list-style-image' |
Value: | <uri> | none |
Initial: | none |
Appliesto: | 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") }
If 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.
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'
Name: | 'list-style-position' |
Value: | inside | outside |
Initial: | outside |
Appliesto: | 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.
Name: | 'list-style' |
Value: | [ <'list-style-type'> || <'list-style-position'> || <'list-style-image'> ] |
Initial: | not defined for shorthand properties |
Appliesto: | 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, Frank Tang, Jonathan Rosenne, Karl Ove Hufthammer, Musheg Arakelyan, and Randall Bart.
As described in the introduction section, there are significant changes in this module when compared to CSS2.