Có một vài điều về các câu trả lời khác chỉ là cụm từ kém hoặc có thể hơi sai.
SAI (ish): Các yếu tố HTML không chuẩn là "không được phép", "bất hợp pháp" hoặc "không hợp lệ".
Không cần thiết. Họ "không tuân thủ" . Có gì khác biệt? Một cái gì đó có thể "không phù hợp" và vẫn được "cho phép". W3C sẽ không gửi cảnh sát HTML đến nhà bạn và lôi bạn đi.
W3C để mọi thứ theo cách này vì một lý do. Sự phù hợp và thông số kỹ thuật được xác định bởi một cộng đồng. Nếu bạn tình cờ có một cộng đồng nhỏ hơn sử dụng HTML cho các mục đích cụ thể hơn và tất cả họ đều đồng ý về một số Yếu tố mới mà họ cần để làm cho mọi thứ dễ dàng hơn, họ có thể có những gì W3C gọi là "thông số kỹ thuật áp dụng khác" . (rõ ràng đây là một sự đơn giản hóa quá mức, nhưng bạn hiểu ý)
Điều đó nói rằng, các trình xác nhận nghiêm ngặt sẽ tuyên bố các yếu tố không chuẩn của bạn là "không hợp lệ". nhưng đó là bởi vì công việc của trình xác nhận là đảm bảo sự phù hợp với bất kỳ thông số kỹ thuật nào mà nó xác nhận, không phải để đảm bảo "tính hợp pháp" cho trình duyệt hoặc sử dụng .
FALSE (ish): Các phần tử HTML không chuẩn sẽ dẫn đến các sự cố kết xuất
Có thể, nhưng không thể. (thay thế "sẽ" bằng "có thể") Cách duy nhất điều này sẽ dẫn đến sự cố kết xuất là nếu phần tử tùy chỉnh của bạn xung đột với một đặc tả khác, chẳng hạn như thay đổi thông số HTML hoặc thông số kỹ thuật khác được tôn vinh trong cùng hệ thống (chẳng hạn như SVG, Math, hoặc một cái gì đó tùy chỉnh).
Trên thực tế, lý do CSS có thể định kiểu các thẻ không chuẩn là do đặc tả HTML nêu rõ rằng:
Tác nhân người dùng phải coi các yếu tố và thuộc tính mà họ không hiểu là trung lập về mặt ngữ nghĩa; để chúng trong DOM (cho bộ xử lý DOM) và tạo kiểu cho chúng theo CSS (đối với bộ xử lý CSS), nhưng không suy ra bất kỳ ý nghĩa nào từ chúng
Lưu ý: nếu bạn muốn sử dụng thẻ tùy chỉnh, chỉ cần nhớ một thay đổi đối với thông số HTML sau đó có thể giúp bạn tạo kiểu, vì vậy hãy chuẩn bị. Tuy nhiên, thực sự không chắc là W3C sẽ triển khai <imsocool>
thẻ.
Thẻ không chuẩn và JavaScript (thông qua DOM)
Lý do bạn có thể truy cập và thay đổi các yếu tố tùy chỉnh bằng JavaScript là vì đặc tả thậm chí nói về cách xử lý chúng trong DOM , đó là API (thực sự khủng khiếp) cho phép bạn thao tác các yếu tố trên trang của mình.
Giao diện HTMLUn UnknownEuity phải được sử dụng cho các thành phần HTML không được xác định bởi thông số kỹ thuật này (hoặc các thông số kỹ thuật áp dụng khác).
TL; DR: Việc tuân thủ thông số kỹ thuật được thực hiện cho mục đích giao tiếp và an toàn. Không tuân thủ vẫn được cho phép bởi mọi thứ trừ một người xác nhận , với mục đích duy nhất là thực thi sự phù hợp, nhưng việc sử dụng là tùy chọn.
Ví dụ:
var wee = document.createElement('wee');
console.log(wee.toString()); //[object HTMLUnknownElement]
(Tôi chắc chắn điều này sẽ tạo ra ngọn lửa, nhưng có 2 xu của tôi)