CSS Houdini là một thuật ngữ bao quát đề cập đến một một nhóm API cấp thấp hiển thị các phần của công cụ kết xuất CSS và cung cấp quyền truy cập của nhà phát triển vào Mô hình đối tượng CSS. Đây là một đối với hệ sinh thái CSS, vì điều này cho phép nhà phát triển cho trình duyệt biết cách để đọc và phân tích cú pháp CSS tuỳ chỉnh mà không cần chờ nhà cung cấp trình duyệt cung cấp tích hợp sẵn cho các tính năng này. Thật thú vị!
Một trong những bổ sung thú vị nhất cho CSS trong phạm vi Houdini là Thuộc tính và giá trị .
API này giúp tăng cường hiệu quả của các thuộc tính tuỳ chỉnh CSS (còn thường được gọi là biến CSS) bằng cách gán cho chúng ý nghĩa ngữ nghĩa (được xác định bằng cú pháp) và thậm chí giá trị dự phòng, cho phép kiểm tra CSS.
Viết thuộc tính tuỳ chỉnh Houdini
Dưới đây là ví dụ về cách đặt thuộc tính tùy chỉnh (ví dụ: biến CSS), nhưng
có cú pháp (loại), giá trị ban đầu (dự phòng) và boolean kế thừa (có
nó có kế thừa giá trị từ phần tử mẹ hay không?). Cách hiện tại để thực hiện việc này là
thông qua CSS.registerProperty()
trong JavaScript, nhưng trong việc hỗ trợ các trình duyệt, bạn có thể sử dụng
@property
:
CSS.registerProperty({ name: '--colorPrimary', syntax: '<color>', initialValue: 'magenta', inherits: false });
@property --colorPrimary { syntax: '<color>'; initial-value: magenta; inherits: false; }
Giờ đây, bạn có thể truy cập --colorPrimary
như mọi thuộc tính tuỳ chỉnh CSS khác, thông qua
var(--colorPrimary)
Tuy nhiên, sự khác biệt ở đây là --colorPrimary
không
chỉ đọc dưới dạng một chuỗi. Có dữ liệu rồi!
Giá trị dự phòng
Giống như bất kỳ thuộc tính tuỳ chỉnh nào khác, bạn có thể nhận (sử dụng var
) hoặc đặt
(ghi/ghi lại) nhưng với thuộc tính tùy chỉnh Houdini, nếu bạn đặt giá trị falsey
khi ghi đè giá trị đó, thì công cụ hiển thị CSS sẽ gửi giá trị ban đầu
(giá trị dự phòng) thay vì bỏ qua dòng.
Hãy xem ví dụ dưới đây. Biến --colorPrimary
có một
initial-value
/magenta
. Nhưng nhà phát triển đã cung cấp mã không hợp lệ
giá trị "23". Nếu không có @property
, trình phân tích cú pháp CSS sẽ bỏ qua
mã không hợp lệ. Giờ đây, trình phân tích cú pháp sẽ quay lại dùng magenta
. Điều này cho phép
dự phòng thực sự và thử nghiệm trong CSS. Tuyệt vời!
.card {
background-color: var(--colorPrimary); /* magenta */
}
.highlight-card {
--colorPrimary: yellow;
background-color: var(--colorPrimary); /* yellow */
}
.another-card {
--colorPrimary: 23;
background-color: var(--colorPrimary); /* magenta */
}
Cú pháp
Với tính năng cú pháp, giờ đây bạn có thể viết CSS ngữ nghĩa bằng cách chỉ định một loại. Sau đây là các loại dữ liệu được phép hiện tại:
length
number
percentage
length-percentage
color
image
url
integer
angle
time
resolution
transform-list
transform-function
custom-ident
(chuỗi giá trị nhận dạng tuỳ chỉnh)
Việc đặt cú pháp cho phép trình duyệt kiểm tra kiểu thuộc tính tuỳ chỉnh. Việc này có nhiều lợi ích.
Để minh hoạ điểm này, tôi sẽ cho bạn biết cách tạo hiệu ứng chuyển màu cho hiệu ứng chuyển màu. Hiện tại, không có cách nào để tạo hiệu ứng chuyển động (hoặc nội suy) giữa các giá trị độ dốc, như mỗi khai báo về độ dốc được phân tích cú pháp dưới dạng một chuỗi.
Trong ví dụ này, tỷ lệ phần trăm dừng chuyển màu được tạo ảnh động từ điểm bắt đầu 40% thành giá trị kết thúc là 100% thông qua tương tác khi di chuột. Bạn sẽ thấy một chuyển tiếp mượt mà màu chuyển màu trên cùng xuống dưới.
Trình duyệt ở bên trái hỗ trợ Houdini Properties and Values API, cho phép chuyển đổi điểm chuyển màu mượt mà. Trình duyệt ở bên phải thì không. Chiến lược phát hành đĩa đơn trình duyệt không hỗ trợ chỉ có thể hiểu thay đổi này là một chuỗi từ điểm A đến điểm B. Không có cơ hội để nội suy các giá trị, và do đó, bạn sẽ không thấy quá trình chuyển đổi suôn sẻ.
Tuy nhiên, nếu bạn khai báo loại cú pháp khi viết thuộc tính tuỳ chỉnh, sau đó sử dụng
để bật ảnh động, bạn sẽ thấy hiệu ứng chuyển đổi. Bạn
có thể tạo thực thể tuỳ chỉnh --gradPoint
như sau:
@property --gradPoint {
syntax: '<percentage>';
inherits: false;
initial-value: 40%;
}
Sau đó, khi đến lúc tạo ảnh động, bạn có thể cập nhật giá trị từ 40%
ban đầu thành 100%
:
.post:hover,
.post:focus {
--gradPoint: 100%;
}
Thao tác này giờ đây sẽ cho phép chuyển đổi độ dốc mượt mà.
Kết luận
Quy tắc @property
làm cho một công nghệ thú vị trở nên dễ tiếp cận hơn nữa
cho phép bạn viết CSS có ý nghĩa về mặt ngữ nghĩa trong chính CSS. Để tìm hiểu
tìm hiểu thêm về CSS Houdini cũng như Properties and Values API (API Thuộc tính và giá trị), hãy xem
tài nguyên:
- Houdini đã sẵn sàng chưa?
- Tài liệu tham khảo về MDN Houdini
- Thuộc tính tuỳ chỉnh thông minh hơn nhờ API mới của Houdini
- Danh sách vấn đề của Houdini CSSWG
Ảnh của Cristian Escobar trên Unsplash.