Skip to content

Commit

Permalink
Correct syntax rules for
Browse files Browse the repository at this point in the history
  • Loading branch information
wbamberg committed Jun 22, 2024
1 parent f8df2f4 commit 854d01f
Showing 1 changed file with 24 additions and 9 deletions.
33 changes: 24 additions & 9 deletions files/en-us/web/css/ident/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,30 @@ The **`<ident>`** [CSS](/en-US/docs/Web/CSS) [data type](/en-US/docs/Web/CSS/CSS

## Syntax

The syntax of `<custom-ident>` is similar to CSS identifiers (such as property names), except that it is [case-sensitive](https://en.wikipedia.org/wiki/Case_sensitivity). It consists of one or more characters, where characters can be any of the following:
A CSS identifier consists of one or more characters, where characters can be any of the following:

- any alphabetical character (`A` to `Z`, or `a` to `z`),
- any decimal digit (`0` to `9`),
- a hyphen (`-`),
- an underscore (`_`),
- an escaped character (preceded by a backslash, `\`),
- a [Unicode](https://en.wikipedia.org/wiki/Unicode) character (in the format of a backslash, `\`, followed by one to six hexadecimal digits, representing its Unicode code point)
- any ASCII character `A-Z` and `a-z`
- any decimal digit (`0` to `9`)
- a hyphen (`-`)
- an underscore (`_`)
- any other Unicode character `U+00A0` and higher (that is, any other non-ASCII Unicode character)
- an [escaped character](escaping_characters).

Additionally, an identifier must not start with an unescaped digit, and must not start with an unescaped hyphen followed by an unescaped digit.

Note that `id1`, `Id1`, `iD1` and `ID1` are all different identifiers as they are [case-sensitive](https://en.wikipedia.org/wiki/Case_sensitivity). On the other hand, as there are several ways to escape a character, `toto\?` and `toto\3F` are the same identifiers.

### Escaping characters

Any character except a hexadecimal digit (`[0-9a-fA-F]`) can be escaped by placing a backslash in front of it. For example, `&` can be escaped as `\&`.

Any character can be escaped with a backslash followed by followed by one to six hexadecimal digits, representing the character's Unicode {{glossary("code point")}}. For example, `&` can be escaped as `\26`. In this situation, if the character following the escaped character is a hexadecimal digit, then either:

- a space or other whitespace character must be placed after the Unicode code point, or:
- the Unicode code point must be given in full, with all six digits.

For example, the string `&123` could be escaped as `\26 123` or `\000026123`.

## Examples

### Valid identifiers
Expand All @@ -32,16 +45,18 @@ ground-level A mix of alphanumeric characters and a dash
-test A dash followed by alphanumeric characters
--toto A custom-property like identifier
_internal An underscore followed by alphanumeric characters
\22 toto A Unicode character followed by a sequence of alphanumeric characters
\22 toto An escaped character followed by a sequence of alphanumeric characters
\000022toto The same as the previous example
bili\.bob A correctly escaped period
🔥123 A non-ASCII character followed by numbers
```

### Invalid identifiers

```plain example-bad
34rem It must not start with a decimal digit.
-12rad It must not start with a dash followed by a decimal digit.
bili.bob Only alphanumeric characters, _, and - needn't be escaped.
bili.bob ASCII characters apart from alphanumerics must be escaped.
'bilibob' This would be a {{CSSxRef("&lt;string&gt;")}}.
"bilibob" This would be a {{CSSxRef("&lt;string&gt;")}}.
```
Expand Down

0 comments on commit 854d01f

Please sign in to comment.