только тень снизу css3 - PullRequest
       1

только тень снизу css3

212 голосов
/ 28 марта 2011

Есть ли способ уронить тень только на дно ?. У меня есть меню с 2 изображениями рядом друг с другом. Я не хочу правильную тень, потому что она перекрывает правильное изображение. Я не люблю использовать изображения для этого, поэтому есть способ поместить его только внизу, например:

box-shadow-bottom: 10px #FFF; или аналогичный?

-moz-box-shadow: 0px 3px 3px #000;
-webkit-box-shadow: 0px 3px 3px #000;
box-shadow-bottom: 5px #000;
/* For IE 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=180, Color='#000000')";
/* For IE 5.5 - 7 */
filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=180, Color='#000000');

Ответы [ 13 ]

224 голосов
/ 28 марта 2011

ОБНОВЛЕНИЕ 4

То же, что и обновление 3, но с современным css (= меньше правил), так что никакого специального позиционирования на псевдоэлементе не требуется.

#box {
    background-color: #3D6AA2;
    width: 160px;
    height: 90px;
    position: absolute;
    top: calc(10% - 10px);
    left: calc(50% - 80px);
}

.box-shadow:after {
    content:"";
    position:absolute;
    width:100%;
    bottom:1px;
    z-index:-1;
    transform:scale(.9);
    box-shadow: 0px 0px 8px 2px #000000;
}
<div id="box" class="box-shadow"></div>

ОБНОВЛЕНИЕ 3

Во всех моих предыдущих ответах использовалась дополнительная разметка для создания этого эффекта, который не обязательно необходим. Я думаю, что это намного более чистое решение ... единственная хитрость - играть со значениями, чтобы получить правильное расположение тени, а также правильную силу / непрозрачность тени. Вот новая скрипка, использующая псевдоэлементы :

http://jsfiddle.net/UnsungHero97/ARRRZ/2/

HTML

<div id="box" class="box-shadow"></div>

CSS

#box {
    background-color: #3D6AA2;
    width: 160px;
    height: 90px;
    margin-top: -45px;
    margin-left: -80px;
    position: absolute;
    top: 50%;
    left: 50%;
}

.box-shadow:after {
    content: "";
    width: 150px;
    height: 1px;
    margin-top: 88px;
    margin-left: -75px;
    display: block;
    position: absolute;
    left: 50%;
    z-index: -1;
    -webkit-box-shadow: 0px 0px 8px 2px #000000;
       -moz-box-shadow: 0px 0px 8px 2px #000000;
            box-shadow: 0px 0px 8px 2px #000000;
}

ОБНОВЛЕНИЕ 2

По-видимому, вы можете сделать это, просто добавив дополнительный параметр в CSS box-shadow, как все остальные только что указали. Вот демо:

http://jsfiddle.net/K88H9/821/

CSS

-webkit-box-shadow: 0 4px 4px -2px #000000;
   -moz-box-shadow: 0 4px 4px -2px #000000;
        box-shadow: 0 4px 4px -2px #000000;

Это было бы лучшим решением. Добавляемый дополнительный параметр описывается так:

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

* * ОБНОВЛЕНИЕ тысячи сорок-девять

Проверьте демонстрацию на jsFiddle: http://jsfiddle.net/K88H9/4/

Что я сделал, так это создал «теневой элемент», который бы скрывался за фактическим элементом, который вы хотели бы иметь тень. Я сделал ширину «теневого элемента» точно меньшей ширины, чем фактический элемент, в 2 раза больше указанной вами тени; тогда я выровнял это правильно.

HTML

<div id="wrapper">
    <div id="element"></div>
    <div id="shadow"></div>
</div>

CSS

#wrapper {
    width: 84px;
    position: relative;
}
#element {
    background-color: #3D668F;
    height: 54px;
    width: 100%;
    position: relative;
    z-index: 10;
}
#shadow {
    background-color: #3D668F;
    height: 8px;
    width: 80px;
    margin-left: -40px;
    position: absolute;
    bottom: 0px;
    left: 50%;
    z-index: 5;
    -webkit-box-shadow: 0px 2px 4px #000000;
       -moz-box-shadow: 0px 2px 4px #000000;
            box-shadow: 0px 2px 4px #000000;
}

Оригинальный ответ

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

-webkit-box-shadow: 0px 5px #000000;
   -moz-box-shadow: 0px 5px #000000;
        box-shadow: 0px 5px #000000;

Для получения дополнительной информации о тенях ящиков, проверьте эти:

Надеюсь, это поможет.

63 голосов
/ 29 марта 2011

Просто используйте параметр распространения, чтобы уменьшить тень:

.shadow {
  -webkit-box-shadow: 0 6px 4px -4px black;
  -moz-box-shadow: 0 6px 4px -4px black;
  box-shadow: 0 6px 4px -4px black;
}
<div class="shadow">Some content</div>

Демонстрационная версия: http://dabblet.com/gist/a8f8ba527f5cff607327

Чтобы не видеть тени на сторонах, (абсолютное значение) радиуса разброса (4-й параметр) должно быть таким же, как радиус размытия (3-й параметр).

21 голосов
/ 11 июля 2014

Если у вас фиксированный цвет фона, вы можете скрыть эффект боковой тени с помощью двух маскирующих теней , имеющих одинаковый цвет фона и размытие = 0, например:

box-shadow: 
    -6px 0 white,         /*Left masking shadow*/
    6px 0 white,          /*Right masking shadow*/
    0 7px 4px -3px black; /*The real (slim) shadow*/

Обратите внимание, что черная тень должна быть последней и иметь отрицательный спред (-3px), чтобы предотвратить ее распространение за углы.

Здесь скрипка (измените цвет маскирующих теней, чтобы увидеть, как он действительно работает).

enter image description here

5 голосов
/ 18 июля 2013

Я думаю, это то, что вы ищете?

.shadow {
  -webkit-box-shadow: 0 0 0 4px white, 0 6px 4px black;
  -moz-box-shadow: 0 0 0 4px white, 0 6px 4px black;
  box-shadow: 0 0 0 4px white, 0 6px 4px black;
}
<div class="shadow">wefwefwef</div>
5 голосов
/ 29 марта 2011

Всегда лучше прочитать характеристики .Нет свойства box-shadow-bottom, и, как указывает Ли, вы всегда должны размещать свойство без префикса внизу, после префикса.

Итак, это:

.shadow {
  -webkit-box-shadow: 0px 2px 4px #000000;
  -moz-box-shadow: 0px 2px 4px #000000;
  box-shadow: 0px 2px 4px #000000;
}
<div class="shadow">Some content</div>
2 голосов
/ 19 ноября 2013

Как насчет использования содержащего элемента div, для которого переполнение установлено на скрытый, а некоторые отступы внизу?Кажется, это самое простое решение.

Извините, я не думал об этом сам, но видел это где-то еще .

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

Примерно так:

#wrapper { padding-bottom: 10px; overflow: hidden; }
#elem { box-shadow: 0 0 10px black; }

Содержимое идет сюда

Все еще умное решениекогда это должно быть сделано в чистом CSS!

Как сказал Йорген Эвенс .

1 голос
/ 18 июня 2019

Вы также можете использовать clip-path, чтобы обрезать (скрыть) все переполняющиеся края, кроме того, который вы хотите показать:

.shadow {
  box-shadow: 0 4px 4px black;
  clip-path: polygon(0 0, 100% 0, 100% 200%, 0 200%);
}

См. путь клипа (MDN) . Аргументами polygon являются верхняя левая точка, верхняя правая точка, нижняя правая точка и нижняя точка осталось балл. Установив для нижнего края значение 200% (или любое другое число, большее 100%), вы ограничите переполнение только нижним краем.

1 голос
/ 06 ноября 2015

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

.box-shadow {
   -webkit-box-shadow: 5px 35px 30px -25px #888888;
      -moz-box-shadow: 5px 35px 30px -25px #888888;
           box-shadow: 5px 35px 30px -25px #888888;
}

Элемент, к которому он применяется, представляет собой изображение шириной страницы (980px x 300px).

Если это помогает при настройке параметров, они запускаются какследующие:

горизонтальная тень, вертикальная тень, расстояние размытия, разброс (т.е. размер тени) и цвет.

0 голосов
/ 30 января 2019

Эта кодовая ручка (не мной) демонстрирует очень простой способ сделать это и другие стороны сами по себе довольно красиво:

box-shadow: 0 5px 5px -5px #333;

https://codepen.io/zeckdude/pen/oxywmm

0 голосов
/ 04 октября 2018

Лучше искать тень:

.header{
    -webkit-box-shadow: 0 -8px 73px 0 rgba(0,0,0,0.2);
    -moz-box-shadow: 0 -8px 73px 0 rgba(0,0,0,0.2);
    box-shadow: 0 -8px 73px 0 rgba(0,0,0,0.2);
}

, этот код в настоящее время используется в паутине stackoverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...