Простые кроссбраузерные текстовые маски при помощи режимов наложения
Перевод статьи Easy Cross-Browser Text Masks with Blend Modes с сайта demosthenes.info, c разрешения автора — Дадли Стори.
Есть много способов делать маски обрезки по тексту (оформление графики или эффекты внутри букв) в вебе, но все эти техники какие-то бессистемные: Chrome и Safari уже давно поддерживают -
webkit
-
background
-
clip
:
text
;
, но это касается только двух браузеров; есть также SVG-техники, но они тоже имеют ограничения.
После экспериментирования с режимами наложения, я понял, что можно воспользоваться ими, чтобы создать маски обрезки по тексту, сделав «бутерброд» из текста и фоновых изображений. Одним из существенных преимуществ является то, что эта техника не только полностью кроссбраузерная (за исключением IE), но также по построению обеспечивает прогрессивное улучшение, с изящным запасным решением.
Техника
Суть метода заключается в том, чтобы обернуть текст в контейнер:
<div class="dark"> <h1>Chicago
</h1> </div>
Чтобы результаты обрезки были эффектнее, лучше всего выбирать шрифты с жирными буквами и толстыми шрихами
Тексту задают размер и фоновый цвет, который заполняет его контейнер:
.dark h1 { margin:0
; font-size:20vw
; text-transform:uppercase
; font-family:Montserrat, sans-serif
; line-height:1.9
; color:#fff
; background:#000
; }
Используемые цвета будут работать лучше, если они полностью противоположные; здесь я использовал чёрный фон с белым текстом.
К контейнеру применяется фоновое изображение; – его не будет видно на данном этапе, поскольку оно скрыто заполненным фоновым цветом текста.
.dark { text-align:center
; background-size:cover
; background: url(chicago.jpg); }
И наконец, к элементу с текстом применяется mix
-
blend
-
mode
, противоположное его фоновому цвету:
.dark h1 { mix-blend-mode: darken
; }
Т.е., если фон чёрный, то применяем darken
; если цвета меняются местами (чёрный текст на белом фоне, как в примере «Houston» ниже), то используем lighten
:
.light h1 { mix-blend-mode: lighten
; }
See the Pen Text Clipping Masks with Blend CSS Blend Modes by Ilya Streltsyn (@SelenIT) on CodePen.
Ну разве это трудно? Если браузер не поддерживает mix
-
blend
-
mode
, то пользователь увидит обычный текст, на сплошном фоне с максимальным контрастом. В любом случае текст остаётся настоящим текстом: вы можете выделить его, скопировать и изменить по желанию.
Перестановка
Если вы хотите, чтобы в браузерах без поддержки mix-
blend
-
mode
можно было увидеть изображение, а не текст, то код будет усложнён только слегка. Фоновое изображение становится настоящим изображением, размещённым поверх текста:
<div class="dark">
<h1>Chicago
</h1>
<img src="chicago.jpg" alt="Photograph of the Chicago skyline taken from the water during the day">
</div>
CSS для <h1> выглядит точно так же, за исключением того, что в нём отсутствует какой-либо background
. Изображение позиционируется абсолютно поверх текста.
div.dark { text-align:center
; position:relative
; background:#000
; } .dark h1 { margin:0
; font-size:20vw
; text-transform:uppercase
; font-family:Montserrat, sans-serif
; line-height:1.9
; color:#fff
; } div.dark img { position:absolute
; top:0
; left:0
; width:100%
; }
Затем для изображения устанавливается соответствующий
mix
-
blend
-
mode
: .dark img { mix-blend-mode:darken
; }
Опять же, обратный эффект (чёрный текст, белый фон) тоже достижим; смотрите более подробный демо-пример на CodePen. Визуально, эффект точно такой же, как и в первом примере; разница только в элементе, который имеет приоритет при выборе и изящной деградации.
Заключение
Режимы наложения – одни из новейших аспектов CSS, которые имеют нетронутые богатства для дизайна и UI. В следующей статье я рассмотрю ещё больше возможностей с текстом и наложениями.
Смотите итоговый пример на CodePen
Фотографии Дэниела Швена и Рона Кикучи, под лицензией Creative Commons
P.S. Это тоже может быть интересно:
None Found
Благодарю от души! Все варианты перепробовал, остановился на этом, как на самом оптимальном.