Css border shadow: box-shadow — CSS: Cascading Style Sheets

CSS Backgrounds and Borders Module Level 3: box-shadow Глава

CSS Backgrounds and Borders Module Level 3: box-shadow Chapter

Abstract

Этот документ содержит определение box-shadow свойство, которое было удалено из фона CSS3 и Модуль границ пока не стабилизируется.

Это обрывочный редакционный черновик, абсолютно нестабильный, и не имеет никакого официального статуса. Относитесь к нему так, как если бы вы приклейте записку на стол редактора.

Свойство box-shadow

Имя: коробка-тень
Значение: нет | <тень> [ , <тень> ]*
Начальный номер: нет
Применимо к: все элементы
Унаследовано: нет
Проценты: Н/Д
СМИ: визуальный
Расчетное значение: любая <длина> становится абсолютной; вычисляется любой цвет; в противном случае, как указано

Свойство box-shadow прикрепляет одну или несколько теней к коробке.

Свойство представляет собой список теней, разделенных запятыми, каждая из которых указана на 2-4 значения длины, необязательный цвет и необязательную «вставку» ключевое слово. Пропущенные длины равны 0, пропущенные цвета являются цветом, выбранным UA.

Где

   <тень>   = вставка? && [  <длина>  {2,4} &&  <цвет>  ? ] 

Компоненты каждого интерпретируются следующим образом:

  • Первая длина — это горизонтальное смещение тени. А положительное значение рисует тень, смещенную вправо от коробка, отрицательная длина влево.
  • Вторая длина — это вертикальное смещение. Положительное значение смещает тень вниз, отрицательную вверх.
  • Третья длина — это радиус размытия. Отрицательные значения не допустимый. Если он равен 0, тень резкая, в противном случае чем больше значение, тем сильнее размыта тень. Точного алгоритма нет. указано.
  • Четвертая длина — это радиус разброса. Положительные значения вызывают тень должна расти во всех направлениях по указанному радиусу. Отрицательные значения заставляют тень сжиматься. Тень не должна изменять форму при применении радиуса разброса: острые углы должны оставаться острым.
  • Цвет — цвет тени.
  • Ключевое слово »вставка», если оно присутствует, изменяет тень от внешней тени (та, которая затеняет коробку на холст, как бы приподнятый над холстом) во внутреннюю тень (тот, который затеняет холст на коробке, как если бы коробка была разрезана выходит из полотна и смещается за него).

Внешняя тень блока отбрасывает тень, как если бы рамка элемента были непрозрачны. Тень рисуется только за пределами края границы: это не рисуется внутри рамки элемента.

Внутренняя тень блока отбрасывает тень, как будто все, что находится за пределами отступа края были непрозрачны. Внутренняя тень рисуется только внутри края заполнения: он не рисуется за пределами поля заполнения элемента.

Если поле имеет ненулевой радиус границы, тень округляется таким же образом.

Это все еще обсуждается. Пожалуйста, присылайте комментарии на www-style.

Однако, если у коробки есть border-image, тени рисуются иначе: они маскируются изображением границы вместо области границы следующим образом.

  • Для внешней тени тень создается в предположении, что padding box непрозрачен, а затем комбинирует его с изображением границы для создания маски альфа-канала для тени. Значения спреда интерпретируется как увеличение размера поля заполнения и вызывает маска границы изображения должна быть соответственно изменена. Результирующая тень рисуется только за пределами отступа. коробка.
  • Для внутренней тени тень создается в предположении, что все за пределами поля границы непрозрачно, а затем комбинируя это с border-image для создания маски альфа-канала для тени. Значения спреда интерпретируются как уменьшение размера рамки и вызывают маска границы изображения должна быть соответственно изменена. Результирующая тень рисуется только внутри границ рамки.

Если UA не может создавать тени, учитывающие прозрачность и частично прозрачные аспекты бордюрного изображения, оно не должно создавать вообще тень. UA может игнорировать значения спреда при отрисовке тени для рамки-изображения.

Если элемент имеет несколько полей, все они получают тени, но тени рисуются только там, где также должны быть нарисованы границы, см. «box-break».

Эффекты тени применяются спереди назад: первая тень сверху, а остальные слои сзади. Тени не влияют макет и может перекрывать другие блоки или их тени. С точки зрения укладки контексты и порядок рисования, внешние тени элемента рисуются непосредственно под фоном этого элемента и внутренние тени элемент рисуется непосредственно над фоном этого элемента (ниже границ и изображения границы, если таковые имеются).

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

Ниже приведены несколько примеров оранжевого блока с синей окантовкой. получает тень.

 граница: 5 пикселей сплошной синий;
цвет фона: оранжевый;
ширина: 144 пикселя;
высота: 144 пикселя; 
 радиус границы: 20 пикселей; 
 радиус границы: 0; 
 коробка-тень:
  RGBA(0,0,0,0,4)
  10 пикселей 10 пикселей; 
 коробка-тень:
  RGBA(0,0,0,0,4)
  10 пикселей 10 пикселей
  вставка 
 коробка-тень:
  RGBA(0,0,0,0,4)
  10 пикселей 10 пикселей 0
  10px /* разворот */ 
 коробка-тень:
  RGBA(0,0,0,0,4)
  10 пикселей 10 пикселей 0
  10px /* разворот */
  вставка 

Свойство »box-shadow» применяется к псевдоэлементу »::first-letter», но не псевдоэлемент »::first-line».

Внешние тени не влияют на внутренние элементы таблицы в модели сворачивающейся границы. Если тень определена для ребра с одной границей в модели сворачивающейся границы есть несколько границ толщины (например, внешняя тень на столе, где одна строка имеет более толстые границы чем другие, или внутреннюю тень на ячейке таблицы rowspanning, которая примыкает ячейки с разной толщиной границ), точное положение и отрисовка его тени не определены.

Ссылки

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

Другие ссылки

Индекс свойств

Индекс

CSS Outer Glow | UnusedCSS

CSS предлагает очень мощное свойство box-shadow. Это позволяет разработчикам имитировать тени — как будто наши HTML-элементы находятся в настоящем трехмерном пространстве и могут перемещаться по оси Z, чтобы подняться над фоновым содержимым или погрузиться в него.

Давайте представим это на следующем примере. У нас есть две кнопки в нашем представлении. Один без box-shadow, а другой с ним. Можно заметить, что без box-shadow вся перспектива остается двухмерной, как если бы кнопка была нарисована карандашом на бумаге. Но с box-shadow наш мозг начинает обрабатывать вид как трехмерную перспективу. Мы чувствуем, что коробка является настоящим трехмерным элементом, размещенным или парящим над настоящей трехмерной плоскостью. Это сила box-shadow.

Box-shadow описывается

  • Горизонтальное и вертикальное смещения от краев целевого элемента
  • Радиус размытия
  • Радиус распространения
  • Цвет

Вы можете изучить детали этих свойств и поэкспериментировать с ними на странице ресурсов MDN.

Теперь, когда у нас есть краткое введение в мир коробчатых теней, обратим внимание на основную тему этой статьи — внешнее свечение.

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

Простое свечение

Неиспользуемый CSS

Давайте создадим этот эффект с помощью box-shadow.

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

 <дел>
   
Простое свечение
<дел>

Неиспользуемый CSS

 .родитель {
  набивка: 10рем;
  дисплей: гибкий;
  flex-направление: столбец;
  выравнивание содержимого: по центру;
  выравнивание элементов: по центру;
  цвет фона: черный;
  белый цвет;
  выравнивание текста: по центру;
}
 
 .карта {
  дисплей: гибкий;
  выравнивание содержимого: по центру;
  выравнивание элементов: по центру;
  ширина: 180 пикселей;
  набивка: 1,5 бэр;
  поле сверху: 25px;
  фон: белый;
  цвет: #48abe0;
  выравнивание текста: по центру;
  радиус границы: 5px;
  курсор: указатель;
}

 
Простое свечение

Неиспользуемый CSS

У нас есть наша карта в темном контейнере, и единственное, что осталось, это внешнее свечение.

Интересно, что до внешнего свечения всего 1 строка CSS. Мы добиваемся правильного размытия box-shadow путем калибровки значений размытия и радиусов распространения. Чтобы лучше понять это, вот разбивка того, как применяется box-shadow:

  • Сначала браузер отображает элемент как сплошной цвет (конечно, мы можем выбрать этот цвет)
  • Во-вторых, браузер увеличивает это изображение на радиус разворота. Если к элементу применен радиус границы, то большее изображение также будет иметь закругленные углы. Если радиус границы не применяется, то большее изображение будет иметь прямые углы
  • В-третьих, браузер применяет к изображению размытие по Гауссу, используя радиус размытия

Вот видео, демонстрирующее, как изменение значений радиусов размытия и распространения влияет на тень.

Возвращаясь к внешнему свечению, давайте применим необходимое объявление CSS.

 .карта {
// остальные стили
box-shadow: 0 0 50px 15px #48abe0;
}

 
Простое свечение

Неиспользуемый CSS

Попробуйте эту box-shadow в нашем редакторе

Обратите внимание, что наша общая цветовая схема и значения радиусов распространения и размытия box-shadow имеют наибольшее значение при создании этого эффекта. При правильной калибровке этих значений мы смогли использовать box-shadow для имитации эффекта свечения.

CSS поддерживает визуализацию нескольких теней с использованием списка, разделенного запятыми. Тени визуализируются спереди назад в порядке объявления. Таким образом, первая тень в списке будет впереди.

Давайте обновим box-shadow в приведенном выше примере, чтобы отображать несколько теней.

 .карта {
  // …
  тень блока: 0 0 10px 5px #48abe0,
              0 0 20px 7px #ebecca,
              0 0 25px 20px #8a2be2,
              0 0 30px 25px #ff1493;
}

 
Multiple Glows

Unused CSS

Попробуйте этот box-shadow в нашем редакторе

Text Glow

CSS предлагает еще одно замечательное свойство, которое можно использовать для создания эффектов свечения текста. Свойство text-shadow. Рассмотрим следующий пример text-glow.

Неиспользуемый CSS

Попробуйте эту тень текста в нашем редакторе

Давайте создадим ее с нуля.

 <класс div="обертка">
 

Неиспользуемый CSS

 .обертка {
 семейство шрифтов: без засечек;
 набивка: 10рем;
 дисплей: гибкий;
 выравнивание содержимого: по центру;
 цвет фона: белый;
}

 
 .свечение {
 белый цвет;
 text-shadow: rebeccapurple 0 0 10px;
}

 

Как видно, свечение было легко добавлено с помощью одной строки CSS — text-shadow.

text-shadow: rebeccapurple 0 0 10px;

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

Давайте анимируем в приведенных выше примерах переход цветов текста и тени. Обратите внимание, что нам нужно установить одну и ту же тень в начальном (0% кадра) и конечном (100% кадра) состоянии анимации. В противном случае мы увидим сбой, поскольку окончательный цвет тени сразу же изменится на исходный цвет тени при сбросе цикла анимации.

 @keyframes тени {
 0% { text-shadow: #48abe0 0 0 10px; }
 50% { text-shadow: сине-фиолетовый 0 0 10px; }
 75% { text-shadow: rebeccapurple 0 0 10px;}
 100% { text-shadow: #48abe0 0 0 10px; }
}
 
 h3 {
 // ...
 анимация: тени 2s бесконечные
} 

То же самое относится к теням блока. Следующий codepen демонстрирует как внешнее, так и текстовое свечение, а также их анимацию.

 <дел>

  <дел>
     
Простое свечение
<дел>

Неиспользуемый CSS