Value definition syntax
Cú pháp định nghĩa giá trị CSS, một ngữ pháp hình thức, được sử dụng để định nghĩa tập hợp các giá trị hợp lệ cho một thuộc tính hoặc hàm CSS. Ngoài cú pháp này, tập hợp các giá trị hợp lệ còn có thể bị hạn chế thêm bởi các ràng buộc ngữ nghĩa (ví dụ, để một số phải nghiêm ngặt là dương).
Cú pháp định nghĩa mô tả những giá trị nào được cho phép và các tương tác giữa chúng. Một thành phần có thể là một keyword, một số ký tự được coi là literal, hoặc một giá trị của một kiểu dữ liệu CSS hoặc thuộc tính CSS khác.
Kiểu giá trị thành phần
>Keyword
Keyword thông thường
Một keyword có ý nghĩa được định sẵn xuất hiện theo nghĩa đen, không có dấu ngoặc. Ví dụ: auto, smaller, hoặc ease-in.
CSS-wide keyword
Tất cả các thuộc tính CSS đều chấp nhận các keyword inherit, initial, revert, revert-layer, và unset. Chúng không được hiển thị trong định nghĩa giá trị và được định nghĩa ngầm định.
Literal
Trong CSS, một vài ký tự có thể xuất hiện độc lập, như dấu gạch chéo (/) hoặc dấu phẩy (,), và được sử dụng trong định nghĩa thuộc tính để phân tách các phần của nó. Dấu phẩy thường được dùng để tách các giá trị trong danh sách liệt kê, hoặc các tham số trong các hàm giống toán học; dấu gạch chéo thường phân tách các phần của giá trị có ý nghĩa khác nhau về mặt ngữ nghĩa nhưng có cú pháp chung. Thông thường, dấu gạch chéo được dùng trong các shorthand property; để phân tách các thành phần cùng kiểu nhưng thuộc các thuộc tính khác nhau.
Cả hai ký hiệu đều xuất hiện theo nghĩa đen trong định nghĩa giá trị.
Kiểu dữ liệu
Kiểu dữ liệu cơ bản
Một số kiểu dữ liệu được sử dụng xuyên suốt CSS và được định nghĩa một lần cho tất cả các giá trị trong đặc tả. Được gọi là kiểu dữ liệu cơ bản, chúng được biểu diễn bằng tên của chúng được bao quanh bởi ký hiệu < và >: <angle>, <string>, …
Kiểu dữ liệu non-terminal
Các kiểu dữ liệu ít phổ biến hơn, được gọi là kiểu dữ liệu non-terminal, cũng được bao quanh bởi < và >.
Kiểu dữ liệu non-terminal có hai loại:
- kiểu dữ liệu chia sẻ cùng tên với một thuộc tính, được đặt trong dấu ngoặc kép. Trong trường hợp này, kiểu dữ liệu chia sẻ cùng tập hợp giá trị với thuộc tính. Chúng thường được dùng trong định nghĩa các shorthand property.
- kiểu dữ liệu không chia sẻ tên với một thuộc tính. Các kiểu dữ liệu này rất gần với kiểu dữ liệu cơ bản. Chúng chỉ khác với kiểu dữ liệu cơ bản ở vị trí vật lý của định nghĩa của chúng. Trong trường hợp này, định nghĩa thường rất gần với định nghĩa của thuộc tính sử dụng chúng.
Bộ kết hợp giá trị thành phần
>Dấu ngoặc vuông
Dấu ngoặc vuông bao quanh nhiều thực thể, bộ kết hợp và bộ nhân, sau đó biến đổi chúng thành một thành phần duy nhất. Chúng được dùng để nhóm các thành phần để bỏ qua quy tắc ưu tiên.
example =
bold [ thin && <length> ]
Ví dụ này khớp với các giá trị sau:
bold thin 2vhbold 0 thinbold thin 3.5em
Nhưng không khớp với:
thin bold 3em, vìboldđược đặt cạnh nhau với thành phần được định nghĩa bởi dấu ngoặc, nó phải xuất hiện trước nó.
Juxtaposition
Đặt nhiều keyword, literal hoặc kiểu dữ liệu cạnh nhau, chỉ cách nhau bởi một hoặc nhiều khoảng trắng, được gọi là juxtaposition. Tất cả các thành phần được đặt cạnh nhau đều bắt buộc và phải xuất hiện theo đúng thứ tự.
example =
bold <length> , thin
Ví dụ này khớp với các giá trị sau:
bold 1em, thinbold 0, thinbold 2.5cm, thinbold 3vh, thin
Nhưng không khớp với:
thin 1em, bold, vì các thực thể phải theo thứ tự đã nêubold 1em thin, vì các thực thể là bắt buộc; dấu phẩy, một literal, phải có mặtbold 0.5ms, thin, vì các giá trịmskhông phải là<length>
Double ampersand
Phân tách hai hoặc nhiều thành phần bằng double ampersand, &&, có nghĩa là tất cả các thực thể này đều bắt buộc nhưng có thể xuất hiện theo bất kỳ thứ tự nào.
example =
bold &&
<length>
Ví dụ này khớp với các giá trị sau:
bold 1embold 02.5cm bold3vh bold
Nhưng không khớp với:
bold, vì cả hai thành phần phải xuất hiện trong giá trị.bold 1em bold, vì cả hai thành phần chỉ được xuất hiện một lần.
Note:
Juxtaposition có ưu tiên cao hơn double ampersand, nghĩa là bold thin && <length> tương đương với [ bold thin ] && <length>. Nó mô tả bold thin <length> hoặc <length> bold thin nhưng không phải bold <length> thin.
Double bar
Phân tách hai hoặc nhiều thành phần bằng double bar, ||, có nghĩa là tất cả các thực thể đều là tùy chọn: ít nhất một phải có mặt, và chúng có thể xuất hiện theo bất kỳ thứ tự nào. Thông thường điều này được dùng để định nghĩa các giá trị khác nhau của shorthand property.
example =
<number> ||
<length> ||
<color>
Ví dụ này khớp với các giá trị sau:
1em 1 blueblue 1em1 1px yellow
Nhưng không khớp với:
blue yellow, vì một thành phần phải xuất hiện nhiều nhất một lần.bold, vì nó không phải là keyword được phép làm giá trị của bất kỳ thực thể nào.
Note:
Double ampersand có ưu tiên cao hơn double bar, nghĩa là bold || thin && <length> tương đương với bold || [ thin && <length> ]. Nó mô tả bold, thin <length>, bold thin <length>, hoặc thin <length> bold nhưng không phải <length> bold thin vì bold, nếu không bị bỏ qua, phải được đặt trước hoặc sau toàn bộ thành phần thin && <length>.
Single bar
Phân tách hai hoặc nhiều thực thể bằng single bar, |, có nghĩa là tất cả các thực thể là các tùy chọn loại trừ lẫn nhau: chính xác một trong các tùy chọn này phải có mặt. Điều này thường được dùng để phân tách danh sách các keyword có thể.
example =
<percentage> |
<length> |
left |
center |
right |
top |
bottom
Ví dụ này khớp với các giá trị sau:
3%03.5emleftcenterrighttopbottom
Nhưng không khớp với:
center 3%, vì chỉ một trong các thành phần phải có mặt.3em 4.5em, vì một thành phần phải có mặt nhiều nhất một lần.
Note:
Double bar có ưu tiên cao hơn single bar, nghĩa là bold | thin || <length> tương đương với bold | [ thin || <length> ]. Nó mô tả bold, thin, <length>, <length> thin, hoặc thin <length> nhưng không phải bold <length> vì chỉ một thực thể từ mỗi phía của bộ kết hợp | có thể có mặt.
Bộ nhân giá trị thành phần
Bộ nhân là ký hiệu chỉ ra số lần một thực thể đứng trước có thể được lặp lại. Không có bộ nhân, một thực thể phải xuất hiện đúng một lần.
Bộ nhân không thể được thêm vào và có ưu tiên cao hơn tất cả các bộ kết hợp.
Dấu hoa thị (*)
Bộ nhân dấu hoa thị chỉ ra rằng thực thể có thể xuất hiện không lần, một lần hoặc nhiều lần.
example =
bold smaller*
Ví dụ này khớp với các giá trị sau:
boldbold smallerbold smaller smallerbold smaller smaller smaller, và tiếp tục.
Nhưng không khớp với:
smaller, vìboldđược đặt cạnh nhau và phải xuất hiện trước bất kỳ keywordsmallernào.
Dấu cộng (+)
Bộ nhân dấu cộng chỉ ra rằng thực thể có thể xuất hiện một hoặc nhiều lần.
example =
bold smaller+
Ví dụ này khớp với các giá trị sau:
bold smallerbold smaller smallerbold smaller smaller smaller, và tiếp tục.
Nhưng không khớp với:
bold, vìsmallerphải xuất hiện ít nhất một lần.smaller, vìboldđược đặt cạnh nhau và phải xuất hiện trước bất kỳ keywordsmallernào.
Dấu hỏi chấm (?)
Bộ nhân dấu hỏi chấm chỉ ra rằng thực thể là tùy chọn, và phải xuất hiện không lần hoặc một lần.
example =
bold smaller?
Ví dụ này khớp với các giá trị sau:
boldbold smaller
Nhưng không khớp với:
bold smaller smaller, vìsmallerphải xuất hiện nhiều nhất một lần.smaller, vìboldđược đặt cạnh nhau và phải xuất hiện trước bất kỳ keywordsmallernào.
Dấu ngoặc nhọn ({ })
Bộ nhân dấu ngoặc nhọn, bao quanh hai số nguyên được phân tách bởi dấu phẩy, A và B, chỉ ra rằng thực thể phải xuất hiện ít nhất A lần và nhiều nhất B lần.
example =
bold smaller{1,3}
Ví dụ này khớp với các giá trị sau:
bold smallerbold smaller smallerbold smaller smaller smaller
Nhưng không khớp với:
bold, vìsmallerphải xuất hiện ít nhất một lần.bold smaller smaller smaller smaller, vìsmallerphải xuất hiện nhiều nhất ba lần.smaller, vìboldđược đặt cạnh nhau và phải xuất hiện trước bất kỳ keywordsmallernào
Dấu thăng (#)
Bộ nhân dấu thăng chỉ ra rằng thực thể có thể được lặp lại một hoặc nhiều lần (giống như bộ nhân dấu cộng), nhưng mỗi lần xuất hiện được phân tách bằng dấu phẩy (',').
example =
bold smaller#
Ví dụ này khớp với các giá trị sau:
bold smallerbold smaller, smallerbold smaller, smaller, smaller, và tiếp tục.
Nhưng không khớp với:
bold, vìsmallerphải xuất hiện ít nhất một lần.bold smaller smaller smaller, vì các lần xuất hiện khác nhau củasmallerphải được phân tách bằng dấu phẩy.smaller, vìboldđược đặt cạnh nhau và phải xuất hiện trước bất kỳ keywordsmallernào.
Dấu thăng có thể tùy chọn được theo sau bởi dấu ngoặc nhọn để chỉ ra số lần thực thể lặp lại.
example =
bold smaller#{1,3}
Ví dụ này khớp với các giá trị sau:
bold smallerbold smaller, smallerbold smaller, smaller, smaller
Nhưng không khớp với:
bold smaller, smaller, smaller, smaller, vìsmallerphải xuất hiện nhiều nhất ba lần.
example =
bold smaller#{2}
Ví dụ này khớp với giá trị sau:
bold smaller, smaller
Nhưng không khớp với:
bold smaller, vìsmallerphải xuất hiện đúng hai lần.
Dấu chấm than (!)
Bộ nhân dấu chấm than sau một nhóm chỉ ra rằng nhóm đó là bắt buộc, và phải tạo ra ít nhất một giá trị; ngay cả khi ngữ pháp của các phần tử bên trong nhóm cho phép bỏ qua toàn bộ nội dung, ít nhất một giá trị thành phần không được bỏ qua.
example =
[ bold? smaller? ]!
Ví dụ này khớp với các giá trị sau:
boldsmallerbold smaller
Nhưng không khớp với:
- không có
boldcũng không cósmaller, vì một trong chúng phải xuất hiện. smaller bold, vìboldđược đặt cạnh nhau và phải xuất hiện trước keywordsmaller.bold smaller bold, vìboldvàsmallerchỉ được xuất hiện một lần.
Ký hiệu phạm vi với ngoặc ([min,max])
Một số kiểu có thể chấp nhận các giá trị số trong một phạm vi nhất định. Ví dụ, thuộc tính column-count có thể chấp nhận giá trị số nguyên dương từ 1 đến vô cực, bao gồm cả hai đầu. Cú pháp tương ứng trông như thế này:
example =
<integer [1,∞]>
<integer> =
<number-token>
Bất kỳ giá trị nào nằm ngoài phạm vi được chỉ định này sẽ khiến toàn bộ khai báo không hợp lệ, do đó trình duyệt sẽ bỏ qua nó.
Ký hiệu phạm vi với ngoặc [min, max] chỉ ra một phạm vi bao gồm giữa giá trị min và max. Ký hiệu này được dùng trong ký hiệu kiểu số và có thể bao gồm đơn vị, ví dụ: <angle [0,180deg]>. Vô cực dương và âm (-∞ và ∞) không được kèm theo đơn vị. Các kiểu được chỉ định bằng đơn vị có thể có giá trị không với hoặc không có đơn vị, ví dụ <time [0s,10s]> hoặc <time [0,10s]>.
Dưới đây là thêm ví dụ:
<integer [-∞,∞]>: Bất kỳ số nguyên nào từ âm vô cực đến dương vô cực.<integer [0,∞]>: Bất kỳ số nguyên nào từ 0 đến dương vô cực là hợp lệ. Số nguyên âm là không hợp lệ.<time [0s,10s]>hoặc<time [0,10s]>: Bất kỳ khoảng thời gian nào từ 0 đến 10 giây là hợp lệ.<integer [-∞,-1]> | <integer [1,∞]>: Bất kỳ số nguyên nào ngoại trừ không đều hợp lệ.
Tóm tắt
| Ký hiệu | Tên | Mô tả | Ví dụ |
|---|---|---|---|
| Bộ kết hợp | |||
| Juxtaposition | Các thành phần bắt buộc và phải xuất hiện theo thứ tự đó | solid <length> |
|
&& |
Double ampersand | Các thành phần bắt buộc nhưng có thể xuất hiện theo bất kỳ thứ tự nào | <length> && <string> |
|| |
Double bar | Ít nhất một trong các thành phần phải có mặt, và chúng có thể xuất hiện theo bất kỳ thứ tự nào. |
<'border-image-outset'> || <'border-image-slice'>
|
| |
Single bar | Chính xác một trong các thành phần phải có mặt | smaller | small | normal | big | bigger |
[ ] |
Dấu ngoặc vuông | Nhóm các thành phần để bỏ qua quy tắc ưu tiên | bold [ thin && <length> ] |
| Bộ nhân | |||
| Không có bộ nhân | Đúng 1 lần | solid |
|
* |
Dấu hoa thị | 0 hoặc nhiều lần | bold smaller* |
+ |
Dấu cộng | 1 hoặc nhiều lần | bold smaller+ |
? |
Dấu hỏi chấm | 0 hoặc 1 lần (tức là tùy chọn) | bold smaller? |
{min,max} |
Dấu ngoặc nhọn | Ít nhất min lần, nhiều nhất max lần |
bold smaller{1,3} |
# |
Dấu thăng |
1 hoặc nhiều lần, với mỗi lần xuất hiện được phân tách bằng dấu phẩy
(,)
|
bold smaller# |
! |
Dấu chấm than | Nhóm phải tạo ra ít nhất 1 giá trị | [ bold? smaller? ]! |
| Phạm vi | |||
[min,max] |
Phạm vi số với ngoặc | Chỉ định một phạm vi số | <integer [0,∞]> |
Đặc tả
| Specification |
|---|
| CSS Values and Units Module Level 4> # value-defs> |
Xem thêm
- Các khái niệm chính của CSS: