Trích dẫn từ phần Khả năng mở rộng của đặc tả HTML5 :
Đối với các tính năng ở mức đánh dấu có thể giới hạn trong tuần tự hóa XML và không cần được hỗ trợ trong tuần tự hóa HTML, các nhà cung cấp nên sử dụng cơ chế không gian tên để xác định các không gian tên tùy chỉnh trong đó các yếu tố và thuộc tính không chuẩn được hỗ trợ.
Vì vậy, nếu bạn đang sử dụng tuần tự hóa XML của HTML5, việc bạn làm điều gì đó như thế này là hợp pháp:
<greeting xmlns="http://example.com/customNamespace">Hello!</greeting>
Tuy nhiên, nếu bạn đang sử dụng cú pháp HTML, bạn sẽ bị hạn chế hơn nhiều về những gì bạn có thể làm.
Đối với các tính năng ở mức đánh dấu được sử dụng cho cú pháp HTML, các tiện ích mở rộng phải được giới hạn ở các thuộc tính mới của mẫu "x-nhà cung cấp tính năng" [...] Không nên tạo tên thành phần mới.
Nhưng những hướng dẫn đó chủ yếu hướng đến các nhà cung cấp trình duyệt, những người được cho là sẽ cung cấp kiểu dáng và chức năng trực quan cho bất kỳ yếu tố tùy chỉnh nào họ chọn để tạo.
Tuy nhiên, đối với một tác giả, mặc dù có thể hợp pháp khi nhúng một phần tử tùy chỉnh trong trang (ít nhất là trong tuần tự hóa XML), bạn sẽ không nhận được gì nhiều hơn một nút trong DOM. Nếu bạn muốn phần tử tùy chỉnh của mình thực sự làm một cái gì đó hoặc được hiển thị theo một cách đặc biệt nào đó, bạn nên xem đặc tả của Yếu tố tùy chỉnh .
Để có một đoạn mồi nhẹ nhàng hơn về chủ đề này, hãy đọc phần Giới thiệu Thành phần Web , bao gồm thông tin về Shadow DOM và các thông số kỹ thuật liên quan khác. Các thông số kỹ thuật này vẫn đang hoạt động dự thảo tại thời điểm này - bạn có thể thấy trạng thái hiện tại ở đây - nhưng chúng đang được tích cực phát triển.
Ví dụ, một định nghĩa đơn giản cho một greeting
phần tử có thể trông giống như thế này:
<element name="greeting">
<template>
<style scoped>
span { color:gray; }
</style>
<span>Simon says:</span>
<q><content/></q>
</template>
</element>
Điều này cho trình duyệt hiển thị nội dung phần tử trong dấu ngoặc kép và được thêm tiền tố bởi văn bản "Simon nói:" được tạo kiểu với màu xám. Thông thường, một định nghĩa thành phần tùy chỉnh như thế này sẽ được lưu trữ trong một tệp html riêng mà bạn sẽ nhập bằng một liên kết.
<link rel="import" href="greeting-definition.html" />
Mặc dù bạn cũng có thể bao gồm nó nội tuyến nếu bạn muốn.
Tôi đã tạo ra một minh chứng làm việc về định nghĩa trên bằng thư viện Polycill mà bạn có thể thấy ở đây . Lưu ý rằng đây là sử dụng một phiên bản cũ của thư viện Polyme - các phiên bản gần đây hoạt động hoàn toàn khác. Tuy nhiên, với thông số kỹ thuật vẫn đang được phát triển, đây không phải là thứ tôi khuyên bạn nên sử dụng trong mã sản xuất.