Размытие css: blur() | CSS | WebReference
Размытие фона средствами CSS
В CSS3 есть множество новых свойств, которые могут значительно ускорить вёрстку тех или иных элементов страницы. Например, css-фильтры, об одном из которых сегодня предлагается поговорить.
Каждый из нас хотя бы раз имел возможность наблюдать эффект размытия на
странице. Зачастую для его создания используется jQuery-библиотека bjurjs
. Однако, не на всех сайтах целесообразно использовать jQuery, да и
технологии не стоят на месте: теперь мы можем воспользоваться решением на чистом CSS. Попробуем?
Пример простейшей разметки:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Blur</title>
<link href="style.css" rel="stylesheet"/>
</head>
<body>
<main>
<div></div>
<div>
<h3>Welcome to our website!</h3>
</div>
</main>
</body>
</html>
Итак, задан родительский div с классом
, служащий контейнером для двух
вложенных div’ов: inner-wrapper
будет содержать текст приветствия, а blur
—
изображение, к которому нужно применить эффект размытия.
Обратимся к стилям.
.wrapper {
position: relative;
width: 500px;
height: 500px;
margin: 0 auto;
}
.inner-wrapper,
.blur {
position: absolute;
width: 500px;
height: 300px;
left: 0;
top: 0;
bottom: 0;
right: 0;
}
Как можно видеть, дочерние блоки абсолютно позиционированы и находятся на
одном уровне. Дело в том, что эффект размытия будет применяться и к тексту
приветствия, чего нам хотелось бы избежать. Поэтому лучше управлять положением
блоков относительно друг друга при помощи
. Сделаем это, а также
зададим необходимый бэкгрануд для .blur
:
.inner-wrapper {
z-index: 100;
color: #fff;
text-align: center;
text-shadow: 0 0 5px rgba(0,0,0,.5);
}
.blur {
z-index: 99;
background-image: url(image.png);
background-size: cover;
background-repeat: no-repeat;
}
На данный момент получаем простейшую страничку с картинкой и текстом:
Настало время применить магию! Увы, firefox пока не поддерживает css-фильтры, поэтому в дело пойдёт небольшой трюк: нужно «скормить» ему svg-файл со следующим содержимым:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<filter>
<feGaussianBlur stdDeviation="5"/>
</filter>
</svg>
и указать путь к этому файлу, а также обратиться к нужному фильтру. В нашем случае фильтр
всего один: тот, что определён под id blur
. Вот как должен быть преобразован
css-код для получения эффекта размытия:
.inner-wrapper { z-index: 100; color: #fff; text-align: center; text-shadow: 0 0 5px rgba(0,0,0,.5); } .blur { z-index: 99; background-image: url(image.png); background-size: cover; background-repeat: no-repeat; -webkit-filter: blur(5px); -moz-filter: blur(5px); filter: blur(5px); filter: url('blur.svg#blur'); }
А вот и итоговый вариант с применением эффекта размытия:
Единственный недостаток: нечёткие границы размытия, которые выходят за пределы
родительского элемента. Часто такой побочный эффект может быть
нежелательным. Ну, что ж, можно поиграть с радиусом размытия или применить overflow: hidden
.
CSS3 фильтры: изменяем изображения используя стили
CSS3 фильтры являются весьма интересным ответвлением от SVG, позволяющим изменять HTML-элементы и изображения, применяя фильтры размытия, яркости и многие другие. В этом уроке мы кратко рассмотрим, как именно они работают.
Как это работает?
Используя только CSS мы можем создавать некоторые довольно сложные эффекты. Они могут быть применены как к изображениям, так и к HTML-элементам. Свойство, которое используется для управления всеми этими эффектами — это filter.
filter: filter(value);
Как и следовало ожидать, для этого свойства требуется использование префикса браузера. Но на данный момент, только -webkit- (Chrome и Safari) является единственным движком браузеров, поддерживающим это свойство.
-webkit-filter: filter(value);
-moz-filter: filter(value);
-o-filter: filter(value);
-ms-filter: filter(value);
Фильтрация
Существует целый ряд фильтров, поэтому, чтобы получить более полное представление о каждом из них, давайте рассмотрим их по отдельности. Несколько фильтров могут быть применены к одному элементу (через пробел), например,
filter: blur(5px) brightness(0.5);
Есть несколько фильтров, которые не будут рассмотрены ниже, но их можно легко реализовать с уже существующими CSS (прозрачность и тени). Вот оригинальное изображение, которое мы будем использовать для демонстрации работы фильтров:
Я буду приводить фото c применением фильтра (первое фото) и результат работы фильтра в виде статичного изображения (второе фото), если вы используете браузер, который не поддерживает фильтры и не можете увидеть результат.
Размытие
Всегда хотели сделать гауссовское размытие для изображения или текста только при помощи одного CSS? С фильтрами вы это сможете! Размытие измеряется в пикселях, так что вы можете сделать что-то вроде этого:
filter: blur(5px);
// Browser Specific
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
Яркость
Яркость измеряется от нуля до единицы, 1 — это полная яркость (белый цвет), а 0 — первоначальная яркость.
filter: brightness(0.2);
// Browser Specific
-webkit-filter: brightness(0.2);
-moz-filter: brightness(0.2);
-o-filter: brightness(0.2);
-ms-filter: brightness(0.2);
Насыщенность
Насыщенность измеряется в процентах.
filter: saturate(50%);
// Browser Specific
-webkit-filter: saturate(50%);
-moz-filter: saturate(50%);
-o-filter: saturate(50%);
-ms-filter: saturate(50%);
Поворот тона
Этот фильтр позволяет Вам изменять тон, повернув его (представьте себе колесо цветов, которые вы затем поворачиваете). Он измеряется в градусах.
filter: hue-rotate(20deg);
// Browser Specific
-webkit-filter: hue-rotate(20deg);
-moz-filter: hue-rotate(20deg);
-o-filter: hue-rotate(20deg);
-ms-filter: hue-rotate(20deg);
Контрастность
Констрастность, опять же, измеряется в процентах. 100% является значением по умолчанию, 0% позволит создать полностью черное изображение. Все, что более 100% добавляет контраст!
filter: contrast(150%);
// Browser Specific
-webkit-filter: contrast(150%);
-moz-filter: contrast(150%);
-o-filter: contrast(150%);
-ms-filter: contrast(150%);
Инверсия
Также измеряется в процентах. Доступны значения от 0% до 100%. Как ни странно, на данный момент, webkit не поддерживает инверсии, если они меньше, чем 100%.
filter: invert(100%);
// Browser Specific
-webkit-filter: invert(100%);
-moz-filter: invert(100%);
-o-filter: invert(100%);
-ms-filter: invert(100%);
Обесцвечивание
Опять же, указываете значение в процентах, на которое вы хотите обесцветить изображение. Доступны значения от 0% до 100%.
filter: grayscale(100%);
// Browser Specific
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-o-filter: grayscale(100%);
-ms-filter: grayscale(100%);
Сепия
Я полагаю, это очень полезно, если вы хотите опубликовать что-то в Instagram. Хотя я также полагаю, вы не будете использовать CSS для этого. Во всяком случае, подобные оттенки серого и негатива, в сумме, позволят вам добавить сепию к изображению. 100% — это будет завершенная сепия, 0% — исходное изображение.
filter: sepia(100%);
// Browser Specific
-webkit-filter: sepia(100%);
-o-filter: sepia(100%);
-ms-filter: sepia(100%);
Поддержка браузерами
Webkit | Mozilla | Trident | Presto | |
Размытие | Экспериментальная | Нет | Нет | Нет |
Яркость | ||||
Насыщенность | ||||
Поворот тонов | ||||
Контрастность | ||||
Инверсия | Только полная инверсия |
|||
Обесцвечивание | Экспериментальная | |||
Sepia |
Перевод статьи с www.inserthtml.com
Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом
Создание эффектов размытого текста с использованием CSS3
В этом уроке мы расскажем об интересном эффекте для текста. Размытый текст можно создать с помощью CSS3, применяя прозрачный цвет текста и тень текста. Сегодня вы узнаете как это сделать и сможете попробовать эффект в собственных работах.
.blur-text { color: transparent; text-shadow: 0 0 5px #000; }
К сожалению, не все старые версии браузеров поддерживают свойство тени текста. Браузер Internet Explorer версий 9 и ниже применяет свойство прозрачного цвета текста, но не создает эффект тени, так что текст становится невидимым. И нужно или прибегать к помощи библиотеки JavaScript Modernizr, или писать свой код для определения поддержки браузером свойства тени текста.
Если браузер поддерживает это свойство, следующий код JavaScript добавит класс “.textshadow” элементу HTML. Таким образом можно задавать свойства CSS классам .textshadow .blur-text, чтобы они применились, только если эффект размытого текста не вызовет проблем с отображением:
if (document.createElement("detect").style.textShadow === "") { document.getElementsByTagName("html")[0].className += " textshadow"; }
Браузеры Chrome и Firefox всех версий выводят размытый текст.
А у браузера Opera некоторых старых версий есть особенность — он поддерживает свойство тени текста, но не применяет его к прозрачному тексту. Вероятно, это ошибка браузера, так как применение цвета в формате rgba(0,0,0,0) решает проблему.
Браузер Internet Explorer поддерживает свойство тени текста, только начиная с версии 10. При этом и у поддерживающих версий встречаются проблемы с отображением.
Размытые ссылки
Используя возможности CSS3, можно создать эффект плавного появления или исчезания размытия у ссылок при наведении указателя мыши или при выделении. Это можно использовать как необычный эффект для меню.
Мы создадим класс “blur” или класс “blur in”, который можно применить к любой ссылке. Ссылка изначально будет размытой и вернется к нормальному состоянию, когда станет активной. Подобным образом зададим класс “blur out”, который сделает ссылку размытой при наведении указателя мыши или при выделении, например:
<a href="#">starts blurred, ends un-blurred</a> <a href="#">starts un-blurred, ends blurred</a>
Теперь нужны основные свойства CSS, которые применяются во всех браузерах, даже тех, которые не поддерживают свойство тени текста:
a.blur { text-decoration: none; color: #339; } a.blur:hover, a.blur:focus { text-decoration: underline; color: #933; }
Следующие свойства применятся ко всем элементам класса .blur, как выделенным, так и неактивным:
- удаляются подчеркивание и рамка у ссылки
- задается прозрачный цвет текста
- применяются переходы CSS3, которые создадут плавную анимацию от состояния без тени текста до полной тени текста. Эффект начнется через 100ms и закончится через 400ms.
.textshadow a.blur, .textshadow a.blur:hover, .textshadow a.blur:focus { text-decoration: none; color: rgba(0,0,0,0); outline: 0 none; -webkit-transition: 400ms ease 100ms; -moz-transition: 400ms ease 100ms; transition: 400ms ease 100ms; }
После этого мы определяем оба состояния тени текста. Третье значение свойства тени текста устанавливает степень размытия. В нашем примере анимация начнется с 0 и закончится на 4px, но эти значения можно менять, если нужно больше или меньше размытия:
/* без размытия */ .textshadow a.blur.out, .textshadow a.blur:hover, .textshadow a.blur:focus { text-shadow: 0 0 0 #339; } /* полное размытие */ .textshadow a.blur, .textshadow a.blur.out:hover, .textshadow a.blur.out:focus { text-shadow: 0 0 4px #339; }
Посмотрите демонстрацию работы размытия ссылок.
Надеемся, Вам пригодится эта информация, но при использовании этого эффекта не забывайте об особенностях отображения и поддержки разных браузеров.
Автор урока Craig Buckler
Перевод — Дежурка
Смотрите также:
CSS-эффекты фильтра: размытие, оттенки серого, яркость и многое другое в CSS!
Пример возможностей эффекта CSS-фильтра в этой статье!
Фильтры изначально были частью спецификации SVG. Однако, когда их полезность стала очевидной, W3C начал работать над добавлением некоторых общих эффектов фильтра в CSS. CSS-фильтры довольно мощные и невероятно простые в использовании. Вы можете использовать их, чтобы размыть, осветлить или насытить изображения среди других вещей. Их можно использовать отдельно или в сочетании с другими фильтрами. Вам необходимо использовать следующий синтаксис для применения фильтров в CSS:
filter: <filter-function> [<filter-function>]* | none
Теперь давайте кратко рассмотрим все эти фильтры.
яркость
Этот фильтр контролирует яркость ваших изображений. В качестве параметра он принимает значения, большие или равные нулю. Значение 0% даст вам абсолютно черный вывод. Точно так же значение 100% даст вам исходное изображение. Вы можете указать значения больше 100%, чтобы получить еще более яркие изображения. Например, значение 300% сделает изображение в 3 раза ярче:
img { filter: brightness(300%); }
Вот CodePen с CSS-фильтром яркости в действии:
Контраст
Этот фильтр контролирует контрастность ваших изображений. Как и фильтр яркости, он также принимает значения, большие или равные нулю. Этот фильтр контролирует разницу между темными и светлыми частями изображения в CSS. Следовательно, значение 0% приводит к серому изображению. Установка контрастности на 100% дает исходное изображение и любое другое значение, которое еще больше увеличивает контраст изображения:
img { filter: contrast(0%); }
Вот CodePen с контрастным CSS-фильтром в действии:
Оттенки серого
Как видно из названия, этот фильтр может помочь вам сделать изображения в градациях серого. Этот фильтр постепенно преобразует все цвета в наших изображениях в оттенки серого. Значение 0% не повлияет на наши изображения, а значение 100% превратит их в полутоновые. Отрицательные значения не допускаются.
img { filter: grayscale(100%); }
Вот CodePen с CSS-фильтром в градациях серого в действии:
Насыщение
Этот фильтр контролирует насыщенность цветов в ваших изображениях. Значение 0% полностью удалит все цвета с изображения, а значение более 100% сделает изображение перенасыщенным. На 100%, конечный результат выглядит так же, как оригинальное изображение. Отрицательные значения не допускаются для этого фильтра.
img { filter: saturate(0%); }
Вот CodePen с насыщенным CSS-фильтром в действии:
Сепия
Этот фильтр добавляет оттенки сепии к вашим изображениям, как некоторые старые фотографии. Количество добавленных сепии зависит от процента. При 0% конечный результат выглядит как исходное изображение, а при 100% изображение будет полностью сепийным.
img { filter: sepia(100%); }
Вот CodePen с CSS-фильтром сепии в действии:
Оттенок поворот
Этот фильтр применяет вращение оттенка ко всем цветам на ваших изображениях. Угол поворота цветов зависит от значения указанного параметра. При значении 0deg
изображение остается неизменным. Для этого фильтра нет максимального значения. Однако эффект значений выше 360deg
оборачивается. Это означает, что значения 90deg
и 450deg
будут иметь одинаковый эффект.
img { filter: hue-rotate(90deg); }
Вот CodePen с CSS-фильтром hue-rotate в действии:
инвертировать
Этот фильтр инвертирует все цвета в ваших изображениях. Степень инверсии зависит от значения переданного параметра. Значение 0% не повлияет на исходное изображение, но значение 100% полностью изменит его.
img { filter: invert(100%); }
Вот CodePen с инвертированным CSS-фильтром в действии:
пятно
Этот фильтр применяет размытие по Гауссу к изображениям. Это размазывает цвета вместе и распространяет их за пределы их краев. Параметр radius, который вы передаете этому фильтру, определяет, сколько пикселей на экране смешиваются друг с другом. Большие значения обеспечат большее размытие. Этот фильтр может принимать любые значения длины, кроме процентов.
img { filter: blur(1px); }
Вот CodePen с CSS-фильтром размытия в действии:
помутнение
Этот фильтр сделает ваши изображения полупрозрачными. Изображения будут полностью непрозрачными при 100% и полностью прозрачными при 0%. Этот фильтр похож на известное свойство непрозрачности. Одно из различий между этими двумя заключается в производительности. Свойство фильтра в некоторых браузерах ускоряется аппаратно, что может привести к повышению производительности.
img { filter: opacity(75%); }
Вот CodePen с CSS-фильтром непрозрачности в действии:
Drop Shadow
Как следует из названия, этот фильтр добавляет эффект тени к изображениям. В основном это размытая, смещенная версия альфа-маски входного изображения, нарисованная конкретным цветом, который вы предоставляете. Для этого свойства требуется смещение по оси x и y, а также цвет тени. Вы также можете дополнительно указать значение радиуса размытия, которое будет определять, будет ли тень резкой или размытой.
img { filter: drop-shadow(5px 5px 10px #666); }
Вот CodePen с CSS-фильтром в тени:
Веб-сайт ()
Хотя все фильтры, которые мы обсуждали до этого момента, довольно полезны, они являются фильтрами общего назначения. Ваш проект может потребовать чего-то более конкретного. Если ни один из приведенных выше фильтров не соответствует вашим требованиям, вы можете создать свой собственный фильтр SVG и использовать его id
для ссылки на него с помощью фильтра url()
.
<svg xmlns="http://www.w3.org/2000/svg"> <filter> <feComponentTransfer> <feFuncR type="linear" slope="2" intercept="-0.5"/> <feFuncG type="linear" slope="2" intercept="-0."/> <feFuncB type="linear" slope="2" intercept="-0.25"/> </feComponentTransfer> </filter> <filter> <feComponentTransfer> <feFuncR type="linear" slope="2" intercept="-0.5"/> <feFuncG type="linear" slope="2" intercept="-0.1"/> <feFuncB type="linear" slope="2" intercept="0"/> </feComponentTransfer> </filter> </svg> <style type="text/css"> img { filter: url('#greenish'); } </style>
Вот CodePen с CSS-фильтром url()
в действии:
Объединение и анимация фильтров
Вы также можете объединить несколько фильтров вместе, чтобы получить различные эффекты. В большинстве случаев порядок фильтров не имеет большого значения, однако фильтры применяются в том порядке, в котором они размещены в вашем CSS, и некоторые фильтры переопределяют другие. Например, использование фильтра sepia
после фильтра в grayscale
приведет к получению изображения в grayscale
но использование grayscale
после того, как в режиме sepia
будет получено изображение в оттенках серого.
Фильтры также могут быть анимированными. Если вы правильно их анимируете, вы можете создать очень интересные эффекты. Возьмем следующий фрагмент кода в качестве примера:
img { animation: haunted 3s infinite; } @keyframes haunted { 0% { filter: brightness(20%); } 48% { filter: brightness(20%); } 50% { filter: sepia(1) contrast(2) brightness(200%); } .... 96% { filter: brightness(400%); } }
В приведенном выше коде несколько фильтров с разными значениями применяются во время анимации. Окончательный результат можно увидеть в демоверсии ниже:
Внезапное изменение яркости и контрастности с полной сепией на 50% создает впечатляющий эффект. Лучший способ лучше понять концепцию — попытаться поэкспериментировать с собственными фильтрами анимации!
Дополнительные замечания
Даже если фильтр вызывает рисование вне блочной модели элемента, он не повлияет на геометрию блочной модели этого элемента. Помните, что фильтры влияют на все части целевых элементов, включая фон, границы и оформление текста. Вы также можете применять фильтры для видео и фреймов. Следующая демонстрация иллюстрирует эту концепцию. Дополнительные примеры доступны на веб-сайте Беннетта Фили .
Все эти фильтры работают довольно хорошо с точки зрения производительности, за исключением фильтра blur
который может быть медленным, если ваш браузер не использует для этого аппаратное ускорение. Производительность фильтра url()
зависит от фильтра SVG, который вы решили применить.
Свойство filter
поддерживается всеми основными браузерами. Для работы Chrome и Opera требуется префиксная версия этого свойства. IE не поддерживает фильтры, но Edge поддерживает их частично. В этом случае частичный означает, что он поддерживает все фильтры, кроме версии url()
.
Вывод
В этом руководстве рассматриваются многие возможности CSS-фильтров, доступные разработчикам прямо сейчас. Они имеют хорошую поддержку браузера, просты в использовании и имеют лучшую производительность по сравнению с решениями на основе холста. Более того, как я уже упоминал в предыдущем разделе, вы можете использовать их как в видео, так и с другими элементами.
Вы использовали какие-либо фильтры нетрадиционными способами? Мы хотели бы видеть это! Оставьте нам записку ниже вместе с любыми вопросами, которые у вас могут возникнуть.
Размытие страницы за наложением с помощью CSS > Вильхубер Давид
Если вы используете такие элементы, как оверлеи (что является правилом во времена акционизма GDPR) и хотите, например, смягчить область за наложением, вы часто сталкиваетесь с проблемой контекста наложения . Например, если у вас есть элементы, расположенные абсолютно или в фиксированном положении, они внезапно отображаются иначе, чем без примененного фильтра. Но есть лекарство.
Следующий код иллюстрирует этот пример. Поле на заднем плане должно располагаться вверху справа, но оно перемещается.:
See the Pen CSS BLUR STACKING CONTEXT #1 by David Vielhuber (@vielhuber) on CodePen.
W3C ясно говорит: «Это не ошибка, это особенность». . Спецификация объясняет отношения:
A value other than none for the filter property results in the creation of a containing block for absolute and fixed positioned descendants unless the element it applies to is a document root element in the current browsing context. The list of functions are applied in the order provided.
Также стоит прочитать обсуждение на GitHub.
Следующие свойства CSS создают новый контекст наложения, так что абсолютно или фиксированно позиционированные дочерние элементы больше не ведут себя относительно области просмотра, а по отношению к отфильтрованному родительскому элементу.:
- filter
- transform
- backdrop-filter
- perspective
- contain
- transform-style
- will-change
Но есть решение исходной проблемы: свойство backdrop-filter CSS (которое на самом деле известно тем, что частично фильтрует области за элементами) делает то, что мы хотим здесь. Здесь также создается новый контекст наложения, но это не имеет значения, поскольку в псевдоэлементе нет дочерних элементов.:
See the Pen CSS BLUR STACKING CONTEXT #2 by David Vielhuber (@vielhuber) on CodePen.
Обработка изображений 9. Размытие
Снова возвращаемся к обработке пикселей и на этот раз рассмотрим алгоритм размытия изображений.Содержание:
1. Введение
2. Изображения. Простая трансформация
3. Негатив, извлечение и инверсия каналов
4. Обесцвечивание
5. Цветовые модели
6. Яркость, насыщенность, контрастность, гамма-коррекция
7. Гистограмма
8. Масштабирование изображения
9. Размытие
10. Свёртка
В прошлый раз при масштабировании изображений билинейной интерполяцией для каждого нового пикселя мы рассматривали 4 пикселя в исходном изображении, чтобы смешать компоненты с нужными коэффициентами и получить сглаженный результат. Для фильтра Ланцоша это количество пикселей возрастало до 9, 25 и т.д.
По такому же принципу работает и размытие: необходимо рассмотреть несколько пикселей вокруг текущего просматриваемого пикселя, а затем записать среднее арифметическое каждой цветовой компоненты.
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
let a = 0, r = 0, g = 0, b = 0, count = 0;
for (let sy = y — size; sy <= y + size; sy++) {
const yy = Math.min(height — 1, Math.max(0, sy));
for (let sx = x — size; sx <= x + size; sx++) {
const xx = Math.min(width — 1, Math.max(0, sx));
let pix = src[yy * width + xx];
r += pix & 0xFF;
g += (pix >> 8) & 0xFF;
b += (pix >> 16) & 0xFF;
a += (pix >> 24) & 0xFF;
count++;
}
}
a = (a / count) & 0xFF;
r = (r / count) & 0xFF;
g = (g / count) & 0xFF;
b = (b / count) & 0xFF;
dst[dstIndex++] = (a << 24) | (b << 16) | (g << 8) | r;
}
}
See the Pen Image processing 9.1. Blur by aNNiMON (@aNNiMON) on CodePen.
Отвлечёмся на небольшой расчёт. Дана картинка 400×292. При обычном обходе мы
400*292=116800 раз производим чтение пикселя.
При размытии с радиусом 1 (3×3) мы делаем 400*292*9=1051200 чтений.
С радиусом 2 (5×5) – 400*292*25=2920000
С радиусом 3 (7×7) – 400*292*49=5723200
Много. А ведь это ещё не размытие по Гауссу, где можно рассматривать и 25×25 пикселей!
Размытие с фильтром Гаусса отличается от вышеприведённого тем, что при суммировании значений учитываются коэффициенты, которые уменьшаются в зависимости от расстояния до центра. Если хотите, можете модифицировать код выше так, чтобы учитывались коэффициенты. К примеру для радиуса 1:
0.2 0.6 0.2
0.6 1 0.6
0.2 0.6 0.2
ОптимизацияСуществуют алгоритмы приближения к результатам размытия Гаусса. Они размывают не так качественно, но при этом работают гораздо быстрее.
Например, можно сначала пройтись по картинке и размыть только в горизонтальном направлении, затем полученный результат размыть по-вертикали.
Также можно снизить количество повторных чтений пикселя. К примеру, мы делаем горизонтальное размытие и сейчас находимся в точке (0,3). Радиус просмотра равен двум пикселям (два влево, два вправо и один центральный).
Мы посчитали сумму, поделили на 5, записали в результирующий массив по адресу (0,3) и теперь переходим к обработке (0,4).
В прошлый раз мы уже читали (0,2), (0,3), (0,4) и (0,5). И эти значения уже есть в сумме, поэтому вместо перечитывания, мы удаляем из суммы (0,1) и прибавляем новый элемент (0,6).
Количество чтений сократилось до двух (и 2r+1 для первого пикселя в строке).
Можно пойти дальше и заменить деление на чтение уже заранее подготовленного среднего значения.
See the Pen Image processing 9.2. Box blur by aNNiMON (@aNNiMON) on CodePen.
Один проход даёт не очень качественный результат, поэтому обычно этот фильтр применяют два или больше раз. Вот сравнение результатов алгоритма, приведённого выше при радиусе 10 и размытия по Гауссу в фотошопе с тем же радиусом.
Напоследок, о математике.
Один проход оптимизированного алгоритма всё с тем же изображением 400×292 при радиусе 1 даёт 469276 чтений. При радиусе 2 — 470660, 3 — 472044, 5 – 474812, 10 – 481732, 20 – 495572.
Для радиуса 3 получили почти в 12 раз меньше чтений пикселей, чем при первом алгоритме без оптимизаций. Даже если выполнить размытие два или три раза, всё равно получится быстрее.
Нормальный сброс — Блог HTML Academy
Расскажите про ресеты и нормалайзы, что лучше использовать? — просят наши зрители Андрей, Сергей и Юрий. Знаете, это как отвёртка и молоток — что лучше? Все хороши. Давайте копнём глубже — к самой сути проблемы, которую они по-разному решают.
HTML хорош тем, что вы набросали тегов и всё — они сразу выглядят. И во всех браузерах всё примерно одинаково: чёрным Таймсом по белому body, да с синими ссылками. Эх, красота! Но в том и дело, что почти: точные стили для всех элементов хоть и рекомендованы сегодня в HTML5, но в каждом браузере свои.
В HTML 4 было всего 78 строк стилей по умолчанию, вроде head { display: none } или text-decoration: underline для ссылок. В WebKit, Chrome и Firefox сегодня около 1000 строк стилей, в которые смело можно снаряжать археологическую экспедицию. Но мы не будем, у нас и так дел хватает.
/* html.css */
HTML 4: 78;
Chrome: 1123;
Firefox: 907;
Разработчикам долго не мешало это примерное соответствие стилей, к тому же браузеры старались их изредка улучшать и унифицировать. Проблема была в другом: все эти отступы, рамки, подчёркивания всегда не по дизайну и приходится их снова и снова отменять для каждого элемента. Но потом кто-то придумал ластик, первый сброс стилей.
Звёздочка выбирает все элементы, а дальше начинается: margin: 0, padding: 0, border: 0, Джофри, Серсея, Фрей и все остальные свойства, которые мешают вам жить. Способ довольно варварский: не только потому, что выбирает элементы, которым ничего не нужно сбрасывать, но и потому, что некоторые стили лучше не трогать, иначе всё развалится — например, элементы форм.
* {
margin: 0;
padding: 0;
border: 0;
joffrey: kill;
cersei: kill;
frey: kill;
}
/* ORLY? */
div , span {
margin: 0;
padding: 0;
border: 0;
}
Следующей попыткой сделать из HTML стерильный набор кубиков, стал CSS Reset из Yahoo UI, который сбрасывал стили только там, где это было нужно. Ещё большую популярность получил Reset CSS Эрика Мейера, сделанный по мотивам Yahoo UI. Эти ресеты не только сбрасывали отступы, но и приводили к единому значению размер и семейство шрифта, выравнивание для текста и другие свойства.
Между ресетами Yahoo и Мейера были различия: Эрик, например, разумно не трогал элементы форм. Было много других решений, но все они решали единую задачу — сделать из сложных стилей по умолчанию простой констуктор, чтобы вы сразу могли писать свои стили, не сбрасывая встроенные.
Эти ресеты никогда не были чистыми сбросами браузерных стилей: нет-нет, да назначались цвета, выравнивание, начиналась борьба за кроссбраузерность. В итоге все проекты несли печать предпочтений конкретных авторов. Самым нейтральным из ресетов до сих пор остаётся Reset CSS Мейера, но даже он убрал вредный :focus { outline: 0 } — и правильно сделал.
/* YUI Reset */
html {
color: #000;
background: #FFF;
}
select {
*font-size:100%;
}
/* Не забыть
вернуть обводку */
:focus {
outline: 0;
}
/* Забыл */
Многих ресеты раздражали: для внутренних блоков с содержимым приходилось восстанавливать стили не только для списков, но и базовых текстовых элементов вроде strong, em, code и других. У Yahoo даже был CSS Base, который назначал правильные базовые стили. После ресета, который отменял неправильные. Почему бы и нет.
Николас Галлахер и Джонатан Нил зашли с другой стороны: вместо того, чтобы сбрасывать примерно одинаковые браузерные умолчания, они подробно изучили все различия и проблемы — и сделали Normalize.css. Он делает везде одинаково и решает много проблем по пути.
С Normalize вам снова приходится убирать отступы со списков. Многих это провоцирует использовать элементы попроще, но будьте внимательны — это чревато диватозом. Зато Normalize берёт на себя сложности оформления элементов форм, поведение мобильных браузеров и много мелких багов.
Видите? Совсем другую задачу решает проект. Я на днях видел сайт, на котором после Normalize.css подключают Reset CSS, чтобы оставить нормализацию, но при этом получить нейтральный конструктор. Это конечно глупости, которые приводят к распуханию глобальных стилей. Уж лучше собрать свой гибрид — кода там всего ничего.
@import "normalize.css";
@import "reset.css";
@import "yui-reset.css";
@import "yui-base.css";
@import "h5bp.css";
Благо Normalize.css дотошно документирован: у каждого свойства стоит объяснение зачем оно нужно. В сомнительных местах, которые не нормализуют, а назначают более подходящие (по мнению авторов) умолчания — стоят пометки. Это помогает не просто слепо копировать его из проекта в проект, а использовать только нужные части.
Представьте, что вы в рамках проекта делаете модуль, который потом будет использоваться на другом сайте. У вас есть Normalize, а у них? Или наоборот: на ваш проект приходит сторонний модуль — а там нет Normalize и всё подогнано под браузерные баги, ну или особенности. Или даже есть Normalize, но другой версии. Так себе модульность получается.
А вот если бы вы сразу пошли в Normalize и скопировали нужные кусочки для каждой сложной ситуации — модуль бы вышел хороший, независимый. Normalize — это ещё и самая полная энциклопедия кроссбраузерных сложностей Да, это провоцирует лёгкое дублирование, но дарит гибкость — притом, что сжатие повторяющихся фрагментов — это хлеб с маслом для gzip.
Reset CSS не обновлялся с 2011 года, хотя до сих пор отлично работает. Но его эпоха уже прошла — на смену спешит новое свойство all со значением unset. Оно сбрасывает браузерные умолчания, где это нужно — почитайте на MDN. Normalize.css сейчас в моде и хорошо решает проблемы кроссбраузерности, но попробуйте использовать его как справочник. Ну так Reset или Normalize? Танцуйте от задачи.
/* Welcome to the */
.future {
all: initial;
all: inherit;
all: unset;
}
CSS-анимация размытия — JSFiddle
Редактор макета
Классический Столбцы Нижние результаты Правильные результаты Вкладки (столбцы) Вкладки (строки)
Консоль
Консоль в редакторе (бета)
Очистить консоль при запуске
Общий
Номера строк
Обернуть линии
Отступ с табуляцией
Подсказка по коду (автозаполнение) (бета)
Размер отступа:2 пробела 3 пробела 4 пробела
Ключевая карта:По умолчанию: Sublime TextEMACS
Размер шрифта:По умолчаниюBigBiggerJabba
Поведение
Код автозапуска
Только код автозапуска, который проверяет
Код автосохранения (натыкается на версию)
Автоматически закрывать HTML-теги
Автоматически закрывающие скобки
Проверка действующего кода
Выделите совпадающие теги
Заглушки
Показывать панель шаблонов реже
эффектов фильтра CSS: размытие, оттенки серого, яркость и многое другое в CSS!
Пример возможностей эффекта CSS-фильтра в этой статье!
Фильтрыизначально были частью спецификации SVG.Однако, когда их полезность стала очевидной, W3C начал работать над добавлением некоторых общих эффектов фильтров и в CSS. CSS-фильтры довольно мощные и невероятно простые в использовании. Вы можете использовать их, среди прочего, для размытия, осветления или насыщения изображений. Их можно использовать отдельно или в сочетании с другими фильтрами. Для применения фильтров в CSS необходимо использовать следующий синтаксис:
фильтр: <функция-фильтр> [<функция-фильтр>] * | нет
Теперь давайте кратко рассмотрим все эти фильтры.
Яркость
Этот фильтр регулирует яркость ваших изображений. Он принимает в качестве параметра значения больше или равные нулю. Значение 0% даст вам полностью черный цвет. Точно так же значение 100% даст вам исходное изображение. Вы можете указать значения больше 100%, чтобы получить еще более яркие изображения. Например, значение 300% сделает изображение в 3 раза ярче:
img {
фильтр: яркость (300%);
}
Вот CodePen с CSS-фильтром яркости в действии:
См. Пример CSS-фильтра Pen — Яркость по SitePoint (@SitePoint) на CodePen.
Контраст
Этот фильтр контролирует контраст ваших изображений. Как и фильтр яркости, он также принимает значения больше или равные нулю. Этот фильтр контролирует разницу между темными и светлыми частями изображения в CSS. Следовательно, значение 0% приводит к серому изображению. Установка контраста на 100% дает исходное изображение, а любое значение, превышающее это, еще больше увеличивает контраст изображения:
img {
фильтр: контраст (0%);
}
Вот CodePen с контрастным фильтром CSS в действии:
См. Пример CSS-фильтра Pen — Контраст по SitePoint (@SitePoint) на CodePen.
Оттенки серого
Как видно из названия, этот фильтр может помочь вам сделать ваши изображения оттенками серого. Этот фильтр постепенно преобразует все цвета на наших изображениях в некоторый оттенок серого. Значение 0% не повлияет на наши изображения, а значение 100% полностью переведет их в оттенки серого. Отрицательные значения не допускаются.
img {
фильтр: оттенки серого (100%);
}
Вот CodePen с фильтром CSS в градациях серого в действии:
См. Пример фильтра Pen CSS — оттенки серого от SitePoint (@SitePoint) на CodePen.
Насыщенная
Этот фильтр регулирует насыщенность цветов изображений. Значение 0% полностью удалит все цвета из изображения, а значение более 100% сделает изображение перенасыщенным. При 100% окончательный результат выглядит так же, как исходное изображение. Отрицательные значения для этого фильтра не допускаются.
img {
фильтр: насыщенный (0%);
}
Вот CodePen с фильтром насыщения CSS в действии:
См. Пример CSS-фильтра Pen — Насыщение по SitePoint (@SitePoint) на CodePen.
сепия
Этот фильтр добавляет оттенок сепии вашим изображениям, как некоторые старые фотографии. Количество добавляемой сепии зависит от процента. При 0% окончательный результат выглядит как исходное изображение, а при 100% изображение будет полностью сепией.
img {
фильтр: сепия (100%);
}
Вот CodePen с фильтром сепии CSS в действии:
См. Пример фильтра Pen CSS — сепия от SitePoint (@SitePoint) на CodePen.
Поворот оттенка
Этот фильтр применяет чередование оттенков ко всем цветам в ваших изображениях.Угол поворота цветов зависит от значения указанного параметра. При значении 0deg
изображение остается неизменным. Для этого фильтра нет максимального значения. Однако эффект значений выше 360deg
распространяется вокруг. Это означает, что оба значения 90deg
и 450deg
будут иметь одинаковый эффект.
img {
фильтр: изменение оттенка (90 градусов);
}
Вот CodePen с фильтром CSS поворота оттенка в действии:
Посмотрите, как фильтр пера «Изменение оттенка» с помощью SitePoint (@SitePoint) на CodePen.
Инвертировать
Этот фильтр инвертирует все цвета в ваших изображениях. Степень инверсии зависит от значения переданного параметра. Значение 0% не повлияет на исходное изображение, а значение 100% полностью инвертирует его.
img {
фильтр: инвертировать (100%);
}
Вот CodePen с обратным фильтром CSS в действии:
См. Пример фильтра Pen CSS — инверсия с помощью SitePoint (@SitePoint) на CodePen.
Размытие
Этот фильтр применяет к изображениям размытие по Гауссу.Он смешивает цвета и распределяет их за пределы краев. Параметр радиуса, который вы передаете этому фильтру, определяет, сколько пикселей на экране сливаются друг с другом. Большие значения обеспечат большее размытие. Этот фильтр может принимать любые значения длины, кроме процентов.
img {
фильтр: размытие (1px);
}
Вот CodePen с фильтром размытия CSS в действии:
См. Пример CSS-фильтра Pen — Размытие по SitePoint (@SitePoint) на CodePen.
Непрозрачность
Этот фильтр сделает ваши изображения полупрозрачными. Изображения будут полностью непрозрачными при 100% и полностью прозрачными при 0%. Этот фильтр похож на хорошо известное свойство непрозрачности. Одно различие между этими двумя заключается в производительности. В некоторых браузерах свойство фильтра имеет аппаратное ускорение, что может повысить производительность.
img {
фильтр: непрозрачность (75%);
}
Вот CodePen с CSS-фильтром непрозрачности в действии:
См. Параметр «Непрозрачность фильтра пера» от SitePoint (@SitePoint) на CodePen.
Падающая тень
Как следует из названия, этот фильтр добавляет к изображениям эффект тени. По сути, это размытая, смещенная версия альфа-маски входного изображения, нарисованная определенным цветом, который вы указали. Это свойство требует смещения по оси x и y, а также цвета тени. Вы также можете дополнительно указать значение радиуса размытия, которое определит, будет ли тень резкой или размытой.
img {
фильтр: drop-shadow (5px 5px 10px # 666);
}
Вот CodePen с CSS-фильтром drop shadow в действии:
См. «Падающая тень фильтра пера» от SitePoint (@SitePoint) на CodePen.
URL ()
Хотя все фильтры, которые мы обсуждали до этого момента, довольно полезны, они являются фильтрами общего назначения. Вашему проекту может потребоваться что-то более конкретное. Если ни один из вышеперечисленных фильтров не соответствует вашим требованиям, вы можете создать свой собственный фильтр SVG и использовать его id
для ссылки на него с помощью фильтра url ()
.
Вот CodePen с url ()
SVG CSS-фильтр в действии:
См. Пример фильтра Pen CSS — SVG от SitePoint (@SitePoint) на CodePen.
Объединение и анимация фильтров
Вы также можете комбинировать несколько фильтров для получения различных эффектов. В большинстве случаев порядок фильтров не имеет большого значения, однако фильтры применяются в том порядке, в котором они размещены в вашем CSS, и некоторые фильтры перекрывают другие. Например, использование фильтра сепия
после фильтра оттенков серого
приведет к изображению в оттенках серого, а использование оттенков серого
после сепия
даст изображение в оттенках серого.
Фильтры также можно анимировать. Если вы правильно их анимируете, вы можете создать очень интересные эффекты. В качестве примера возьмем следующий фрагмент кода:
img {
анимация: бесконечные 3с с привидениями;
}
@keyframes haunted {
0% {
фильтр: яркость (20%);
}
48% {
фильтр: яркость (20%);
}
50% {
фильтр: сепия (1) контраст (2) яркость (200%);
}
....
96% {
фильтр: яркость (400%);
}
}
В приведенном выше коде несколько фильтров с разными значениями применяются во время анимации.Окончательный результат можно увидеть в демонстрации ниже:
См. Анимацию фильтра пером от SitePoint (@SitePoint) на CodePen.
Внезапное изменение яркости и контрастности при полной сепии на 50% создает драматический эффект. Лучший способ лучше понять концепцию — попробовать поэкспериментировать с собственными анимациями фильтров!
Дополнительные примечания
Даже если фильтр вызывает рисование за пределами блочной модели элемента, он не повлияет на геометрию блочной модели этого элемента.Имейте в виду, что фильтры влияют на все части целевых элементов — включая фон, границы и текстовое оформление. Вы также можете применять фильтры к видео и окнам iframe. Следующая демонстрация иллюстрирует эту концепцию. Другие примеры доступны на веб-сайте Беннета Фили.
См. Пример фильтра Pen CSS — Карты от SitePoint (@SitePoint) на CodePen.
Все эти фильтры очень хороши с точки зрения производительности — за исключением фильтра blur
, который может работать медленно, если ваш браузер не использует для него аппаратное ускорение.Производительность фильтра url ()
будет зависеть от фильтра SVG, который вы решите применить.
Свойство filter
поддерживается всеми основными браузерами. Для работы Chrome и Opera требуется версия этого свойства с префиксом. Фильтры не поддерживаются IE, но Edge поддерживает их частично. В этом случае частичное означает, что он поддерживает все фильтры, кроме версии url ()
.
Заключение
В этом руководстве были рассмотрены многие возможности фильтров CSS, доступные разработчикам прямо сейчас.Они имеют хорошую поддержку браузера, просты в использовании и имеют лучшую производительность по сравнению с решениями на основе Canvas. Более того, как я упоминал в последнем разделе, вы можете использовать их в видео, а также с другими элементами.
Использовали ли вы какие-либо фильтры нетрадиционным способом? Нам бы очень хотелось это увидеть! Оставьте нам сообщение ниже вместе с любыми вопросами, которые могут у вас возникнуть.
Blur Background Image — Pure CSS Tutorial [2020]
В этом уроке мы узнаем, как размыть фоновое изображение.Этого легко добиться с помощью чистого CSS
.
Приступим!
Мы собираемся создать два элемента div рядом друг с другом. Один div покажет пример размытия фонового изображения, а другой будет нормальным.
BLUR
NO-BLUR
Ничего особенного, просто контейнер и два div с промежутком внутри.
Обратите внимание, что содержимое диапазона также будет выглядеть размытым в этой настройке!
CSS Размытие фона постоянная ссылка
Для части контейнера мы используем центрирование гибкого бокса.
И для div мы делаем их шириной 50% и высотой 100%.
Это будет четкое изображение:
.no-blur {
background: url ('https://images.unsplash.com/photo-1591775995956-a6c811374d9c?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEy = формат & подгонка = кадрирование & w = 934 & q = 80 ')
центральный центр без повтора;
размер фона: обложка;
ширина: 50%;
высота: 100%;
}
И чтобы изображение выглядело размытым, мы добавляем следующий CSS:
filter: blur (8px);
-webkit-filter: размытие (8 пикселей);
Вместе с предыдущим кодом все стили компилируются в следующий CSS:
.размытие {
background: url ('https://images.unsplash.com/photo-1591803452190-8f1455681025?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=934&q= no80' center 902
размер фона: обложка;
ширина: 50%;
высота: 100%;
фильтр: размытие (8 пикселей);
-webkit-filter: размытие (8 пикселей);
}
Посмотрите пример кода в этой постоянной ссылке Codepen
Поиграйте с уровнями размытия, чтобы увидеть эффект на изображении.
См. Размытое фоновое изображение CSS для пера Криса Бонгерса (@rebelchris) на CodePen.
Это не самая лучшая поддерживаемая функция CSS
, но все же очень приятно использовать в качестве дополнительной специи на вашем веб-сайте. Это сделает ваши изображения размытыми во всех браузерах, кроме IE и Opera Mini.
Спасибо за чтение, давайте подключимся! постоянная ссылка
Спасибо, что прочитали мой блог. Не стесняйтесь подписаться на мою электронную рассылку и подключиться к Facebook или Twitter
Как создать эффект фона iOS | by Fanny-Elise Patrikainen
Фиксированный фон отлично подходит, особенно для заголовков героев или страниц входа в систему.Но вы можете использовать наложение на меньших поверхностях, например на изображениях содержимого, или даже на нескольких элементах (галереях и т. Д.).
Здесь все становится немного сложнее, потому что нельзя использовать фиксированный фон, определяемый размером области просмотра. К счастью, есть несколько плагинов JQuery, которые сделают эту работу. Вот 2, которые я нашел:
Если вы не хотите использовать JQuery, все может стать немного сложнее. Впрочем, давайте все равно на это взглянем!
а. Фон
сбоку элемента (сверху, снизу и т. Д.):Исходная идея полностью вдохновлена этим уроком:
С помощью этой техники вы можете получить такой результат:
Вот моя ручка для этого примера — я просто немного изменил исходный код, чтобы расширить его для более общего использования:
Вкратце, идея здесь такова:
— для создания фонового элемента (здесь неразмытая фотография), назовем его element A
— для создания неабсолютно позиционированного элемента с размером , равным , чем у фонового элемента (элемент B), и с переполнением : hidden propriety
— добавить элемент :: before к элементу B, дать ему тот же фон, что и у элемента A, и применить выбранный фильтр (здесь фильтр размытия)
— применить преобразование Y к B для наложения A
— / вот трюк / применить второй преобразование Y к элементу B :: before для него быть точно расположенным на A.Поскольку переполнение B скрыто, будет видна только часть отфильтрованного фона внутри B, и, поскольку отфильтрованный фон расположен на A, он будет визуально адаптироваться к фону A.
Пример:
На первой фотографии для части перевода мы сделали
.elementB {transform: translateY (-30%)}. ElementB :: before {transform: translateY (-70%)}
На вторая фотография:
.elementB {transform: translateY (-70%)}. elementB :: before {transform: translateY (70%)}
b.Фон любой формы — решение только для svg
Если вам нужно полностью избавиться от ограничений, накладываемых на оверлей, наиболее гибким решением может быть использование svg. Одной из сильных сторон svg является широкая поддержка браузеров, особенно фильтров.
Вот пример того, что вы можете сделать:
Фотография предоставлена: https://unsplash.com/photos/G69vIksRqWAВот ручка для вышеприведенного примера:
Основная идея:
- создать svg, который будет охватывать все изображение для наложения
- создать первый элемент (например, элемент
) с изображением для наложения, установленным в качестве фона (с использованием элемента )
Nb: здесь очень важно установить одинаковые атрибуты для двух
- , тогда вам просто нужно добавить контент к наложенному элементу и стилизовать его
c. Заставка на видео (!):
Эта часть полностью соответствует этому прекрасному руководству, в котором объясняется очень крутой эффект видео :
Хитрость заключается в том, чтобы наложить два элемента
Nb: этот метод также очень подходит для изображений, но его следует использовать осторожно из-за частичной поддержки браузерами (см. Ниже).
Ограничения браузера: К сожалению, свойство clip-path все еще является экспериментальным и, в частности, похоже, все еще частично поддерживается в Safari — это свойство следует использовать с осторожностью.
Видео и Svg:
Было бы здорово использовать Svg, который имеет широкую кроссбраузерную поддержку, для видео, но в настоящее время svg не поддерживает элемент видео — на самом деле они поддерживаются, но как Элемент