Є кілька речей щодо інших відповідей, які або є лише погано сформульованими або, можливо, трохи невірними.
FALSE (ish): нестандартні елементи HTML "не дозволено", "незаконно" або "недійсно".
Не обов'язково. Вони "невідповідні" . Яка різниця? Щось може "не відповідати" і все-таки бути "дозволеним". W3C не збирається відправляти HTML-поліцію до вашого будинку і вивозити вас.
W3C залишив речі таким чином не просто так. Відповідність та технічні характеристики визначаються громадою. Якщо у вас є менша спільнота, яка споживає HTML для більш конкретних цілей, і всі вони домовляються про деякі нові елементи, які їм потрібні, щоб полегшити роботу, вони можуть мати те, що W3C називає "іншими застосовними специфікаціями" . (очевидно, що це суттєве перевищення спрощення, але ви розумієте)
Однак, суворі валідатори визнають ваші нестандартні елементи "недійсними". але це тому, що завдання валідатора - забезпечити відповідність будь-яким специфікаціям, для яких це підтверджує, а не забезпечити "законність" для браузера або для використання .
FALSE (МІГ): Нестандартні HTML елементи будуть приводити до візуалізації питань
Можливо, але малоймовірно. (замініть "буде" на "може"). Єдиний спосіб цього може спричинити проблему візуалізації, якщо ваш користувальницький елемент суперечить іншій специфікації, такі як зміна специфікації HTML або інша специфікація, яка вшановується в тій же системі (наприклад, SVG, Math чи щось на замовлення).
Насправді причина CSS може створювати нестандартні теги в тому, що специфікація HTML чітко говорить про те, що:
Користувацькі агенти повинні ставитися до елементів та атрибутів, які вони не розуміють як семантично нейтральні; залишаючи їх у DOM (для DOM-процесорів) та стилізуючи їх відповідно до CSS (для CSS-процесорів), але не випливає із них ніякого значення
Примітка. Якщо ви хочете скористатися спеціальним тегом, пам’ятайте, що зміна специфікації HTML пізніше могла підірвати ваш стиль, тому будьте готові. <imsocool>
Однак це малоймовірно, що W3C реалізує тег.
Нестандартні теги та JavaScript (через DOM)
Причина, через яку ви можете отримати доступ та змінювати власні елементи за допомогою JavaScript, полягає в тому, що специфікація навіть говорить про те, як з ними слід обробляти в DOM , що є (дійсно жахливим) API, що дозволяє вам маніпулювати елементами на вашій сторінці.
Інтерфейс HTMLUnknownElement повинен використовуватися для елементів HTML, які не визначені цією специфікацією (або іншими застосовними специфікаціями).
TL; DR: Відповідність специфікації проводиться з метою зв'язку та безпеки. Невідповідність все ще дозволена всім, крім валідатором , єдиною метою якого є забезпечення відповідності, але використання якого не є обов'язковим.
Наприклад:
var wee = document.createElement('wee');
console.log(wee.toString()); //[object HTMLUnknownElement]
(Я впевнений, що це приверне полум’я, але є мої 2 копійки)