d
Базовая поддержка Широко доступно *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна в браузерах с июля 2015 года.
* Поддержка некоторых частей этой функции может различаться.
Атрибут d задаёт путь для рисования.
Определение пути представляет собой список команд path, каждая из которых состоит из буквы команды и чисел, задающих её параметры. Подробное описание команд приведено ниже.
Этот атрибут используется с элементом SVG <path>.
d — это атрибут представления, поэтому его также можно использовать как свойство CSS.
Пример
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path
fill="none"
stroke="red"
d="M 10,30
A 20,20 0,0,1 50,30
A 20,20 0,0,1 90,30
Q 90,60 50,90
Q 10,60 10,30 z" />
</svg>
path
Для элемента <path> атрибут d представляет собой строку с последовательностью команд path, определяющих рисуемый путь.
| Значение | <string> |
|---|---|
| Значение по умолчанию | none |
| Анимируемый | Да |
Использование d как свойства CSS
d — это атрибут представления, поэтому его также можно изменять с помощью CSS. Свойство принимает либо path(), либо none.
В примере ниже показано, как задать новый путь при наведении указателя на элемент. Новый путь совпадает со старым, но добавляет линию поперёк сердца.
html,
body,
svg {
height: 100%;
}
/* This path is displayed on hover */
#svg_css_ex1:hover path {
d: path(
"M10,30 A20,20 0,0,1 50,30 A20,20 0,0,1 90,30 Q90,60 50,90 Q10,60 10,30 z M5,5 L90,90"
);
}
<svg id="svg_css_ex1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path
fill="none"
stroke="red"
d="M 10,30
A 20,20 0,0,1 50,30
A 20,20 0,0,1 90,30
Q 90,60 50,90
Q 10,60 10,30 z
" />
</svg>
Пример <path> анимации см. на странице справки о свойстве CSS d.
Команды path
Команды path — это инструкции, задающие рисуемый путь. Каждая команда состоит из буквы команды и чисел, задающих её параметры.
В SVG определено 6 типов команд path, всего — 20 команд:
-
MoveTo:
M,m -
LineTo:
L,l,H,h,V,v -
Кубическая кривая Безье:
C,c,S,s -
Квадратичная кривая Безье:
Q,q,T,t -
Дуга эллипса:
A,a -
ClosePath:
Z,z
Примечание: В командах учитывается регистр. Команда в верхнем регистре задаёт абсолютные координаты, а команда в нижнем регистре — координаты относительно текущей позиции.
В качестве аргумента команды всегда можно указать отрицательное значение:
- отрицательные углы задают вращение против часовой стрелки;
- отрицательные абсолютные значения x и y интерпретируются как отрицательные координаты;
- отрицательные относительные значения x перемещают точку влево, а отрицательные относительные значения y — вверх.
Команды path MoveTo
Инструкции MoveTo можно представить так: инструмент для рисования поднимают и переносят в другое место — иными словами, перемещают текущую точку (Po; {xo, yo}). Между Po и новой текущей точкой (Pn; {xn, yn}) линия не рисуется.
| Команда | Параметры | Примечания |
|---|---|---|
| M | (x, y)+ | Перемещает текущую точку в координаты Формула: Pn = { |
| m | (dx, dy)+ | Перемещает текущую точку, смещая последнее известное положение пути на Формула: Pn = {xo + |
Примеры
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<path
fill="none"
stroke="red"
d="M 10,10 h 10
m 0,10 h 10
m 0,10 h 10
M 40,20 h 10
m 0,10 h 10
m 0,10 h 10
m 0,10 h 10
M 50,50 h 10
m-20,10 h 10
m-20,10 h 10
m-20,10 h 10" />
</svg>
Команды path LineTo
Инструкции LineTo рисуют прямую линию от текущей точки (Po; {xo, yo}) до конечной точки (Pn; {xn, yn}) на основе указанных параметров. Затем конечная точка (Pn) становится текущей точкой для следующей команды (Po′).
| Команда | Параметры | Примечания |
|---|---|---|
| L | (x, y)+ | Рисует линию от текущей точки до конечной точки, заданной координатами Формула: Po′ = Pn = { |
| l | (dx, dy)+ | Рисует линию от текущей точки до конечной точки, которая является текущей точкой, смещённой на Формула: Po′ = Pn = {xo + |
| H | x+ | Рисует горизонтальную линию от текущей точки до конечной точки, заданной параметром Формула: Po′ = Pn = { |
| h | dx+ | Рисует горизонтальную линию от текущей точки до конечной точки, заданной текущей точкой, смещённой на Формула: Po′ = Pn = {xo + |
| V | y+ | Рисует вертикальную линию от текущей точки до конечной точки, заданной параметром Формула: Po′ = Pn = {xo, |
| v | dy+ | Рисует вертикальную линию от текущей точки до конечной точки, заданной текущей точкой, смещённой на Формула: Po′ = Pn = {xo, yo + |
Примеры
<svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
<!-- LineTo commands with absolute coordinates -->
<path
fill="none"
stroke="red"
d="M 10,10
L 90,90
V 10
H 50" />
<!-- LineTo commands with relative coordinates -->
<path
fill="none"
stroke="red"
d="M 110,10
l 80,80
v -80
h -40" />
</svg>
Кубическая кривая Безье
Кубические кривые Безье — это плавные кривые, задаваемые четырьмя точками:
- начальная точка (текущая точка)
-
(Po = {xo, yo})
- конечная точка
-
(Pn = {xn, yn})
- начальная контрольная точка
-
(Pcs = {xcs, ycs}) (задаёт кривизну в начале кривой)
- конечная контрольная точка
-
(Pce = {xce, yce}) (задаёт кривизну в конце кривой)
После рисования конечная точка (Pn) становится текущей точкой для следующей команды (Po′).
| Команда | Параметры | Примечания |
|---|---|---|
| C | (x1,y1, x2,y2, x,y)+ | Рисует кубическую кривую Безье от текущей точки до конечной точки, заданной координатами
|
| c | (dx1,dy1, dx2,dy2, dx,dy)+ | Рисует кубическую кривую Безье от текущей точки до конечной точки, которая является текущей точкой, смещённой на
|
| S | (x2,y2, x,y)+ | Рисует плавную кубическую кривую Безье от текущей точки до конечной точки, заданной координатами x,y. Конечная контрольная точка задаётся координатами x2,y2. Начальная контрольная точка является отражением конечной контрольной точки предыдущей команды кривой относительно текущей точки. Если предыдущая команда не была командой кубической кривой Безье, начальная контрольная точка совпадает с начальной точкой кривой (текущей точкой). Любые последующие пары координат интерпретируются как параметры неявных команд абсолютной плавной кубической кривой Безье (S). |
| s | (dx2,dy2, dx,dy)+ | Рисует плавную кубическую кривую Безье от текущей точки до конечной точки, которая является текущей точкой, смещённой на dx вдоль оси x и на dy вдоль оси y. Конечная контрольная точка — это текущая точка (начальная точка кривой), смещённая на dx2 вдоль оси x и на dy2 вдоль оси y. Начальная контрольная точка является отражением конечной контрольной точки предыдущей команды кривой относительно текущей точки. Если предыдущая команда не была командой кубической кривой Безье, начальная контрольная точка совпадает с начальной точкой кривой (текущей точкой). Любые последующие пары координат интерпретируются как параметры неявных команд относительной плавной кубической кривой Безье (s). |
Примеры
<svg
viewBox="0 0 200 100"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Cubic Bézier curve with absolute coordinates -->
<path
fill="none"
stroke="red"
d="M 10,90
C 30,90 25,10 50,10
S 70,90 90,90" />
<!-- Cubic Bézier curve with relative coordinates -->
<path
fill="none"
stroke="red"
d="M 110,90
c 20,0 15,-80 40,-80
s 20,80 40,80" />
<!-- Highlight the curve vertex and control points -->
<g id="ControlPoints">
<!-- First cubic command control points -->
<line x1="10" y1="90" x2="30" y2="90" stroke="lightgrey" />
<circle cx="30" cy="90" r="1.5" />
<line x1="50" y1="10" x2="25" y2="10" stroke="lightgrey" />
<circle cx="25" cy="10" r="1.5" />
<!-- Second smooth command control points (the first one is implicit) -->
<line
x1="50"
y1="10"
x2="75"
y2="10"
stroke="lightgrey"
stroke-dasharray="2" />
<circle cx="75" cy="10" r="1.5" fill="lightgrey" />
<line x1="90" y1="90" x2="70" y2="90" stroke="lightgrey" />
<circle cx="70" cy="90" r="1.5" />
<!-- curve vertex points -->
<circle cx="10" cy="90" r="1.5" />
<circle cx="50" cy="10" r="1.5" />
<circle cx="90" cy="90" r="1.5" />
</g>
<use href="#ControlPoints" x="100" />
</svg>
Квадратичная кривая Безье
Квадратичные кривые Безье — это плавные кривые, задаваемые тремя точками:
- начальная точка (текущая точка)
-
Po = {xo, yo}
- конечная точка
-
Pn = {xn, yn}
- контрольная точка
-
Pc = {xc, yc} (задаёт кривизну)
После рисования конечная точка (Pn) становится текущей точкой для следующей команды (Po′).
| Команда | Параметры | Примечания |
|---|---|---|
| Q | (x1,y1, x,y)+ | Рисует квадратичную кривую Безье от текущей точки до конечной точки, заданной координатами
|
| q | (dx1,dy1, dx,dy)+ | Рисует квадратичную кривую Безье от текущей точки до конечной точки, которая является текущей точкой, смещённой на
|
| T | (x,y)+ | Рисует плавную квадратичную кривую Безье от текущей точки до конечной точки, заданной координатами
|
| t | (dx,dy)+ | Рисует плавную квадратичную кривую Безье от текущей точки до конечной точки, которая является текущей точкой, смещённой на
|
Примеры
<svg
viewBox="0 0 200 100"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Quadratic Bézier curve with implicit repetition -->
<path
fill="none"
stroke="red"
d="M 10,50
Q 25,25 40,50
t 30,0 30,0 30,0 30,0 30,0" />
<!-- Highlight the curve vertex and control points -->
<g>
<polyline
points="10,50 25,25 40,50"
stroke="rgb(0 0 0 / 20%)"
fill="none" />
<circle cx="25" cy="25" r="1.5" />
<!-- Curve vertex points -->
<circle cx="10" cy="50" r="1.5" />
<circle cx="40" cy="50" r="1.5" />
<g id="SmoothQuadraticDown">
<polyline
points="40,50 55,75 70,50"
stroke="rgb(0 0 0 / 20%)"
stroke-dasharray="2"
fill="none" />
<circle cx="55" cy="75" r="1.5" fill="lightgrey" />
<circle cx="70" cy="50" r="1.5" />
</g>
<g id="SmoothQuadraticUp">
<polyline
points="70,50 85,25 100,50"
stroke="rgb(0 0 0 / 20%)"
stroke-dasharray="2"
fill="none" />
<circle cx="85" cy="25" r="1.5" fill="lightgrey" />
<circle cx="100" cy="50" r="1.5" />
</g>
<use href="#SmoothQuadraticDown" x="60" />
<use href="#SmoothQuadraticUp" x="60" />
<use href="#SmoothQuadraticDown" x="120" />
</g>
</svg>
Дуга эллипса
Дуги эллипса — это кривые, представляющие собой часть эллипса. Иногда с помощью дуги эллипса проще нарисовать кривые правильной формы, чем с помощью кривой Безье.
| Команда | Параметры | Примечания |
|---|---|---|
| A | (rx ry angle large-arc-flag sweep-flag x y)+ | Рисует дугу от текущей точки до координат
x,y становятся новой текущей точкой для следующей команды. Все последующие наборы параметров считаются неявными командами абсолютной дуги (A). |
| a | (rx ry angle large-arc-flag sweep-flag dx dy)+ | Рисует дугу от текущей точки до точки, координаты которой получены смещением текущей точки на
dx и dy. Все последующие наборы параметров считаются неявными командами относительной дуги (a). |
Примеры
<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<!-- The influence of the arc flags with which the arc is drawn -->
<path
fill="none"
stroke="red"
d="M 6,10
A 6 4 10 1 0 14,10" />
<path
fill="none"
stroke="lime"
d="M 6,10
A 6 4 10 1 1 14,10" />
<path
fill="none"
stroke="purple"
d="M 6,10
A 6 4 10 0 1 14,10" />
<path
fill="none"
stroke="pink"
d="M 6,10
A 6 4 10 0 0 14,10" />
</svg>
ClosePath
Инструкции ClosePath рисуют прямую линию от текущей позиции до первой точки пути.
| Команда | Параметры | Примечания |
|---|---|---|
| Z, z | Замыкает текущий подпуть, соединяя последнюю точку пути с его начальной точкой. Если координаты этих точек различаются, между ними рисуется прямая линия. |
Примечание: Внешний вид фигуры, замкнутой с помощью ClosePath, может отличаться от фигуры, замкнутой рисованием линии до начала пути с помощью другой команды: концы линии соединяются (в соответствии с настройкой stroke-linejoin), а не просто располагаются в одних и тех же координатах.
Примеры
<svg viewBox="0 -1 30 11" xmlns="http://www.w3.org/2000/svg">
<!--
An open shape with the last point of
the path different to the first one
-->
<path
stroke="red"
d="M 5,1
l -4,8 8,0" />
<!--
An open shape with the last point of
the path matching the first one
-->
<path
stroke="red"
d="M 15,1
l -4,8 8,0 -4,-8" />
<!--
A closed shape with the last point of
the path different to the first one
-->
<path
stroke="red"
d="M 25,1
l -4,8 8,0
z" />
</svg>
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
d |
1 | 12 | 1.5 | 8 | 3 | 18 | 4 | 14 | 3 | 1.0 | 3 | 3 |
path |
52 | 79 | 97 | 60 | Нет | 52 | 97 | 51 | Нет | 6.0 | 52 | Нет |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/d