Эффекты искажения кнопок с помощью фильтров

CSS3-фильтры воспроизводят в браузере визуальные эффекты, похожие на фильтры Photoshop. Фильтры можно добавлять не только к изображениям, но и к любым непустым элементам.

Набор фильтров не ограничивается предустановленным в браузере. Вы также можете использовать фильтры SVG, загрузив их по ссылке вместе с элементом svg.

Изначально фильтры были созданы как часть спецификации SVG. Их задачей было применение эффектов, основанных на пиксельной сетке к векторной графике. С поддержкой SVG браузерами появилась возможность использовать эти эффекты непосредственно в браузерах.

Браузеры обрабатывают страницу попиксельно применяя заданные эффекты и отрисовывают результат поверх оригинала. Таким образом, применяя несколько фильтров можно достигать различных эффектов, они как бы накладываются друг на друга. Чем больше фильтров, тем больше времени требуется браузеру, чтобы отрисовать страницу.

Можно применять несколько фильтров одновременно. Классический способ применения таких эффектов — при наведении на элемент:hover .

Поддержка браузерами

IE: не поддерживает
Edge: 13.0 кроме url()
Firefox: 35.0
Chrome: 18.0 -webkit-
Safari: 9.1, 6.0 -webkit-
Opera: 40.0, 15.0 -webkit-
iOS Safari: 9.3, 6.1 -webkit-
Android Browser: 53.0, 4.4 -webkit-
Chrome for Android: 55.0, 47.0 -webkit-

filter
blur() Значение задается в единицах длины, например px , em . Применяет размытие по Гауссу к исходному изображению. Чем больше значение радиуса, тем больше размытие. Если значение радиуса не задано, по умолчанию берется 0 .
Синтаксис
filter: blur(3px);
brightness() Значение задается в % или в десятичных дробях. Изменяет яркость изображения. Чем больше значение, тем ярче изображение. Значение по умолчанию 1 .
Синтаксис
filter: brightness(50%);
filter: brightness(.5);
contrast() Значение задается в % или в десятичных дробях. Регулирует контрастность изображения, т.е. разницу между самыми темными и самыми светлыми участками изображения/фона. Значение по умолчанию 100% . Нулевое значение скроет исходное изображение под темно-серым фоном. Значения, увеличивающиеся от 0 до 100% или от 0 до 1 , будут постепенно открывать исходное изображение до оригинального отображения, а значения свыше будут увеличивать контраст между светлыми и темными участками.
Синтаксис
filter: contrast(20%);
filter: contrast(.2);
drop-shadow() Фильтр действует подобно свойствам box-shadow и text-shadow . Использует следующие значения: смещение по оси Х смещение по оси Y размытость растяжение цвет тени. Отличительная особенность фильтра заключается в том, что тень добавляется к элементам и его содержимому с учетом их прозрачности, т.е. если элемент содержит текст внутри, то фильтр добавит тень одновременно для текста и видимых границ блока. В отличие от других фильтров, для этого фильтра обязательно задание параметров (минимальное - величина смещения).
Синтаксис
filter: drop-shadow(2px 3px 5px black);
grayscale() Извлекает все цвета из картинки, делая на выходе черно-белое изображение. Значение задается в % или десятичных дробях. Чем больше значение, тем сильнее эффект.
Синтаксис
filter: grayscale(.5);
filter: grayscale(50%);
hue-rotate() Меняет цвета изображения в зависимости от заданного угла поворота в цветовом круге. Значение задается в градусах от 0deg до 360deg . 0deg - значение по умолчанию, означает отсутствие эффекта.
Синтаксис
filter: hue-rotate(180deg);
invert() Фильтр делает негатив изображения. Значение задается в % . 0% не применяет фильтр, 100% полностью преобразует цвета.
Синтаксис
filter: invert(100%);
opacity() Фильтр работает аналогично со свойством opacity , добавляя прозрачность элементу. Отличительная особенность - браузеры обеспечивают аппаратное ускорение для фильтра, что позволяет повысить производительность. Дополнительный бонус - фильтр можно одновременно сочетать с другими фильтрами, создавая при этом интересные эффекты. Значение задается только в % , 0% делает элемент полностью прозрачным, а 100% не оказывает никакого эффекта.
Синтаксис
filter: opacity(30%);
saturate() Управляет насыщенностью цветов, работая по принципу контрастного фильтра. Значение 0% убирает цветность, а 100% не оказывает никакого эффекта. Значения от 0% до 100% уменьшают насыщенность цвета, выше 100% - увеличивают насыщенность цвета. Значение может задаваться как в % , так и целым числом, 1 эквивалентно 100% .
Синтаксис
filter: saturate(300%);
sepia() Эффект, имитирующий старину и «ретро». Значение 0% не изменяет внешний вид элемента, а 100% полностью воспроизводит эффект сепии.
Синтаксис
filter: sepia(150%);
url() Функция принимает расположение внешнего XML-файла с svg-фильтром, или якорь к фильтру, находящемся в текущем документе.
Синтаксис
filter: url(#filterId); /* если фильтр находится в этом документе */
filter: url(filter.svg#filterId); /* если фильтр с id="filterId" находится в файле filter.svg*/
none Значение по умолчанию. Означает отсутствие эффекта.
initial Устанавливает это свойство в значение по умолчанию.
inherit Наследует значение свойства от родительского элемента.

SVG uses element to define filters. element uses an id attribute to uniquely identify it.Filters are defined within elements and then are referenced by graphics elements by their ids.

SVG provides a rich set of filters. Following is the list of the commonly used filters.

  • feBlend
  • feColorMatrix
  • feComponentTransfer
  • feComposite
  • feConvolveMatrix
  • feDiffuseLighting
  • feDisplacementMap
  • feFlood
  • feGaussianBlur
  • feImage
  • feMerge
  • feMorphology
  • feOffset - filter for drop shadows
  • feSpecularLighting
  • feTile
  • feTurbulence
  • feDistantLight
  • fePointLight
  • feSpotLight

Declaration

Following is the syntax declaration of element. We"ve shown main attributes only.

Attributes

Sr.No. Name & Description
1 filterUnits
2 primitiveUnits − units to define filter effect region. It specifies the coordinate system for the various length values within the filter and for the attributes defining the filter subregion. If filterUnits="userSpaceOnUse", values represent values in the current user coordinate system in place at the time when the "filter" element is used. If filterUnits="objectBoundingBox", values represent values in fractions or percentages of the bounding box on the referencing element in place at the time when the "filter" element is used. Default is userSpaceOnUse.
3 x − x-axis co-ordinate of the filter bounding box. Defeault is 0.
4 y − y-axis co-ordinate of the filter bounding box. Default is 0.
5 width − width of the filter bounding box. Default is 0.
6 height − height of the filter bounding box. Default is 0.
7 filterRes − numbers representing filter regions.
8 xlink:href − used to refer to another filter.

Example

testSVG.htm SVG Filter

Sample SVG Filter

Using Filters (Blur Effect):

    Two elements defined as filter1 and filter2.

    feGaussianBlur filter effect defines the blur effect with the amount of blur using stdDeviation.

    in="SourceGraphic" defines that the effect is applicable for the entire element.

    feOffset filter effect is used to create shadow effect. in="SourceAlpha" defines that the effect is applicable for the alpha part of RGBA graphics.

    elements linked the filters using filter attribute.

Output

Filter with Shadow effect

SVG Filter

Sample SVG Filter

Using Filters (Shadow Effect):

Output

Open textSVG.htm in Chrome web browser. You can use Chrome/Firefox/Opera to view SVG image directly without any plugin. Internet Explorer 9 and higher also supports SVG image rendering.

От автора: экспериментальный эффект искривления кнопок при помощи фильтров SVG. С помощью SVG фильтров можно придавать кнопкам интерактивности при нажатии. Именно про это мы сегодня и расскажем. Основная идея заключается в применении эффекта искривления или эффекта жидкости к кнопке и поиск возможного применения данной технологии.

Внимание: Пока что технология является экспериментальной и лучше всего работает в Google Chrome и Firefox. Давайте более подробно разберем эту методику.

Создаем кнопку

Для начала создадим простую кнопку:

< button class = "button" > Click me < / button >

С базовыми стилями кнопка будет выглядеть примерно так:

Теперь создадим фильтр внутри SVG объекта, который мы поместим в HTML:

< svg xmlns = "http://www.w3.org/2000/svg" version = "1.1" class = "svg-filters" >

< defs >

< filter id = "filter" >

< feTurbulence type = "fractalNoise" baseFrequency = "0 0.15" numOctaves = "1" result = "warp" / >

< feDisplacementMap xChannelSelector = "R" yChannelSelector = "G" scale = "30" in = "SourceGraphic" in2 = "warp" / >

< / filter >

< / defs >

< / svg >

И применяем только что созданный фильтр к кнопке следующим образом:

Button { /* остальные стили */ -webkit-filter: url("#filter"); filter: url("/#filter"); }

Слэш во втором объявлении крайне важен, он нужен для работы фильтра в Firefox.

Принцип работы фильтра

SVG фильтр содержит в себе список примитивов. Более подробно об этом можно прочесть в статье Лукаса . Нам в частности интересен примитив .

Эффект карты смещения сдвигает пиксели элемента, к которому применен фильтр на основе предоставленных значений. можно применить к любому DOM элементу, например изображению, градиенту или другому SVG фильтру. Для нашей кнопки мы будем использовать SVG элемент .

— примитив, генерирующий «шум» (по алгоритму шума Перлина). Что будет, если применить этот шум к нашей кнопке:

Тут огромную роль играет свойство . С его помощью генерируется сам шум. Свойство принимает два параметра, которые отвечают за эффект по Х и У координатам. Поиграйтесь с ползунками, чтобы понять принцип:

Теперь применим фильтра и посмотрим, что произойдет:

Тут важное свойство – scale – с его помощью задается сила эффекта.

Также нужно указать источники для нашего фильтра: все фильтры принимают два источника с помощью свойств in и in2. Первый источник будет SourceGraphic (HTML элемент, к которому применяется фильр) и вторым источником будет наш первый фильтр (мы назвали его шумом).

Теперь наша карта смещения знает, что нужно двигать пиксели элемента SourceGraphic на основе сгенерированного шума .

С помощью свойсвт xChannelSelector и yChannelSelector задается цвет смещения пикселей (R, G или B) для каждой оси.
Осталось анимировать эти свойства при помощи JS (мы используем библиотеку анимации Greensock):

С фильтром можно экспериментировать, его можно применить к любому HTML Элементу. В демо ниже мы применили его к области textarea:

Много скрытых возможностей

С помощью SVG фильтров мы можем с легкостью применять к веб-элементам сложные алгоритмы наподобие карты смещения. Все сложная работа выполняется SVG фильтром, а мы лишь применяем этот фильтр и анимируем различные параметры.

Ну вот и все! Большинство эффектов в демо работают по описанному нами принципу.

Находите новые идеи в демо. Помните, что SVG фильтры применимы к любым HTML элементам, т.е. существует масса возможностей. Все зависит только от вашего воображения. Но используйте данный эффект аккуратно, он требует много ресурсов. Не применяйте эффект к большим объектам.

Обратите внимание на то, что поддержка CSS фильтров отличается в зависимости от браузера, и эффекты могут слегка различаться. Так что всегда добавляйте фолбэк.

Надеемся вам понравился эффект, и статья оказалась полезной для вас». Наш проект на

Все больше разработчиков используют SVG, что заставляет развивать данное направление. В данном уроке мы рассмотрим замечательный прием с применением фильтром основанных на SVG. Такой прием мы подключим к кнопкам. Основная идея заключается в применении эффекта искажения или эффекта жидкости к кнопке. Также мы рассмотрим возможное применения данной технологии в других элементах. Обратите внимание, что данный эффект экспериментальный, по этому может работать не во всех браузерах.

Много различным бесплатных шаблонов вы можете найти на сайте наших партнеров, также имеются и премиум шаблоны с круглосуточной техподдержкой и помощью в настройке:

Обратите внимание на то, что поддержка CSS фильтров отличается в зависимости от браузера, и эффекты могут слегка различаться. Так что всегда добавляйте fallback. Давайте приступим.

Шаг 1. HTML

Для начала нам необходимо создать основу для демонстрации, начнем мы с самого простого. Давайте создадим простую кнопку и установим для нее класс button.

< button class = "button" > Кнопка< / button >

Когда мы установили базовые стили, то отображение стандартной кнопки у нас будет примерно такого плана:

Теперь создадим фильтр внутри SVG объекта, который мы поместили в HTML:

< svg xmlns = "http://www.w3.org/2000/svg" version = "1.1" class = "svg-filters" >

< defs >

< filter id = "filter" >

< feTurbulence type = "fractalNoise" baseFrequency = "0 0.15" numOctaves = "1" result = "warp" / >

< feDisplacementMap xChannelSelector = "R" yChannelSelector = "G" scale = "30" in = "SourceGraphic" in2 = "warp" / >

< / filter >

< / defs >

< / svg >

Затем применим только что созданный фильтр к кнопке следующим образом:

Обратите внимание, что сплэш, во втором варианте фильтра, крайне важен, он нужен для работы фильтра в Firefox.

Принцип работы фильтра

SVG фильтр содержит в себе список примитивов. Нам в частности интересен примитив .

Эффект карты смещения сдвигает пиксели элемента, к которому применен фильтр на основе предоставленных значений. можно применить к любому DOM элементу, например изображению, градиенту или другому SVG фильтру. Для нашей кнопки мы будем использовать SVG элемент .

- примитив, генерирующий «шум» (по алгоритму шума Перлина). Что будет, если применить этот шум к нашей кнопке:

Тут огромную роль играет свойство . С его помощью генерируется сам шум. Свойство принимает два параметра, которые отвечают за эффект по Х и У координатам.

Также нужно указать источники для нашего фильтра: все фильтры принимают два источника с помощью свойств in и in2 . Первый источник будет SourceGraphic (HTML элемент, к которому применяется фильр) и вторым источником будет наш первый фильтр (мы назвали его шумом).

Теперь наша карта смещения знает, что нужно двигать пиксели элемента SourceGraphic на основе сгенерированного шума .

С помощью свойств xChannelSelector и yChannelSelector задается цвет смещения пикселей (R, G или B) для каждой оси. Осталось анимировать эти свойства при помощи JS (мы используем библиотеку анимации Greensock ).

С помощью SVG фильтров мы можем с легкостью применять к веб-элементам сложные алгоритмы наподобие карты смещения. Все сложная работа выполняется SVG фильтром, а мы лишь применяем этот фильтр и анимируем различные параметры.

Ну вот и все! Большинство эффектов в демо работают по описанному нами принципу.

Находите новые идеи в демо. Помните, что SVG фильтры применимы к любым HTML элементам, т.е. существует масса возможностей. Все зависит только от вашего воображения. Но используйте данный эффект аккуратно, он требует много ресурсов. Не применяйте эффект к большим объектам.

Specifications

Specification Status Comment
Filter Effects Module Level 1
The definition of "" in that specification.
Working Draft
Scalable Vector Graphics (SVG) 1.1 (Second Edition)
The definition of "" in that specification.
Recommendation Initial definition

Browser compatibility

The compatibility table on this page is generated from structured data. If you"d like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Edge Mobile Firefox for Android Opera for Android Safari on iOS Samsung Internet
filter Chrome Full support 1 Edge Full support Yes Firefox Full support 4 IE Full support 10 Opera Full support 9 Safari Full support 3 WebView Android Full support Yes Chrome Android Full support 18 Edge Mobile Full support Yes Firefox Android ? Opera Android Full support 9.5 Safari iOS Full support 3 Samsung Internet Android ?
filterRes Chrome ? Edge ? Firefox ? IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
filterUnits Chrome ? Edge ? Firefox ? IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
height Chrome ? Edge ? Firefox ? IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
primitiveUnits Chrome ? Edge ? Firefox ? IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
width Chrome ? Edge ? Firefox ? IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
x Chrome ? Edge ? Firefox ? IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
xlink:href

Deprecated

Chrome ? Edge ? Firefox ? IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
y Chrome ? Edge ? Firefox ? IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?

Legend

Full support Full support Compatibility unknown Compatibility unknown Deprecated. Not for use in new websites.

See also

  • SVG filter primitive composes two objects together ruled by a certain blending mode. This is similar to what is known from image editing software when blending two layers. The mode is defined by the mode attribute.">
  • SVG filter element changes colors based on a transformation matrix. Every pixel" s color value by an vector is matrix multiplied to create a new color:>
  • SVG filter primitive performs color-component-wise remapping of data for each pixel. It allows operations like brightness adjustment, contrast adjustment, color balance or thresholding.">
  • SVG filter primitive performs the combination of two input images pixel-wise in image space using one of the Porter-Duff compositing operations: over, in, atop, out, xor, and lighter. Additionally, a component-wise arithmetic operation (with the result clamped between ) can be applied.">
  • SVG filter primitive applies a matrix convolution filter effect. A convolution combines pixels in the input image with neighboring pixels to produce a resulting image. A wide variety of imaging operations can be achieved through convolutions, including blurring, edge detection, sharpening, embossing and beveling.">
  • SVG element allows filter effects to be applied concurrently instead of sequentially. This is achieved by other filters storing their output via the result attribute and then accessing it in a child.">
  • SVG filter primitive is used to erode or dilate the input image. It" s usefulness lies especially in fattening or thinning effects.>
  • SVG filter primitive allows to offset the input image. The input image as a whole is offset by the values specified in the dx and dy attributes.">
  • SVG filter primitive lights a source graphic using the alpha channel as a bump map. The resulting image is an RGBA image based on the light color. The lighting calculation follows the standard specular component of the Phong lighting model. The resulting image depends on the light color, light position and surface geometry of the input bump map. The result of the lighting calculation is added. The filter primitive assumes that the viewer is at infinity in the z direction.">
  • SVG filter primitive allows to fill a target rectangle with a repeated, tiled pattern of an input image. The effect is similar to the one of a .">
  • SVG filter primitive creates an image using the Perlin turbulence function. It allows the synthesis of artificial textures like clouds or marble. The resulting image will fill the entire filter primitive subregion.">
  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то