У маски только один обязательный параметр, её ID, с помощью которого она ассоциируется с объектом, к которому применена. Остальные параметры x, y, width и height опциональны.
Маски обладают широкими возможностями для изменения, украшения и анимирования растровыx и векторныx изображений.
Во первых они могут обрезать изображения, по заданной форме как clipPath
Но в отличии от clipPath маска не только вырезает, но и есть у неё возможность оформить оставшуюся часть изображения с помощью непрозрачности. Как в примере выше.
В теги mask можно добавить один или несколько элементов svg: line, circle, ellipse, rect, polyline, polygon, path
Присваивая этим элементам различные цвета заполнения можно получать участки изображения с разной непрозрачностью.
Рассмотрим более подробно пример в начале статьи
Ко всему изображению применён красный цвет маски, что делает его полупрозрачным
<rect width=”100%” height=”100%” fill=”red” />
К эллипсу применен белый цвет маски, поэтому на этом участке цвет остается неизменным от оригинального изображения
<g fill=”white” >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="600" viewBox="0 0 600 600" preserveAspectRatio="xMinYMin meet" > <defs> <mask id="msk1"> <!-- Ко всему изображению применён красный цвет маски, что делает его полупрозрачным --> <rect width="100%" height="100%" fill="red" /> <!-- К эллипсу применен белый цвет маски, поэтому на этом участке цвет остается неизменным от оригинального изображения --> <g fill="white" > <ellipse cx="300" cy="265" rx="185" ry="240" /> </g> </mask> </defs> <!-- К изображению применена маска --> <image xlink:href="Girl600.jpg" width="100%" height="100%" mask="url(#msk1)" /> </svg> |
<rect width=”100%” height=”100%” fill=”white” />
А эллипсы в маске, которые окружают глаза окрасим в чёрный цвет, что сделает маску на этом участке полностью прозрачной и будет виден фон, который расположен под изображением
<ellipse fill=”black”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="600" viewBox="0 0 600 600" preserveAspectRatio="xMinYMin meet" > <defs> <mask id="msk1"> <!-- Ко всему изображению применён белый цвет маски, что сохраняет оригинальный цвет --> <rect width="100%" height="100%" fill="white" /> <!-- К эллипсам применен чёрный цвет маски, поэтому на этих участках оригинальное изображение вырезано и виден фон --> <g fill="black" > <!-- Left eye --> <ellipse cx="365" cy="245" rx="55" ry="45" /> <!-- Right eye --> <ellipse cx="205" cy="245" rx="55" ry="45" /> <path d="m257.4 230.1c13.2 4.3 18.2 13.7 28.8 13.6 10.1-0.1 18.1-10.5 27-13.6-2.7 8.9-2.8 10.5-3 15.9-0.1 2.3-0.1 1 0.7 6.9-10-4-10.5-7-24.6-0.3-15.1 0.3-11.5-9.8-27.3 0.3 0.6-2.6 1.3-4.6 1.3-7 0-5.4-2.2-10.7-2.9-15.9z"/> </g> </mask> </defs> <!-- К изображению применена маска --> <image xlink:href="Girl600.jpg" width="100%" height="100%" mask="url(#msk1)" /> </svg> |
<rect width=”100%” height=”100%” fill=”#111111″ />
Поэтому фон изображения едва заметен.
Глаза (эллипсы) окрасим в белый цвет <ellipse fill=”white”
поэтому на этих участках сохранено оригинальное изображение глаз.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="600" viewBox="0 0 600 600" preserveAspectRatio="xMinYMin meet" > <defs> <mask id="msk1"> <!-- Ко всему изображению применён практически чёрный цвет маски, что делает эту часть изображения едва видной --> <rect width="100%" height="100%" fill="#111111" /> <!-- К эллипсам применен белый цвет маски, поэтому на этих участках сохранено оригинальное изображение глаз --> <g fill="white" > <!-- Left eye --> <ellipse cx="365" cy="245" rx="55" ry="45" /> <!-- Right eye --> <ellipse cx="205" cy="245" rx="55" ry="45" /> <path d="m257.4 230.1c13.2 4.3 18.2 13.7 28.8 13.6 10.1-0.1 18.1-10.5 27-13.6-2.7 8.9-2.8 10.5-3 15.9-0.1 2.3-0.1 1 0.7 6.9-10-4-10.5-7-24.6-0.3-15.1 0.3-11.5-9.8-27.3 0.3 0.6-2.6 1.3-4.6 1.3-7 0-5.4-2.2-10.7-2.9-15.9z"/> </g> </mask> </defs> <!-- К изображению применена маска --> <image xlink:href="Girl600.jpg" width="100%" height="100%" mask="url(#msk1)" /> </svg> |
<rect width=”100%” height=”100%” fill=”red” />
К эллипсу применен белый цвет маски, поэтому на этом участке цвет остается без изменения от оригинального изображения
Добавляется широкая строка к эллипсу, что дает дополнительные возможности оформления в цветовой гамме. Строка разбивается на сегменты командой
stroke-dasharray=”140.2 23″
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<svg id="svg1" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="600" viewBox="0 0 600 600" preserveAspectRatio="xMinYMin meet" > <defs> <mask id="msk1"> <!-- Ко всему изображению применён красный цвет маски, что делает его полупрозрачным --> <rect width="100%" height="100%" fill="red" /> <!-- К эллипсу применен белый цвет маски, поэтому на этом участке цвет остается неизменным от оригинального изображения --> <g fill="white" > <ellipse cx="295" cy="265" rx="260" ry="260" stroke-width="35" stroke="#3AE2CE" stroke-dasharray="140.2 23"> </ellipse> </g> </mask> </defs> <!-- К изображению применена маска --> <image xlink:href="Girl600.jpg" width="100%" height="100%" mask="url(#msk1)" /> </svg> |
<animate attributeName=”stroke-dashoffset” begin=”svg1.click” dur=”10s” values=”1632;0″ repeatCount=”1″ />
Анимация начинается после клика по изображению.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<svg id="svg1" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="600" viewBox="0 0 600 600" preserveAspectRatio="xMinYMin meet" > <defs> <mask id="msk1"> <!-- Ко всему изображению применён красный цвет маски, что делает его полупрозрачным --> <rect width="100%" height="100%" fill="red" /> <!-- К эллипсу применен белый цвет маски, поэтому на этом участке цвет остается неизменным от оригинального изображения --> <g fill="white" > <ellipse cx="295" cy="265" rx="260" ry="260" stroke-width="60" stroke-dasharray="272" stroke="red" > <!-- Анимация вращения строки --> <animate attributeName="stroke-dashoffset" begin="svg1.click" dur="10s" values="1632;0" repeatCount="1" /> </ellipse> </g> </mask> </defs> <!-- К изображению применена маска --> <image xlink:href="Girl600.jpg" width="100%" height="100%" mask="url(#msk1)" /> </svg> |