Biểu định kiểu có thể tạo

Các kiểu liền mạch có thể sử dụng lại.

Biểu định kiểu có thể tạo là để tạo và phân phối các kiểu có thể sử dụng lại khi sử dụng Bóng Mô hình đối tượng tài liệu (DOM).

Hỗ trợ trình duyệt

  • Chrome: 73.
  • Cạnh: 79.
  • Firefox: 101.
  • Safari: 16.4.

Nguồn

Bạn luôn có thể tạo biểu định kiểu bằng JavaScript. Tuy nhiên, trước đây là quy trình tạo phần tử <style> sử dụng document.createElement('style') rồi truy cập vào thuộc tính trang tính để lấy tham chiếu đến cơ sở dữ liệu CSSStyleSheet thực thể. Phương pháp này có thể tạo ra mã CSS trùng lặp và làm phình ra, và hành động đính kèm dẫn đến việc chớp nhoáng nội dung không theo phong cách phình đại hay không. Giao diện CSSStyleSheet là gốc của tập hợp CSS thường được gọi là giao diện trình bày. CSSOM, cung cấp một phương pháp có lập trình để thao tác với biểu định kiểu cũng như loại bỏ các vấn đề liên quan đến phương pháp cũ.

Sơ đồ minh hoạ việc chuẩn bị và áp dụng CSS.

Biểu định kiểu có thể tạo giúp bạn có thể xác định và chuẩn bị CSS dùng chung rồi áp dụng các kiểu đó cho nhiều Gốc bóng hoặc Tài liệu một cách dễ dàng và không bị trùng lặp. Áp dụng nội dung cập nhật cho CSSStyleSheet dùng chung tất cả những gốc rễ mà nó đã được áp dụng và áp dụng một biểu định kiểu diễn ra nhanh và đồng bộ sau khi trang tính đã được tải.

Việc liên kết được thiết lập bởi Biểu định kiểu có thể tạo sẽ phù hợp với số lượng ứng dụng khác nhau. Dữ liệu này có thể được dùng để cung cấp một chủ đề tập trung được nhiều thành phần sử dụng: giao diện có thể là thực thể CSSStyleSheet được truyền đến các thành phần, cùng với thông tin cập nhật cho chủ đề được truyền đến các thành phần tự động. Có thể dùng để phân phối CSS Custom Giá trị của thuộc tính đối với các cây con DOM cụ thể mà không cần dựa vào thác Bạn thậm chí có thể dùng trình phân tích cú pháp CSS của trình duyệt làm giao diện trực tiếp, giúp dễ dàng tải trước các tệp định kiểu mà không cần chèn các tệp đó vào DOM.

Tạo một tệp định kiểu

Thay vì giới thiệu một API mới để thực hiện việc này, API Conbuildable StyleSheets giúp bạn có thể tạo biểu định kiểu bắt buộc bằng cách gọi hàm khởi tạo CSSStyleSheet(). Đối tượng CSSStyleSheet thu được có hai các phương thức mới giúp việc thêm và cập nhật quy tắc biểu định kiểu an toàn hơn mà không cần kích hoạt Flash chưa được định kiểu Nội dung (FOUC). Chiến lược phát hành đĩa đơn replace()replaceSync() đều thay thế biểu định kiểu bằng một chuỗi CSS, đồng thời replace() sẽ trả về một lời hứa. Trong cả hai trường hợp, các thông tin tham chiếu đến biểu định kiểu bên ngoài đều không được được hỗ trợ—mọi quy tắc @import sẽ bị bỏ qua và sẽ tạo cảnh báo.

const sheet = new CSSStyleSheet();

// replace all styles synchronously:
sheet.replaceSync('a { color: red; }');

// replace all styles:
sheet.replace('a { color: blue; }')
  .then(() => {
    console.log('Styles replaced');
  })
  .catch(err => {
    console.error('Failed to replace styles:', err);
  });

// Any @import rules are ignored.
// Both of these still apply the a{} style:
sheet.replaceSync('@import url("styles.css"); a { color: red; }');
sheet.replace('@import url("styles.css"); a { color: red; }');
// Console warning: "@import rules are not allowed here..."

Sử dụng các tệp định kiểu được tạo

Tính năng mới thứ hai mà StyleSheet có thể tạo ra là một adoptedStyleSheets thuộc tính có sẵn trên Shadow GốcTài liệu. Chiến dịch này cho phép chúng ta áp dụng rõ ràng các kiểu do CSSStyleSheet xác định cho một DOM nhất định cây con. Để thực hiện việc này, chúng ta đặt thuộc tính thành một mảng gồm một hoặc nhiều biểu định kiểu thành sẽ áp dụng cho phần tử đó.

// Create our shared stylesheet:
const sheet = new CSSStyleSheet();
sheet.replaceSync('a { color: red; }');

// Apply the stylesheet to a document:
document.adoptedStyleSheets.push(sheet);

// Apply the stylesheet to a Shadow Root:
const node = document.createElement('div');
const shadow = node.attachShadow({ mode: 'open' });
shadow.adoptedStyleSheets.push(sheet);

Kết hợp kiến thức đã học

Với StyleSheet có thể tạo ra, các nhà phát triển web hiện có một giải pháp rõ ràng để tạo CSS StyleSheet và áp dụng cho cây DOM. Chúng tôi có một API dựa trên lời hứa để tải StyleSheet từ một chuỗi nguồn CSS sử dụng trình phân tích cú pháp tích hợp sẵn của trình duyệt và tải ngữ nghĩa. Cuối cùng, chúng ta có một cơ chế để áp dụng các bản cập nhật của tệp định kiểu cho tất cả các trường hợp sử dụng của StyleSheet, đơn giản hoá những việc như thay đổi giao diện và lựa chọn ưu tiên về màu sắc.

Xem bản minh hoạ

Hướng đến tương lai

Phiên bản ban đầu của Biểu định kiểu có thể tạo được gửi cùng với API được mô tả ở đây, tuy nhiên vẫn đang trong quá trình cải tiến để mọi thứ trở nên dễ sử dụng hơn. Có một đề xuất để mở rộng FrozenArray adoptedStyleSheets bằng các phương thức chuyên dụng để chèn và xoá các kiểu trang, giúp bạn không cần phải sao chép mảng và tránh các tham chiếu kiểu trang trùng lặp tiềm ẩn.

Thông tin khác