d
Атрибут d определяет путь, который нужно нарисовать.
Определение пути представляет собой список команд пути, где каждая команда состоит из буквы команды и чисел, представляющих параметры команды. Команды подробно описаны ниже.
Этот атрибут используется с элементом 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>
путь
Использование 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.
Команды пути
Команды пути — это инструкции, которые определяют путь для рисования. Каждая команда состоит из буквы команды и чисел, представляющих параметры команды.
SVG определяет 6 типов команд пути, всего 20 команд:
-
MoveTo:
M,m -
LineTo:
L,l,H,h,V,v -
Кубическая кривая Безье:
C,c,S,s -
Квадратичная кривая Безье:
Q,q,T,t -
Эллиптическая дуга:
A,a -
Закрыть путь:
Z,z
Примечание: Команды чувствительны к регистру. Команда с большой буквы указывает абсолютные координаты, а команда с маленькой буквы — координаты относительно текущей позиции.
Всегда можно указать отрицательное значение в качестве аргумента команды:
- отрицательные углы будут против часовой стрелки;
- отрицательные значения x и y (абсолютные) интерпретируются как отрицательные координаты;
- отрицательные значения x (относительные) смещают влево, а отрицательные значения y (относительные) смещают вверх.
Команды пути 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>
Команды пути 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 по осям X и Y для следующей команды. Все последующие наборы параметров интерпретируются как неявные относительные команды дуги кривой (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 | |
d |
1 | 12 | 1.5 | 8 | 3 | 18 | 4 | 14 | 3 | 1.0 | 3 |
path |
52 | 79 | 97 | 60 | Нет | 52 | 97 | 51 | Нет | 6.0 | 52 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d