Error box shadow

When I run my CSS through the W3C's validator, any time I use the box-shadow property, I get an error like this: 0 is not a box-shadow value : 0 0 10px #000 It appears to stop at whatever the f...

When I run my CSS through the W3C’s validator, any time I use the box-shadow property, I get an error like this:

0 is not a box-shadow value : 0 0 10px #000

It appears to stop at whatever the first value is, since changing the order of the values will change the error to match:

#000 is not a box-shadow value : #000 0 0 10px

I’m validating with the profile set to CSS3, so it’s not a case of me forgetting to change the default profile setting from CSS2 (where the box-shadow property doesn’t exist).

Why doesn’t it think any of the values I’m using are correct? The shadow will render perfectly fine in Firefox and any other browser that supports the non-prefixed box-shadow property.

BoltClock's user avatar

BoltClock

687k158 gold badges1373 silver badges1349 bronze badges

asked Jan 17, 2012 at 19:08

daGUY's user avatar

It’s a known validator bug. Apparently they forgot that unitless values are permitted (especially unitless zero values). There’s nothing wrong with your CSS; the values you’re using are correct.

If you’re picky and you can’t put up with the bug tarnishing your otherwise would-have-been successful validation, you can simply add units to your zero values:

box-shadow: 0px 0px 10px #000;

But whenever I run into situations like this, I normally don’t bother, knowing that it’s a harmless validator bug and not something wrong with my CSS.

Note that as of this update the bug has been fixed since August 30, 2012.

answered Jan 17, 2012 at 19:12

BoltClock's user avatar

BoltClockBoltClock

687k158 gold badges1373 silver badges1349 bronze badges

5

Change it to 0px 0px 10px #000 and it will validate. That’s probably because of the beta version of the validator.

answered Jan 17, 2012 at 19:13

Zoltan Toth's user avatar

Zoltan TothZoltan Toth

46.6k12 gold badges118 silver badges134 bronze badges

The validator has a lot of bugs. Its new and its on beta stage.

user229044's user avatar

user229044

229k40 gold badges329 silver badges336 bronze badges

answered Jan 18, 2012 at 16:38

Mikronani Mikronani's user avatar

For some reason I can’t get the CSS box-shadow to show up on Safari or Chrome on my iPhone. Here is the code:

input.error {
  box-shadow: 0 0 5px 1px rgba(224, 39, 14, 1);
  -webkit-box-shadow: 0 0 5px 1px rgba(224, 39, 14, 1); 
  -moz-box-shadow: 0 0 5px 1px rgba(224, 39, 14, 1);
}

The code is being used on HTML Input fields, would this cause any problems? What am I doing wrong?

Shows up in browser fine…

asked Mar 15, 2013 at 19:26

Romes's user avatar

1

If this in a form block, add

-webkit-appearance: none;

iPhones can mess up forms. See here.

Vel's user avatar

Vel

8,8876 gold badges34 silver badges65 bronze badges

answered Mar 15, 2013 at 19:29

Bjoern's user avatar

BjoernBjoern

15.7k4 gold badges43 silver badges48 bronze badges

2

Try adding -webkit-appearance: none; iOS tends to mess up forms.

answered Mar 15, 2013 at 19:30

Chris Hawkes's user avatar

Chris HawkesChris Hawkes

11.6k6 gold badges57 silver badges65 bronze badges

Because you write it mistake
try this:

-webkit-box-shadow: 0 5px 1px rgba(224, 39, 14, 1);   

you just write 3 size for it

answered Mar 15, 2013 at 19:29

Hamid Talebi's user avatar

Hamid TalebiHamid Talebi

1,3582 gold badges24 silver badges42 bronze badges

I’ve tried EVERYTHING listed on the internet to fix this issue in a static sense. The ONLY thing I could get to work was to use the -webkit-box-shadow styling, but to add #222 like so:

-webkit-filter: drop-shadow(0.5px 1px 1px #222);

answered Jul 25, 2020 at 14:11

The ARCHIT3CT's user avatar

1

In my case I fixed adding ALL these rules:

-webkit-appearance: none;
border:0;
border-radius: 1px;
height: 1px;

In particular setting also the height.

answered Mar 31, 2021 at 14:29

Diego D's user avatar

Diego DDiego D

1,68519 silver badges23 bronze badges

@DaddyWarbucks

I am having trouble getting the Paper theme to compile properly because there is no mixin named box-shadow, so any inclusion of it fails

.navbar {
  border: none;
  @include box-shadow(0 1px 2px rgba(0,0,0,.3));
...

This is also failing for Error: no mixin named placeholder
Any help is appreciated, thanks!

@thomaspark

Thanks, this was also mentioned in #480. Since the box-shadow vendor prefixes are no longer needed, I’ll be removing use of the mixin from all themes.

@DaddyWarbucks

If I am not mistaken, I believe that would just entail replacing @include box-shadow(inset 0 -1px 0 #ddd) with box-shadow: inset 0 -1px 0 #ddd. Correct? I wouldn’t mind handling that and submitting a PR.

Nice work on all of these BTW! I built an app called stackedsports.com with this. Not the marketing site at that address, but the actual app that site is talking about. And a few others too, so I’d be happy to make a contribution!

@thomaspark

@DaddyWarbucks, cool that you’ve found such use for the themes! Would be great if you handled this issue.

The best way to go about it is to remove the .box-shadow() mixins in each theme’s bootswatch.less file, then build the CSS and SASS versions by running grunt and grunt convert_less respectively in command line.

Let me know if you have any questions about it.

@DaddyWarbucks

Oh I see. That is cool you manage it in one language and convert it to the other. I will do that and submit a PR next week probably.

@DaddyWarbucks

I am having a bit of trouble finding where the .box-shadow() mixin is defined in the less files. I generally use SCSS, but I did some quick research on LESS to see how mixins with parameters are declared. I don’t see anything like this: .border-radius(@radius) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } taken from http://lesscss.org/features/#mixins-parametric-feature
I figure I don’t really need to find that, but I want to understand what I am really doing before I start just ripping those out.
Could you help me find where that «function» is actually defined? Or am I understanding correctly that is is not defined at all…and therefore the breakage?

On similar note, I could flat out remove .box-shadow(none), instead of replacing it with .box-shadow: none. Because there is no vanilla BS CSS to be overwritten, there is no need to specify none, correct?

@thomaspark

You should be able to find the definition at bower_components/bootstrap/less/mixins/vendor-prefixes.less.

Bootstrap 3.3.7 does need to be overwritten, but only uses the webkit prefix. We could drop the mixins by writing out -webkit-box-shadow and box-shadow, planning to drop webkit in the future.

@stphane

I encountered this issue using v3.3.7 SCSS «Lumen» theme, along with a PHP scss parser, neither grunt nor Less. Prompted errors said like there were a bunch of missing mixins.

Undefined mixin box-shadow: line: 35
Undefined mixin transition: line: 310

Imports statements seamed to be ordered the right way though

@import "../../web/bootswatch/lumen/_variables.scss";
@import "../../web/bootswatch/lumen/_bootstrap.scss";
@import "../../web/bootswatch/lumen/_bootswatch.scss";

I could stop this issue by replacing «/bootswatch/lumen/_bootstrap.scss» with «bootstrap-sass/assets/stylesheets/_bootstrap.scss». (Simply run bower install bootstrap-sass-official -S to get bootstrap original scss main file). Error disappeared but still I have to check that the theme is not broken.
It’s like «_bootstrap.scss» and _bootswatch.scss override files belong to differents versions.

Thank you for sharing such nice and neat themes !

@thomaspark

Hey @stphane, it sounds like you’re doing it correctly. The second line should refer to _bootstrap.scss from bootstrap-sass-official, as it doesn’t exist under lumen. All should be well!

@stphane

@thomaspark Thank you for your time. As you can see I’ve edited my answer few minutes after. I should now be set up !

@ChristianClassen

I just had the same issue when using Bootstrap and Bootswatch, installed via Rails Assets, with Rails 5.0

I did the following to resolve the issue and hope I helps somebody else:

  1. Add to Gemfile
source 'https://rails-assets.org' do
  gem 'rails-assets-bootstrap-sass-official', '3.3.7'
end
  1. Copy Bootswatch Theme files from Github into vendor/assets folder
  • vendor/assets/stylesheets/bootswatch/[theme_name]/_variables.scss
  • vendor/assets/stylesheets/bootswatch/[theme_name]/_bootswatch.scss
  1. Use @import in Manifest file (application.css.scss)
@import "bootswatch/[theme_name]/variables";
@import "bootstrap-sass-official";
@import "bootswatch/[theme_name]/bootswatch";

@uxgnod

same problem and solved with @b2e9f523 ‘s way, but don’t know why…

@stale

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

  • Remove From My Forums
  • Question

  • User1991482975 posted

    Hi, i was wondering way visual studio tell me that there is a a validation error for this kind of css :

        box-shadow: 0 1px 2px rgba(34, 25, 25, 0.4);
    or
     background-color: rgba(255, 255, 251, 0.6);
        background: rgba(255, 255, 251, 0.6);

    It shoul be fine, but for visual studio it is not.. .It is telleing me tha there is a vuale not valid for this property..

    how comes?

Answers

  • User61956409 posted

    Hi grafic.web,

    I don’t get any error or warning with the following code in visual studio 2013. And the code works fine in IE11.

    #con {
        width: 300px;
        height: 100px;
        box-shadow: 0 1px 2px rgba(34, 25, 25, 0.4);
        background-color: rgba(255, 255, 251, 0.6);
    }
    
    <div id="con"></div>

    Best Regards,

    Fei Han

    • Marked as answer by

      Thursday, October 7, 2021 12:00 AM

Я экспериментировал с CSS3 и нашел кое-что странное. Вот часть стиля DIV:

border:#446429 solid 1px;
border-radius:15px;
-moz-border-radius:15px;
-webkit-border-radius:15px;
box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset;
-moz-box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset;
-webkit-box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset;

Рендеринг в Opera и Firefox одинаков и идеален:

alt text

Но Chrome отображает тень за пределами границы:

alt text

Так должно быть или я что-то важное упустил?

9 ответы

ответ дан 30 мая ’10, 07:05

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

Например, если у вас была страница с белым фоном:

-webkit-box-shadow:1px 1px 1px #fff inset,0px 0px 5px #333 inset;

ответ дан 25 авг.

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

<div class="foo"><div>Hello!</div></div>
<style type="text/css">
    .foo {-webkit-border-radius: 10px; overflow: hidden;}
    .foo div {-webkit-border-radius: 10px; -webkit-box-shadow: inset 1px 1px rgba(50%, 50%, 50%, .5);}
</style>

Объявленное выше исправление с границами приводит к сбою радиуса границы и несовместимо с фоновым изображением под элементом (из-за цвета границы).

Благодарю.

ответ дан 30 дек ’10, 13:12

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

box-shadow:inset 0 0 7px #000;

Вам нужно будет добавить такую ​​границу:

border:solid 7px #fff;

Это третье число в объявлении box-shadow, которое вам нужно сопоставить (или превзойти) с шириной границы. если вам не нужна большая толстая старая рамка на элементе, вам, очевидно, нужно сделать границу того же цвета, что и фон за ней. Таким образом, этот обходной путь не очень помогает, если ваш элемент находится над изображением с рисунком или градиентом. Но на однотонных цветах работает прилично.

Создан 01 ноя.

ответ дан 15 дек ’10, 20:12

Попробуйте это -webkit-box-shadow: inset 0px 0 7px rgba (255, 242, 94, 0.4); использование rgba, похоже, исправляет это.

Желаем вам удачи!

Создан 06 сен.

Использование отрицательных значений решило для меня проблему.

-webkit-border-radius:10px;
-webkit-box-shadow: -1px -1px 2px #CCC;

Создан 05 янв.

Эта ошибка исправлена ​​в последней сборке канарейки. :)

Создан 08 янв.

Решение Бет Фолд почти работает, есть небольшая ошибка, оно должно выглядеть следующим образом:

-webkit-box-shadow:1px 1px 0px 1px #fff inset, 0px 0px 5px #333 inset;

Где #fff — это цвет фона (за рамкой), а # 333 — это цвет тени.

Третье значение в -webkit-box-тень определяет размер размытия, а четвертый определяет размер тени (непрозрачности), поэтому последний должен быть установлен на 1 пиксель.

ответ дан 16 мар ’11, в 09:03

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

css
google-chrome

or задайте свой вопрос.

Google Chrome on Windows is notorious for the border-radius/Inset box-shadow bug. This bug has now spread to the Mac version of Chrome (version 10.0.648.127).

If you aren’t familiar with the bug here is a quick run down of the problem: when applying a border radius on an input element, inset box-shadow will ignore the border-radius and act as if it isn’t there at all. Result? You receive an ugly hard corner that goes underneath your borders.

After a bit of a fiddle I came up with a solution and possibly found the actual cause of this issue. It turns out that if your border radius is larger than the height of the element (taking in to account padding, font-size, and so forth) this visual error will occur.

We actually suffered this problem here on Design Festival on the search input. Here was the initial CSS that we were using:

input.text, #s {
    float: left;
    width: 163px;
    border: 1px solid #C0C0BA;
    font-size: 85%;
    padding: 4px 15px 4px 30px;
    -webkit-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.17);
    -moz-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.17);
    box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.17);
    background: white url(/wp-content/themes/designfestival/images/social-icons/mail.png) no-repeat 7px 4px;
    height: 14px;
    }

input {
    -webkit-border-radius: 20px;
    -moz-border-radius: 20px;
    border-radius: 20px;
    padding: 2px 3px 3px;
    font-family: "Liberation Serif Italic", "Times New Roman", Serif;
    font-style: italic;
    }

Here’s a screenshot of how that rendered:

The render of the box shadow bug magnified.

The Fix

By changing the border radius of the input element I was able to fix the problem of the angry inset box-shadow.

Here is the finished CSS with the fix:

input.text, #s {
    float: left;
    width: 163px;
    border: 1px solid #C0C0BA;
    font-size: 85%;
    padding: 4px 15px 4px 30px;
    -webkit-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.17);
    -moz-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.17);
    box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.17);
    background: white url(/wp-content/themes/designfestival/images/social-icons/mail.png) no-repeat 7px 4px;
    height: 14px;
    }

input {
    -webkit-border-radius: 12px;
    -moz-border-radius: 12px;
    border-radius: 12px;
    padding: 2px 3px 3px;
    font-family: "Liberation Serif Italic", "Times New Roman", Serif;
    font-style: italic;
    }

That ought to do it. Have you encountered this bug?

Время прочтения
7 мин

Просмотры 29K

Тени помогают сделать визуальную составляющую сайта интересной и эстетичной. В посте рассмотрим свойство CSS box-shadow и то, как его можно стилизовать.

Что за свойство box-shadow?

Свойство box-shadow позволяет добавить тень вокруг элемента на веб-странице. Тень подсказывает пользователю, является ли элемент — кнопка, картинка — интерактивным. Благодаря теням, вне экранов гаджетов мы получаем представление о размере и глубине объекта, и свойство box-shadow добавляет реализм в оформление сайта.

Вот как обычно это свойство box-shadow прописывают:

box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.5)

Первый четыре значения такие:

  1. x-offset, определяет горизонтальное положение тени;

  2. y-offset, определяет вертикальное положение тени;

  3. радиус размытия, который влияет на резкость тени. Чем выше значение, тем менее насыщенные тени, и наоборот;

  4. четвёртое значение определяет распространение тени.

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

box-shadow: 0px -5px 10px 0px rgba(0, 0, 0, 0.5)

Если установить распространение на 0 px, тень будет такого же размера, что и элемент. Положительное значение сделает тень больше, отрицательное — уменьшит. 

Как сделать тени реалистичными

Следующее значение в свойстве — цвет. Используем цвета rgba() с альфа-каналом, чтобы указывать непрозрачность: это важно для стилизации под реальность, ведь тени в хорошо освещённых местах не чисто чёрные и не слишком плотные. Можете понаблюдать, как тени ведут себя по отношению к источникам света и к поверхностям, на которых лежат. Самые тёмные тени падают на плоскости, которые ближе всего к объекту, а дальше они размываются. Поэтому тень не должна быть похожа на чёрную обводку.

Почему не нужен фильтр dropshadow()

Это фильтр, который добавляет тень вокруг изображения. Его работа сильно отличается от box-shadow. Вот как выглядит разница в коде:

box-shadow: 5px 5px 5px 0px rgba(0,0,0,0.3);

filter: drop-shadow(5px 5px 5px rgba(0,0,0,0.3));

Основы box-shadow

Чтобы потренироваться, создайте простой контейнер HTML:

<body>
    <div class=box>
    </div>
</body>

Затем CSS:

div{
  height: 150px;
  width: 150px;
  background: #fff;
  border-radius: 20px;
 }
.box{
  box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.5); 
}

Вот что получится:

Как использовать box-shadow с псевдоклассом :hover и свойством transform 

На box-shadow может повлиять псевдокласс :hover. Он добавляет тень к компонентам, у которых её не было, или меняет существующую тень. Вот как это выглядит со свойством transform:

.box:hover{
  box-shadow: 0px 10px 20px 5px rgba(0, 0, 0, 0.5);
  transform: translateY(-5px);
}

Свойство transform создаёт иллюзию того, что блок приподнимается на странице. Функция translate() изменяет размер окна.

Добавьте ключевое слово inset, чтобы поместить тень внутрь рамки блока или элемента. Так блок будет казаться погружённым в страницу.

.box2{
  box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.5);
}
.box2:hover{
  transform: translateY(5px);
  box-shadow: inset 0px 10px 20px 2px rgba(0, 0, 0, 0.25);
}

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

Альтернативой функции translate() будет scale(). Если translate() изменяет положение тени по осям x и y, scale() увеличивает размер блока по этим же осям. Во втором поле добавьте значение scale() в :hover. Размер блока увеличится в 1,1 раза.

.box2:hover {
  transform: scale(1.1);
  box-shadow: 0px 10px 20px 2px rgba(0, 0, 0, 0.25);
}

Создание многослойных теней

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

box-shadow: 0px 1px 2px rgba(0,0,0,0.1), 
            0px 2px 4px rgba(0,0,0,0.1), 
            0px 4px 8px rgba(0,0,0,0.1), 
            0px 8px 16px rgba(0,0,0,0.1);

Значение распространения не указано — в данном случае не нужно, но эксперименты никто не запрещает. 

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

box-shadow: 0px 0px 0px 2px rgba(0,0,0,0.5), 
            0px 2px 4px rgba(0,0,0,0.1),
            0px 4px 8px rgba(0,0,0,0.1),
            0px 8px 16px rgba(0,0,0,0.1);

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

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

Создаём неоновые тени

В реальности тени обычно серые или чёрные, разной степени прозрачности. Чтобы изменить цвет тени, надо поменять источник света. В вебе вместо этого применяют box-shadow. Попробуем на примере:

.box{
  box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.7); 
}
.box2{
  box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.7);
}

Вышло:

Если тени наслаивать друг на друга, свечение можно сделать ярче:

box-shadow: 0px 1px 2px 0px rgba(0,255,255,0.7),
            1px 2px 4px 0px rgba(0,255,255,0.7),
            2px 4px 8px 0px rgba(0,255,255,0.7),
            2px 4px 16px 0px rgba(0,255,255,0.7);

Лучше всего такие тени смотрятся, если сделать их контрастными цветами на тёмном фоне. Яркость можно менять с помощью прозрачности.

Создаём неоморфные тени

Визуально интересный эффект, который имитирует объекты из реальной жизни, такой 3D на минималках. Первые два эффекта, которые мы потренируемся создавать, касаются плоских компонентов, которые как бы парят над страницей, отбрасывая тени на фон. Кажется, что перед нами рельефное изображение.

box-shadow: -10px -10px 15px rgba(255,255,255,0.5),
            10px 10px 15px rgba(70,70,70,0.12);

Рельеф можно направить и в глубину:

box-shadow: inset -10px -10px 15px rgba(255, 255, 255, 0.5), 
           inset 10px 10px 15px rgba(70, 70, 70, 0.12);

Вот какой будет результат. Белая тень показывает направление «источника света» и работает, как блик. Похоже на реальный мир:

Попробуем сделать переключатель, на который пользователь сможет «нажимать».

Для начала делаем чекбокс.

<body>
    <input type="checkbox" />
</body>

Добавляем CSS:

input[type="checkbox"] {
  height: 200px;
  width: 200px;
  top: 50%;
  left: 50%;
  -webkit-appearance: none;
  box-shadow: 
    -10px -10px 15px rgba(255, 255, 255, 0.5),
    10px 10px 15px rgba(70, 70, 70, 0.12);
  position: absolute;
  transform: translate(-50%, -50%);
  border-radius: 50%; /*Makes the circle*/
  border: 20px solid #ececec;
  outline: none;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

Добавляем иконку. В примере иконка из Font Awesome. 

input[type="checkbox"]::after {
  font-family: FontAwesome;
  content: "f011"; /*ON/OFF icon Unicode*/
  color: #7a7a7a;
  font-size: 70px;
}

Задайте свойства, которые отображаются при нажатии на кнопку. Добавьте box-shadow внутри круга, чтобы создать два вложенных слоя.

input[type="checkbox"]:checked{
  box-shadow: 
  -10px -10px 15px rgba(255, 255, 255, 0.5),
  10px 10px 15px rgba(70, 70, 70, 0.12),
  inset -10px -10px 15px rgba(255, 255, 255, 0.5),
  inset 10px 10px 15px rgba(70, 70, 70, 0.12);
}

Установите цвет значка после щелчка.

input[type="checkbox"]:checked::after{
  color: #15e38a;
}

Итог:

Поддержка box-shadow в браузерах

К сожалению, не все браузеры, особенно в ранних версиях, поддерживают box-shadow.  Так что надо использовать расширение webkit.

-webkit-box-shadow: 1px 1px 0px rgba(0,0,0,0.1);/*For webkit browsers*/

-moz-box-shadow: 1px 1px 0px rgba(0,0,0,0.1);/*For Firefox*/

box-shadow: 1px 1px 0px rgba(0,0,0,0.1);

Например, для корректного отображения в Chrome с 4 по 9 версию нужен префикс -webkit-. Mozilla Firefox в версиях 2 и 3 свойство не поддерживается и частично поддерживается в версии 3.5 and 3.6 (с префиксом -moz-). Safari частично поддерживает свойство в версиях 3.1 и 4 с префиксом -webkit-. Opera поддерживает во всех версиях, кроме 10.1 А у Microsoft Edge всё хорошо.

Если браузер не поддерживает тени, они просто не отображаются и не влияют на макет.

Подсказки

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

  • Лучше меньше. При наложении теней браузер выполняет больше работы. Для современных устройств это не проблема, но если делаете проект для аудитории с потенциально старыми устройствами или плохим интернетом, не перестарайтесь.

  • Нужна логика. Не надо делать тени бессистемными. Предполагается, что у вас есть источники света, которые влияют на объекты на странице. Поэтому в расположении теней будет логика.

  • Без анимации. Если анимировать  box-shadow, производительность упадёт. Да и анимированные тени — это уже слишком.

  • Используйте инструменты для наложения теней. Если лень писать много строк кода, а многослойных теней хочется, попробуйте shadows.brumm.af. Он добавляет к объекту до 10 слоёв box-shadow и экономит время, чтобы не вводить вручную несколько значений. 

CSS-свойство box-shadow добавляет тень к элементу. Через запятую можно задать несколько теней. Тень описывается смещениями по оси X и Y относительно элемента, радиусом размытия и распространения, а также цветом.

Интерактивный пример

Свойство box-shadow включает отбрасывание тени от границ практически любого элемента. Если для элемента с тенью задан border-radius, то отбрасываемая тень также будет с закруглёнными углами. Порядок наложения нескольких теней такой же, что и у текстовых теней: первая указанная тень будет поверх остальных.

Генератор теней — интерактивный инструмент, позволяющий сгенерировать значение для box-shadow.

Синтаксис

/* Ключевые слова */
box-shadow: none;

/* offset-x | offset-y | color */
box-shadow: 60px -16px teal;

/* offset-x | offset-y | blur-radius | color */
box-shadow: 10px 5px 5px black;

/* offset-x | offset-y | blur-radius | spread-radius | color */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);

/* inset | offset-x | offset-y | color */
box-shadow: inset 5em 1em gold;

/* Любое количество теней через запятую */
box-shadow: 3px 3px red, -1em 0 0.4em olive;

/* Глобальные значения */
box-shadow: inherit;
box-shadow: initial;
box-shadow: revert;
box-shadow: revert-layer;
box-shadow: unset;

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

  • Два, три или четыре значения длины (<length>).
    • Если указаны только два значения, они будут означать смещение по X (<offset-x>) и смещение по Y (<offset-y>).
    • Третье значение устанавливает радиус размытия (<blur-radius>).
    • Четвёртое значение задаёт радиус распространения (<spread-radius>).
  • Необязательное ключевое слово inset.
  • Необязательное значение цвета (<color>).

Для одновременного создания нескольких теней используйте список значений, разделённых запятыми.

Значения

inset

Если не указано (по умолчанию), то тень будет отбрасываться от элемента (придавая эффект выпуклости блоку).
Наличие ключевого слова inset отбрасывает тень внутри элемента (создавая эффект вдавленности блока). Внутренние тени начинаются с рамок элемента (даже если они прозрачные), над фоном элемента, но не под его содержимым.

<offset-x> <offset-y>

Есть два значения <length>, отвечающие за смещения тени. Значение <offset-x> задаёт положение тени по горизонтали. Отрицательные значения размещают тень слева от элемента. Значение <offset-y> определяет положение тени по вертикали. Отрицательные значения располагают тень выше элемента. См. <length>, чтобы узнать список допустимых единиц.
Если смещение по обоим осям равно 0, то тень будет отбрасываться за элементом (в таком случае при наличии значений <blur-radius> и/или <spread-radius> будет эффект размытия).

<blur-radius>

Это третье значение <length>. Чем больше это значение, тем шире и светлее будет тень. Отрицательные значения не допускаются. Если не указано (по умолчанию), используется 0 (край тени будет резким). Спецификация не определяет в точности алгоритм вычисления радиуса размытия, однако описывает его так:

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

<spread-radius>

Это четвёртое значение <length>. Положительные значения расширяют тень, отрицательные — сжимают её. Если не указано (по умолчанию)) используется 0 (тень будет такого же размера, что и сам элемент).

<color>

Смотрите страницу по <color> для получения допустимых значений.
Если не указано (по умолчанию), используется currentcolor.

Интерполяция

Каждая тень в списке (none считается за пустой список) интерполируется через значения цвета x, y, радиуса размытия и (когда это допустимо) и радиуса расширения. Для каждой тени, если обе входные тени отмечены как inset или ни одна из них таковой не является, то интерполированная тень будет соответствовать входным теням. Если в любой паре входных теней одна из них является внутренней ( inset), а другая нет, то список теней не интерполируется. Если количество теней отличается в разных списках, то более короткий список дополняется в конце тенями, цвет которых прозрачен (transparent), все значения длин равны 0, и где inset соответствует более длинному списку.

Формальное определение

Начальное значение none
Применяется к все элементы. Это также применяется к ::first-letter.
Наследуется нет
Обработка значения любая абсолютная длина; работает любой указанный цвет; если другое не указано
Animation type список теней

Формальный синтаксис

Примеры

Добавление трёх теней

В этом примере применяется сразу три тени: внутренняя тень, обычная внешняя отбрасываемая тень, а также тень размером 2 пикселя, имитирующая рамку (для создания рамки можно было воспользоваться outline (en-US)).

HTML

<blockquote><q>Меня уколют ваши речи,<br/>
Об ваши взгляды обожгусь,<br/>
И ранит ложь сильней картечи<br/>
Но все равно я поднимусь.</q>
<p>&mdash; Майя Энджелоу</p>
</blockquote>

CSS

blockquote {
  padding: 20px;
  box-shadow:
       inset 0 -3em 3em rgba(0,0,0,0.1),
             0 0  0 2px rgb(255,255,255),
             0.3em 0.3em 1em rgba(0,0,0,0.3);
}

Результат

Использование нулевых значений для смещений и радиуса размытия

Когда смещение по X (x-offset), смещение по Y (y-offset) и радиус размытия (blur) равны нулю, тень будет представлять собой цветной контур одинакового размера на всех сторонах блока. Тени отображаются с конца списка, поэтому первая тень накладывается поверх последующих. Когда в border-radius указано значение по умолчанию 0, углы тени становятся прямыми углами. Соответственно, если указать в border-radius любое другое значение, углы станут закруглёнными.

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

HTML

<div><p>Привет, мир</p></div>

CSS

p {
  box-shadow: 0 0 0 2em #F4AAB9,
              0 0 0 4em #66CCFF;
  margin: 4em;
  padding:1em;
}

Результат

Спецификации

Specification
CSS Backgrounds and Borders Module Level 3
# box-shadow

Поддержка браузерами

BCD tables only load in the browser

Смотрите также

Понравилась статья? Поделить с друзьями:
  • Error boundary react typescript
  • Error boundary react functional component
  • Error boundary react example
  • Error boundary next js
  • Error boundary event camunda