Как работает text-shadow
text-shadow рисует за текстом его копию, смещенную и размытую. Вы задаете горизонтальное смещение, вертикальное смещение, необязательное размытие и цвет.
3px 3px 0 #f59e0b означает 3px вправо (физически, при любом направлении письма), 3px вниз, без размытия, янтарный. Вторая тень размыта на 6px и использует полупрозрачный черный, это обычный рецепт для легкого эффекта глубины.
Синтаксис
text-shadow: <offset-x> <offset-y> <blur-radius>? <color>?;
| Значение | Обязательно | Смысл |
|---|---|---|
| offset-x | Да | Положительное сдвигает тень вправо, отрицательное влево |
| offset-y | Да | Положительное сдвигает вниз, отрицательное вверх |
| blur-radius | Нет (по умолчанию 0) | Насколько мягкий край; отрицательные значения невалидны |
| color | Нет (по умолчанию цвет текста) | Может стоять первым или последним |
text-shadow: none убирает унаследованную тень. Меняйте значения ниже, чтобы увидеть действие каждого:
Попробуйте -4px -4px 0 #16a34a, 0 0 10px red и две тени через запятую.
Несколько теней: свечение, обводка и объем
Запятые складывают тени; первая рисуется сверху. Из одного этого правила получаются три эффекта:
- Свечение: нулевые смещения, растущее размытие, темный фон.
- Обводка: четыре четкие тени, по одной на каждую диагональ. Подходит для тонкой обводки; для более толстой ровной обводки
-webkit-text-stroke: 2px #111827(поддерживается во всех актуальных браузерах, несмотря на префикс) рисует контур по краям букв. - Объем: серия четких теней, каждая на 1px дальше, и буквы выглядят выдавленными.
Читаемый текст на пестром фоне
Белый текст на фотографии или узоре теряет края там, где фон светлый. Мягкая темная тень возвращает их без видимой подложки:
Тень помогает, но не гарантирует контрастность. Для длинного текста поверх изображения добавьте за текстом еще и сплошную или градиентную подложку.
text-shadow и box-shadow
| text-shadow | box-shadow | |
|---|---|---|
| Повторяет | Формы букв | Блок элемента (и его скругление) |
| Значение spread | Нет | Да |
inset | Нет | Да |
| Несколько через запятую | Да | Да |
Тени для карточек и кнопок разобраны на странице тень box-shadow.
Частые ошибки
- Тяжелые темные тени на основном тексте. Они размывают формы букв. Оставьте тени для заголовков и коротких подписей.
- Забытое второе смещение.
text-shadow: 2px #000невалидно; оба смещения обязательны. - Отрицательное размытие. Оно невалидно, и все объявление отбрасывается.
- Ожидание, что тень займет место. Она только рисуется; большие тени могут перекрыть следующую строку или обрезаться через
overflow: hidden. - Свечение на светлом фоне. Светлое свечение на белом не видно. Свечению нужен темный фон.
Часто задаваемые вопросы
Какой синтаксис у text-shadow?
text-shadow: offset-x offset-y blur-radius color;, например text-shadow: 2px 2px 4px rgb(0 0 0 / 40%);. Оба смещения обязательны; размытие по умолчанию 0, а цвет по умолчанию цвет текста.
Как добавить несколько теней к тексту?
Разделите тени запятыми: text-shadow: 0 0 4px #fff, 0 0 12px #2563eb;. Первая тень рисуется поверх следующих.
Как сделать эффект свечения текста?
Используйте тени без смещения и с размытием, часто несколько с растущим размытием: text-shadow: 0 0 4px #60a5fa, 0 0 12px #2563eb;. На темном фоне это выглядит как неоновое свечение.
Есть ли у text-shadow значение spread, как у box-shadow?
Нет. У text-shadow нет spread и нет ключевого слова inset. Чтобы сделать тень вокруг букв толще, сложите несколько теней или используйте -webkit-text-stroke для обводки.
Влияет ли text-shadow на раскладку?
Нет. Тень только рисуется: она не занимает места и не сдвигает соседнее содержимое, поэтому большая тень может перекрывать элементы рядом.