Применение background-clip для текста с резервным css
vladimir ср, 02/13/2013 - 13:09 CSS3
Я смотрел на прекрасный дизайн сайта polygon.com и применение на нём свойств background-clip и background: linear-gradient(…) . На сайте применяется резервный JS для обеспечения поддержки не стандартного background-clip: text.
Что такое background-clip
Background-clip это свойство, которое впервые было введено браузерами семейства –webkit в 2008 году, позволяет указывать фоновое изображение на элементе с обрезкой по контуру текста этого элемента:
Здесь используется следующий код:
body{ color: transparent; background: url(path/to/bg/image) repeat; -webkit-background-clip: text; }
Проблемы с background-clip
Не удивительно, что многие пользуются нестандартными css свойствами. Проблемы с использованием таких свойств нет, если браузеры не поддерживающие их не портят внешний вид страницы. К сожалению, background-clip в браузерах отличных от webkit выглядит печально:
Вот так выглядит это в firefox (фоновая картинка берется из placekitten) . Текст становится не читаемым! Получаестя, что в остальных браузерах ситуация катастрофическая.
Решение проблемы с поддержкой background-clip
Наиболее часто используемым решением является применение Modernizr. Он позволяет обнаружить свойство background-clip: text, а затем выборочно применить класс backgroundcliptext. Polygon.com так и делает.
Решение проблемы с background-clip с помощью css
Глядя на код, я внезапно осознал, что если использовать –webkit префикс в составе свойства background, то свойство background-clip: text с префиксом –webkit не будет работать в браузерах отличных от webkit! Пример:
body { color: transparent; background: -webkit-linear-gradient(transparent, transparent), url(path/to/bg/image) repeat; -webkit-background-clip: text; }
Ура! Мы почти у цели! Background больше не появляется в браузерах отличных от webkit:
Проблемка будет с браузером Opera, который использует префикс –webkit для режима совместимости. Но это легко решается добавлением префикса –o-:
body { color: transparent; background: -webkit-linear-gradient(transparent, transparent), url(path/to/bg/image) repeat; background: -o-linear-gradient(transparent, transparent); -webkit-background-clip: text; }
Но! Заметим, что текст у нас по-прежнему не виден, так как установлен прозрачный цвет текста. Сделаем его читаемым:
body { color: red; background: -webkit-linear-gradient(transparent, transparent), url(path/to/bg/image) repeat; background: -o-linear-gradient(transparent, transparent); -webkit-background-clip: text; }
Сейчас цвет заливает текст и в webkit фоновой картинки не видно.
text-fill-color приходит на помощь
Свойство text-fill-color было представлено еще в 2006 году. Оно заполняет текст цветом, при условии использования вместе с text-stroke. Поведение точно такое же, как и у color, но в нашем случае распространяться оно будет только на браузеры –webkir. Ура!
body { color: red; -webkit-text-fill-color: transparent; background: -webkit-linear-gradient(transparent, transparent), url(path/to/bg/image) repeat; background: -o-linear-gradient(transparent, transparent); -webkit-background-clip: text; }
Вот так выглядит результат в разных браузерах:
Таким образом, можно обойтись без сценария Modernizr, использовав дополнительно всего два свойства. В настоящее время только Opera требует сброса свойства background с помощью префикса –o-. Если же в будущем ситуация поменяется и остальные браузеры начнут использовать префикс –webkit, тогда придется писать подобное этому: -moz-linear-gradient… Хотя я сомневаюсь, что такое произойдет когда-либо.
- Войдите, чтобы оставлять комментарии
Комментарии
Спасибо большое! Помог ваш вариант.
Спасибо! Реально выручил. Уже 4 часа ночи, обнаружил, что в Firefox не пашет background-clip: text и впал в панику. И тут наткнулся на эту статью.