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

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

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
Может кому пригодится. Спасибо за статью.
Игорь
Отличный мануал, спасибо.
Mobile spy
В старых IE5-6 не работает, но в связи с их отмиранием эффекты можно приспокойно использовать...
Паша
http://vremenno.net/examples/text-shadow/
1) Жмём CRTL-A
2) Жмём CRTL-C
3) Вставляем в текстовый редактор - видим дупы.

Как скрыть "тени" от CTRL-C ?
Спасибо!
#
Паша

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

как выглядит какой тег
жирный текст <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>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler