Искам да стилизирам елементи с атрибут 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="/bgaaa"><p xlink:href ...</p>
<p xyz:href="/bgaaa"><p xyz:href ...</p>
<xyz:p xlink:href="/bgaaa"><xyz:p xlink:href ...</xyz:p>
<xyz:p xyz:href="/bgaaa"><xyz:p xyz:href ...</xyz:p>
<xyz xlink:href="/bgaaa"><xyz xlink:href ...</xyz>
<xyz xyz:href="/bgaaa"><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