Я хочу стилизовать элементы с атрибутом xlink:href
в XHTML, однако не могу заставить его работать. Мой тестовый код:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xyz="http://xyz.org">
<head>
<meta charset="UTF-8" />
<title>css namespace</title>
<style>
body { font-size: 20px; } /* Oops! A normal rule must not precede @namespace rules! */
@namespace html "http://www.w3.org/1999/xhtml";
@namespace xlink "http://www.w3.org/1999/xlink";
@namespace xyz "http://xyz.org";
html|p {
color: blue;
}
[xlink|href], [xyz|href] {
cursor: pointer;
text-decoration: underline;
color: red;
}
xyz|p, xyz {
display: block;
}
</style>
</head>
<body>
<!-- typos: 'xref' should be 'href', thank BoltClock's answer! -->
<p xlink:xref="aaa"><p xlink:xref ...</p>
<p xyz:xref="aaa"><p xyz:xref ...</p>
<!-- correctly styled elements: -->
<p xlink:href="aaa"><p xlink:href ...</p>
<p xyz:href="aaa"><p xyz:href ...</p>
<xyz:p xlink:href="aaa"><xyz:p xlink:href ...</xyz:p>
<xyz:p xyz:href="aaa"><xyz:p xyz:href ...</xyz:p>
<xyz xlink:href="aaa"><xyz xlink:href ...</xyz>
<xyz xyz:href="aaa"><xyz xyz:href ...</xyz>
</body>
</html>
Когда я тестировал его в chrome 34 и firefox 30, я заметил, что правило [xlink|href], [xyz|href]
не применяется к элементам <p>
XHTML, но применяется к элементам <xyz:p>
и <xyz>
.
Почему это происходит? Селекторы атрибутов CSS с пространством имен не работают с XHTML?
Обновление:
Да, селекторы атрибутов CSS с пространством имен работают с XHTML, но не с HTML. Мой код на самом деле имеет 2 проблемы:
Есть опечатки для атрибутов
xlink:xref
иxyz:xref
(спасибо за ответ BoltClock). Я обновил код.- #P7# <блочная цитата> #P8# блочная цитата>
Обновление 2. Для файлов HTML, которые не поддерживают пространство имен XML, селекторы CSS с пространством имен обычно не работают с ним. Однако, поскольку квалифицированные имена элементов/атрибутов обрабатываются в HTML как простые имена, эти селекторы работают с HTML:
[xlink\:href]:hover, [xyz\:href]:hover { ... }
xyz\:p, xyz { ... }
Интересно, что селекторы пространства имен, ориентированные на пространство имен XHTML, по-прежнему работают с файлами HTML, например:
@namespace html "http://www.w3.org/1999/xhtml";
html|p { ... }
Другим исключением является иностранный контент, такой как SVG, предложенный @Alohci.
Content-Type: application/xhtml+xml
? - person Quentin   schedule 08.07.2014application/xhtml+xml
. Теперь он работает так, как ожидалось. Да, заголовок надо перевернуть. - person Duan Yao   schedule 08.07.2014xlink:href
, когда он появляется в иностранном контенте, таком как SVG, является одним из таких особых случаев. Например, см. jsfiddle.net/Kqr3M. - person Alohci   schedule 08.07.2014