Как объединить CSS-тень и "background-image: -webkit-gradient"
Я пытаюсь добиться эффекта тени градиента + текста в браузере Chrome/Safari с использованием текстовой тени CSS и комбинации текстовой тени и фонового изображения: -webkit-gradient, см. пример blw. Я могу применить только один из эффектов (если я добавлю тень, исчезает градиент. Что я делаю неправильно?
h1 {
font-size: 100px;
background-image: -webkit-gradient(linear, left top, left bottom, from(white), to(black));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 0 1px 1px #fff;
}
Ответы
Ответ 1
Градиент "исчезает", потому что text-shadow
находится на уровне выше фона.
- Текст (прозрачный)
- Тень
- Фон.
Мы можем обойти это, скопировав текст и поместив его под исходный слой, затем применим тень там, например:
h1 {
position: relative;
font-size: 100px;
text-align: center;
}
h1 div {
background-image: -webkit-gradient(linear, left top, left bottom, from(white), to(black));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
position: absolute;
width: 100%;
}
h1:after {
text-shadow: 10px 10px 11px #fff;
color: transparent;
}
#hello:after {
content: 'Hello World';
}
<h1 id="hello"><div>Hello World</div></h1>
Ответ 2
Этот ответ похож на ответ @KennyTM выше, за исключением того, что его ответ имеет тень, жестко закодированную в CSS, что не подходит для динамического текста, такого как как в CMS. Кроме того, его метод требует отдельного идентификатора для каждого экземпляра, что было бы очень утомительным, если вы планируете много использовать этот эффект. В приведенном ниже примере вместо этого используется класс и разрешается динамический текст.
Попробуйте следующее:
h1 {
position: relative;
font-size: 100px;
text-align: center;
}
h1 div {
background-image: -webkit-gradient(linear, left top, left bottom, from(teal), to(black));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
position: absolute;
width: 100%;
}
h1:after {
text-shadow: 2px 2px 2px #000000;
color: transparent;
}
.gradient-shadow:after {
content: attr(title); /* Pulls the text from the 'title' attribute to make the shadow */
}
И затем в вашем HTML:
<h1 class="gradient-shadow" title="Hello World"><div>Hello World</div></h1>
Просто убедитесь, что текст в <div>
соответствует тексту в атрибуте title
.
С некоторым дополнительным форматированием (я использовал Helvetica Neue Ultralight и темный фон) вы можете получить эффект примерно так: http://cl.ly/image/2C0k0I3W271D