Text-shadow — эффект гравировки, вдавленности и тени от текста

Text-shadow — эффект гравировки, вдавленности и тени от текста

В сегодняшней статье я хочу раскрыть тему CSS-свойства text-shadow. Это свойство не является новым в CSS — оно появилось еще в CSS 2, но было реализовано не всеми браузерами.

Text-shadow чаще используется не для того, чтобы создать размытую тень за текстом, а для того, чтобы реализовать эффект гравировки или вдавленности текста. Если вы посмотрите на пример iPhone на jQuery в Safari или Opera > 9.5, то сможете увидеть эффект гравироки в заголовке айФона.

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

Но для начала мы погрузимся в историю и посмотрим на текущее состояние браузеров.

Как я уже сказал, text-shadow был впервые объявлен в CSS 2 еще в 1998 году, но до сих пор не был реализован всеми браузерами.

Объявляется он следующим образом:

селектор {
text-shadow: 1px 0px 0px #000;
}
  • Первый параметр — смещение по оси X;
  • Второй — смещение по оси Y;
  • Третий — радиус размытия;
  • Четвертый — цвет тени.

Первым браузером, в котором это свойство было реализовано, был Safari версии 1.1 (в 2003 году). Потом подоспели Konqueror 3.4 и Opera 9.5 (не так уж давно).

Как известно, в Safari и Crome используется один и тот же движок WebKit, но в Chrome тени мы не увидим, потому что в нем используется другой графический движок для рендеринга (Skia).

К сожалению, в Firefox 2,3 text-shadow не реализовано. Но уже в версии 3.1 имеется полная поддежка этого свойства.

Если обобщить эти сведения, то получится следующая таблица:

Браузер Степень реализации
Safari поддеживается, но без размытия
Opera > 9.5 полная поддежка
Opera < 9.5 нет
Firefox 2,3 нет
Firefox 3.1 полная поддержка
Konqueror полная поддежка
IE 7,8 нет

Будет несправедливо не заметить, что в IE все же есть Drop Shadow Filter. Но выглядит это ужасно.

Примеры использования text-shadow

Как я уже говорил, модные парни обожают text-shadow. Особенно это касается компании Apple. Везде, где только можно они используют эффекты вдавленности и гравировки:

 

Тени могут быть добавлены не только для достижения эстетического счастья, но и для улучшения читаемости текста.

Парни из Adobe тоже любят гравировку по интерфейсу:

Создатели Google Chrome туда же.

По делу

Посмотрели. Мило. Теперь реализуем кросс-браузерный text-shadow.

Для начала скажу, что я не первый кто это делает. Примеры кросс-браузерной реализации text-shadow можно поискать и найти много интересного.

Для jQuery есть даже плагин, который реализует text-shadow.

Несмотря на это, я предлагаю реализовать свою функцию, которая не будет делать полноценный text-shadow, а только эффект гравировки.

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

А теперь предлагаю вам посмотреть реализацию с комментариями.

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 46

vizzz
Отлично, пригодится.)
#
vizzz
ainu
Не хочется матом, но них**** себе! Как вы это сделали?
#
ainu
Grin
ainu, что ты имел ввиду? ;-)
#
Grin
Octane
Смотрится эффетно, только не забывайте, что у пользователя должен быть влючен «ClearType
Grin
Octane, без размытия, конечно, не так эффектно, но тоже довольно не плохо
#
Grin
Dr.Death
что то у меня на кнопку input не удается применить :(
Dr.Death
а блин, это к тексту...
web-article
Обязательно найдется браузер, в котором это не работает. И этот браузер будет именно у закачика. Закон подлости :)
Жека
В Lynx, сука, не работает :)
В остальных работает.
Альберт
Спасибо большое!!! Сейчас манстрачу сайт для себя, с CSS столкнулся впервые, проканапатил много всего в Яне. Это лучший сайт!!! Сделаю свой обязательно поставлю ссылочку на Ваш. Спасибо еще раз!!!
#
Альберт
Миша Татхагата
Спасибо огромное. Последний раз делал что-то подобное лет 8 назад и торчал от своей крутости. Расстроган. Вспомнилась молодость.
#
Миша Татхагата
Жека
:) А я лет восемь назад торчал от глянцевой порнухи и других радостей молодости.
ne4to
Спасибо, классная статья,оказалось все так просто:)
#
ne4to
Михаил
Используется ява скрипт, а это не есть хорошо :(
#
Михаил
Саня
а на Apple эта фича реализовывается на этапе формирования бакграунда (на серверной стороне) Пробовал релизовать на PHP - оч просто получается - на входе массив стрингов (пункты меню) на выходе - готовый гиф с пунктами
#
Саня
annykey
супер!
три месяца назад прочитал эту статью, а сегодня пригодилось :)
спасибо!
#
annykey
ADeptus
Cпасибо.

Однако, рекомендую поправить CSS тени

.shadow {
margin-top:1px;
color: #eee;
position: absolute;
z-index: 0;
}


С position:absolute тень позиционировать лучше margin, т.к. все родительские стили накладывающиеся на элемент не будут задеты.
Cude
Ну почему 99% всех jQuery фишек работает только в стерильных условиях. На реальном проекте сразу возникает куча проблем, приходится городить огород в несколько раз больше чем оригинальный код.
#
Cude
Grin
Cube, а почему нельзя сделать «стерильные условия» на рабочем проекте?
#
Grin
GliukuS
Пригодилось!
Спасибо!
Serega124
А можно делать тени для слоев div?
#
Serega124
Владимир Анохин
Здравствуйте. Просто суперская штука. Щас порадую заказчика, что на его блоге будет очень модный эффект тени в шапке :) Большое вам спасибо. А пишу вот по какому поводу - я сделал в шапке заголовок h1 и меню в виде неупорядоченного списка. Потом я подумал о том, как всё это дело будет индексироваться, ведь там получается по 2 экзепляра текста в каждом теге. Для этого я изменил 61-ю строку вашего демо-примера. Вокруг
<span class='+ShdwClass+'>'+$(this).html()+'</span>

проставил тег ноиндекс
<noindex><span class='+ShdwClass+'>'+$(this).html()+'</span></noindex>

Мне кажется так будет лучше. Добавьте это по возможности в пример, если конечно я всё правильно сделал (т.к. в сео я не спец). Ещё раз спасибо
Grin
Владимир, js не индексируется поисковиками, так что этого можно было и не делать ;-)
I.Eugene
Занятно. Я по-старинке делаю эти эффекты в фотошопе и приделываю как картинку :)
ПС
Хороший блог, сча подпишусь, ага
Владимир Анохин
2Grin,
ясно, спасибо за пояснение, не знал. А скажите пожалуйста, как тогда проиндексируется заголовок H1, если я в нём по вашему примеру яваскриптом заменю текст на два спана с текстом? Т.е. я в скрипте поменял селектор с ссылки на заголовок, и вот теперь не могу понять, будет ли он индексироваться, а ведь заголовок это важная весчь :) И раз уж я пишу, ещё очень давно мучает вопрос - индексируются ли элементы помеченные display:none ? Т.к. ведь в структуре DOM они отображаются (firebug), но на сайте их нет. Заранее благодарен вам за ответ, для меня это очень важно и интересно.
Grin
Владимир, можно открыть исходный код в браузере — все, что вы там видите, «видит» и поисковый робот.
Maler
Позволил себе переписать немного, ибо так будет работать везде!

.shadow {
color: #1B7672;
}



$(document).ready(function(){
$('h2, .title').each(function(){// ищем все элементы класса shadow
$(this).textDropShadow('shadow')//далее работает функция, которая в качестве параметра получает название класса тени
});
});
(function($) {
$.fn.textDropShadow = function(ShdwClass){//элементы заменяются. Вместо оригинала внутри будет два спана - один содержащий сам текст, а другой тень этого текста.
$(this).css('position','relative').html(''+$(this).html()+''+$(this).html()+'');
return $(this);
}
})(jQuery);

#
Maler
Biwebco
Спасибо, Ваш оригинальный пример не работает в IE8(native), но если включить режим поддержки старых броузеров, то всё ок.
gps
Спасибо отличный сайт...
#
gps  
Злодеюшко
Низачот! В IE8 работает с багом http://www.imageup.ru/img52/01248225.gif
#
Злодеюшко
Maxim54rus
Гравировка для IE

filter:progid:DXImageTransform.Microsoft.Shadow(color=#000000,direction=45,strength=1);

color-цвет
direction-угол
strength-длина тени
#
Maxim54rus
Wanker
Все класс!
Спасиба.
А кто-нибудь знает как сделать что бы текст на странице выглядел сглаженным, а не рубцованым )), если размер,например, больше 32pt
Ведь делаю же люди как то!?!?!?
#
Wanker
Евгений
Шрифт "рубцованый" или сглаженный зависит от того, стоит ли в настройках операционной системы ClearType.
Wanker
стоит ClearType, все равно текст рубцованный.
Меня интересует как например сделали текст: http://www.blueskyresumes.com/free-resume-samples/
вот там есть надпись: resume Samples по-моему 40 шрифт, да и еще не из safe list.
Он, правда в ie тоже не сглаженный. Но в остальных браузерах - ОК!
Как так сделать????
#
Wanker
Евгений
Попробовал изменять шрифты в вашем примере, и заметил, что шрифт, исползуемый по-умолчанию "ITCLubalinGraphMedium" выглядит хорошо, но если его заменить на другой (TrebuchetMS, verdana), то все не так гладко.
Я думаю, что это уже зависит от шрифта.
Allods Online
А как сейчас дела обстоят в браузерах? кажется уже все кроме ИЕ могут это дело без костылей, я прав?
Als
Абсолютным позиционированием несколько элементов сделать не проще
#
Als
Als
Для заголовков например
#
Als
Pipe
Без костылей поддерживают все кроме IE. А в общем хорошая статья.
#
Pipe
Александр
Спасибо Maler, его доделка помогла, в ie тоже нормально отображается
Александер
Спасибо автору за то что не поленился написать такую замечательную заметку. А иллюстации тени просто вдохновляют что-то творить своё и с тенью.
FrutyLoop
Ну наконец то хоть один нормальный мануал по text-shadow.
Максим
Вот неплохой генератор этого эффекта: www.wordpressthemeshock.com/css-text-shadow
Может кому пригодится. Спасибо за статью.
Игорь
Отличный мануал, спасибо.

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
counter strike mt2 silkroad pvp metin2 metin2 pvp knight pvp gm olarak başlayan pvpler pvp silkroad pvp serverler counter strike serverler msn show cam show görüntülü sohbet oyunlar suskunlar gazete oku