Разделитель пространства имён
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в разных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Разделитель пространства имён (|) отделяет селектор от пространства имён, указывая пространство имён или его отсутствие для селектора типа.
/* Links in the namespace named myNameSpace */
myNameSpace|a {
font-weight: bold;
}
/* paragraphs in any namespace (including no namespace) */
*|p {
color: darkblue;
}
/* heading level 2 not in a namespace */
|h2 {
margin-bottom: 0;
}
Селекторы типа и универсальный селектор допускают необязательный компонент пространства имён. Если пространство имён было объявлено ранее с помощью @namespace, к этим селекторам можно добавить пространство имён, указав его имя перед селектором и отделив его разделителем пространства имён (|). Это полезно при работе с документами, содержащими несколько пространств имён, например с HTML, включающим встроенные SVG или MathML, либо с XML, объединяющим несколько словарей.
-
ns|h1— выбирает элементы<h1>в пространстве имёнns -
*|h1— выбирает все элементы<h1> -
|h1— выбирает все элементы<h1>вне любых объявленных или подразумеваемых пространств имён
Синтаксис
namespace|element { style properties }
Примеры
По умолчанию все элементы HTML или SVG принадлежат пространству имён, поскольку подразумеваются пространства имён http://www.w3.org/1999/xhtml и http://www.w3.org/2000/svg. Метод document.createElementNS с пустой строкой в качестве параметра пространства имён позволяет создавать элементы без пространства имён.
Пример с именованным пространством имён
В этом примере все элементы принадлежат пространству имён.
HTML
В HTML или внутри SVG пространства имён явно не объявлены.
<p>This paragraph <a href="#">has a link</a>.</p>
<svg width="400" viewBox="0 0 400 20">
<a href="#">
<text x="0" y="15">Link created in SVG</text>
</a>
</svg>
CSS
В CSS объявляются два пространства имён, а затем задаются стили для ссылок в целом (a), для ссылок без пространства имён (|a), для ссылок в любом пространстве имён или без него (*|a), а затем для ссылок в двух разных именованных пространствах имён (svgNamespace|a и htmlNameSpace|a).
@namespace svgNamespace url("http://www.w3.org/2000/svg");
@namespace htmlNameSpace url("http://www.w3.org/1999/xhtml");
/* All `<a>`s in the default namespace, in this case, all `<a>`s */
a {
font-size: 1.4rem;
}
/* no namespace */
|a {
text-decoration: wavy overline lime;
font-weight: bold;
}
/* all namespaces (including no namespace) */
*|a {
color: red;
fill: red;
font-style: italic;
}
/* only the svgNamespace namespace, which is <svg> content */
svgNamespace|a {
color: green;
fill: green;
}
/* The htmlNameSpace namespace, which is the HTML document */
htmlNameSpace|a {
text-decoration-line: line-through;
}
Результат
Селектор |a, ссылка без пространства имён, не соответствует ни одной ссылке. В HTML подразумевается http://www.w3.org/1999/xhtml, то есть весь HTML принадлежит пространству имён, даже если оно не объявлено явно. В SVG также подразумевается пространство имён http://www.w3.org/2000/svg, даже если оно не задано явно. Это означает, что всё содержимое относится как минимум к одному пространству имён.
Пространство имён по умолчанию и отсутствие пространства имён
В этом примере мы используем JavaScript, чтобы создать элемент без пространства имён и добавить его в документ. Мы задаём пространство имён SVG как пространство имён по умолчанию, объявляя безымянное пространство имён с помощью @namespace.
Примечание: Если задано пространство имён по умолчанию, или безымянное пространство имён, универсальные селекторы и селекторы типа применяются только к элементам в этом пространстве имён.
HTML
В HTML или внутри SVG пространства имён явно не объявлены.
<p><a href="#">A link</a> in the implied HTML namespace.</p>
<svg width="400" viewBox="0 0 400 20">
<a href="#">
<text x="0" y="15">Link created in SVG namespace</text>
</a>
</svg>
JavaScript
С помощью JavaScript и метода document.createElementNS мы создаём ссылку без пространства имён, а затем добавляем её.
// create 'no namespace' anchor
const a = document.createElementNS("", "a");
a.href = "#";
a.appendChild(document.createTextNode("Link created without a namespace"));
document.body.appendChild(a);
CSS
Мы объявляем пространство имён с помощью @namespace. Если не указывать имя пространства имён, объявление @namespace создаёт пространство имён по умолчанию.
/* By omitting a name, this sets SVG as the default namespace */
@namespace url("http://www.w3.org/2000/svg");
/* `<a>` in the default (set to SVG) namespace */
a {
font-size: 1.4rem;
}
/* `<svg>` and `<p>` in the default (set to SVG) namespace */
svg,
p {
border: 5px solid gold;
}
/* links outside of any namespace */
|a {
text-decoration: wavy underline purple;
font-weight: bold;
}
/* links with any namespace or no namespace */
*|a {
font-style: italic;
color: magenta;
fill: magenta;
}
Результат
Селектор без разделителя пространства имён, a, выбрал только элементы SVG <a>, поскольку SVG было задано как пространство имён по умолчанию.
Селектор без пространства имён, |a, выбрал добавленный с помощью JavaScript элемент <a>, поскольку этот узел — единственный, у которого нет пространства имён по умолчанию.
Спецификации
| Спецификация |
|---|
| Модуль пространств имён CSS уровня 3 # объявление |
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
namespace |
1 |
12 |
1 |
8 |
3 |
18 |
4 |
14 |
1 |
1.0 |
37 |
1 |
См. также
@namespace-
метод
Document.createElementNS() -
свойство
Element.namespaceURI - Селектор типа CSS
- Универсальный селектор CSS
- Модуль селекторов CSS
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/Namespace_separator