#html #xml #html5 #xhtml #namespace
Выдержка из спецификации: In HTML documents, elements in the HTML namespace may have an xmlns attribute specified, if, and only if, it has the exact value "http://www.w3.org/1999/xhtml". This does not apply to XML documents. Переводится примерно: "В HTML документах элементы в HTML-пространстве имён могут иметь атрибут xmlns, если он имеет точное значение "http://www.w3.org/1999/xhtml". " И тут я понял, что вообще ничего не понимаю. Я думал, что для html нет понятия пространство имен. Ссылка HTML пространство имен в спецификации ведет на список: Пространство имён HTML это: http://www.w3.org/1999/xhtml Пространство имён MathML это: http://www.w3.org/1998/Math/MathML Пространство имён SVG это: http://www.w3.org/2000/svg Пространство имён XLink это: http://www.w3.org/1999/xlink Пространство имён XML это: http://www.w3.org/XML/1998/namespace Пространство имён XMLNS: http://www.w3.org/2000/xmlns/ И я совсем не могу понять, что такое имеется ввиду под пространством имен в данной спецификации? Пространство имен html ведет вообще на xhtml спецификацию. Причем тут html5 и xhtml? И как это связано с пространством имен? Что значит фраза "элементы в HTML-пространстве имён могут иметь атрибут xmlns"? В html пространстве имен это где? И как работает этот атрибут в html5?
Ответы
Ответ 1
Про атрибут xmlns По поводу xmlns, в том же тексте, сразу после приведённой в вопросе цитате сказано следующее: Note: In HTML, the xmlns attribute has absolutely no effect. It is basically a talisman. It is allowed merely to make migration to and from XHTML mildly easier. Заметка: В HTML, xmlns атрибут не имеет никакого эффекта. Это просто талисман. Он лишь позволяет проще выполнить преобразования в и из XHTML документов. С этим разобрались, xmlns в HTML нам не потребуется. Его конечно можно использовать для HTML-элементов, но это не имеет смысла, так как для всех структур в HTML документе уже есть предустановленные значения "пространства имён", список которых приведён в вопросе, и изменить их на другие значения никто не позволит. Проще говоря, нижепревидённые примеры равнозначны: А вот так уже не получится, так как xmlns попросту игнорируется, и html всё равно будет располагаться в пространстве имён "http://www.w3.org/1999/xhtml", как было сказано выше. Про пространство имён По аналогии с именами классов, пакетов и т.п из языков программирования, пространство имён позволяет отличить один элемент от другого, когда они имеют одинаковое название, но принадлежат разным пространствам имён. Где это может произойти в HTML? Например когда мы используем svg в html: Ссылка в HTML И нам потребовалось изменить размер шрифта у ссылки в svg. Просто написать в стилях a { font-size: 1.5em } уже не получится, так как это правило применится и к обычной ссылки тоже. Вот здесь на помощь приходят возможности CSS по работе с пространствами имён. Для этого в CSS выполним такие действия: 1) Используя ключевое слово @namespace указываем наименование "приставки" пространства имён, с каким мы будем иметь дело: @namespace svg url(http://www.w3.org/2000/svg); Заметка: адрес пространства имён для SVG взят из спецификации, а вместо svg можно использовать другое наименование. 2) Теперь с помощью приставки svg можно обратиться непосредственно к метке , которая расположена в , с помощью специального синтаксиса CSS: svg|a { font-size: 1.5em; } Итог Атрибут xmlns в HTML не нужен. Спецификация за нас определила названия пространств имён для конкретных структур HTML, XML, SVG и их элементов. Для того чтобы в CSS получить доступ к конкретному элементу с использованием пространства имён необходимо использовать форму namespace|css-selector, предварительно дав наименование для пространства имён с помощью @namespace.
Комментариев нет:
Отправить комментарий