25 авг. 2011 г.

Нестандартные атрибуты тегов HTML

Тема нестандартных атрибутов (пользовательских, custom attributes) в тегах HTML уже давно бродит в кругах web-девелоперов. Некоторые, не долго думая, пишут всё что им вздумается, забивая на то, что получившийся HTML-код не пройдёт валидацию (раньше этим сильно грешил ZK framework). Некоторые с недавних пор уповают на будущий HTML5 и атрибуты, начинающиеся с префикса data-.

Практически никто не вспоминает (или вообще не знает) о решении, которое существует уже давно: XHTML. С самого начала XHTML позволял указывать свои пространства имён XML, в которых можно было творить почти всё, что душе угодно, не нарушая валидности XHTML кода.

Впрочем, лучше один раз увидеть. Вот пример (вырезан из рабочей системы):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:a="Ajaxify framework" xmlns:v="Form navigation and validation framework">
<head>
  <title>Title</title>
</head>
<body>
  <div id="content"></div>
  <a href="content.html" a:target="content" a:confirm="Update content?">Refresh</a>
</body>
</html>

Работает во всех браузерах, используемых в данный момент моими коллегами-разработчиками, тестерами и клиентами (IE6+, Opera 9+, Firefox 3.5+, Chrome 10+, Safari 4+), проходит валидацию на W3C.

Наибольшей встреченной проблемой было неоднозначное отношение разных CSS-движков к двоеточию в CSS-селекторе: Prototype 1.6 legacy selector и Prototype 1.7 + NWMatcher разрешали атрибут с двоеточием использовать как есть, типа $$("a[a:target]"), а Prototype 1.7 + Sizzle требовал экранировать двоеточие, типа так: $$("a[a\:target]").

Комментариев нет:

Отправить комментарий