Являются пользовательскими атрибутами html без data- * prefix a valid attribute?

Хорошо, недавно я нашел это: https://angularjs.org/

Я заметил, что они используют собственный префикс атрибута "ng-"

Из статей, таких как: http://html5doctor.com/html5-custom-data-attributes/

или даже stackoverflow: qaru.site/info/702240/...

И есть еще много, единственный допустимый (я не говорю о том факте, что они все равно работают) префикс для использования - "data-".

Итак, может ли кто-нибудь объяснить мне, как это может быть, что эти миллионы проектов и компаний используют недопустимый префикс для пользовательских атрибутов HTML-элементов, и, кажется, никому нет до этого дела? Или я что-то упустил?

Я был бы очень признателен за некоторые мысли или даже источники информации, а не только за такие тексты, как "все делают это" и "не беспокойтесь и не оставляйте это".

Ответ 1

Пользовательские атрибуты должны начинаться с данных или x-, или они недействительны. Это может вызвать проблемы в будущих браузерах, и HTML-валидаторы скажут, что они недействительны.

Смотрите: В чем разница между ng-app и data-ng-app?

И: http://www.w3.org/TR/2011/WD-html5-20110525/elements.html#embedding-custom-non-visible-data-with-the-data-attributes

Ответ 2

Это старый вопрос, но может быть полезным следующее.

В принципе, вы можете создавать любые атрибуты, какие захотите, хотя вы не можете ожидать, что браузер знает, что с ними делать. Это верно как в HTML:

<p thing="whatever" … </p>

и в JavaScript

//  p = some element
p.setAttribute('thing','whatever');

Вы можете ожидать, что CSS воспримет ваш пользовательский атрибут серьезно, если вы используете селектор атрибута:

…[thing] {
    …
}

Конечно, если вы начнете создавать свои собственные атрибуты, вы столкнетесь с двумя проблемами:

  • Валидатор HTML не будет знать, является ли ваш новый атрибут преднамеренным или ошибочным, и будет считать его неверным
  • Вы конкурируете с другим кодом, который также создает свои собственные атрибуты

data- атрибута data- имеет два преимущества:

  • Валидаторы HTML будут игнорировать атрибут в целях проверки
  • JavaScript соберет эти атрибуты в специальный объект data для легкого доступа

Фактически префикс data- позволяет вам работать с недопустимым в противном случае атрибутом, сказав валидатору пропустить его.

Это не решит проблему конкурирующих имен атрибутов, так что вы в значительной степени сами по себе. Однако обычной практикой является, по крайней мере, включать префикс, специфичный для библиотеки.

Наконец к вопросу о том, чтобы быть действительным.

Если под действительным вы подразумеваете, что он пройдет стандартный (современный) HTML-валидатор, ответ - только data- будут работать таким образом. Если, с другой стороны, вы имеете в виду, будет ли это работать, то и CSS, и JavaScript будут успешно работать с другими выдуманными атрибутами, если вы не ожидаете, что браузер угадает, что вы имеете в виду.

Ответ 3

Официальный валидатор W3C не считает ng-customattr или x-customattr или customattr действительными.

Утверждение, что даже пользовательские атрибуты с префиксом data- являются недействительными, являются ложными, проверьте эту спецификацию W3C

Однако стоит отметить, что такие проекты, как Laravel Dusk, побуждают разработчиков использовать собственные data- префиксом data-.

Стоит отметить, что официальные спецификации W3C - не единственный способ создания HTML-страницы, а рекомендуемые. Я бы осмелился сказать, что есть невысказанные стандарты, которые широко используются в Интернете и все же допускаются всеми основными браузерами, даже если они не упомянуты в спецификациях w3c. Согласно этой статье, пользовательские атрибуты с именем html игнорируются, но все же доступны, поэтому являются приемлемым вариантом.

Боюсь, что у нас под ногами нет твердого места - data- имя своему параметру с префиксом data-, вы делаете что-то рекомендованным способом - избегая возможных предупреждений об устаревании или других проблем, если в будущем браузеры будут более строгими. Однако стандарты могут меняться, и поскольку пользовательские именованные атрибуты широко распространены в сети, они могут сами стать стандартом.

Так в чем же решение?

Если вы действительно хотите использовать нестандартные data- префиксом data- в HTML, было бы хорошо провести исследование общей поддержки браузера (найти человека, который уже сделал это, и изучить результаты в какой-то статье), и принять решение на основе на этом - как и с любой другой функцией HTML/CSS/JS.