CSS3 Box Shadow сверху, слева и справа только - PullRequest
43 голосов
/ 05 февраля 2011

Привет,

Я пытаюсь применить тень от блока CSS3 только к верхнему, правому и левому краям DIV с радиусом, который соответствует результату следующего CSS (минус нижняя тень)

 #div {
    -webkit-box-shadow: 0px 0px 10px #000;
    -moz-box-shadow: 0px 0px 10px #000;
    box-shadow: 0px 0px 10px #000;
}

Как лучше всего это сделать?

Спасибо!

ОБНОВЛЕНИЕ Эта тень будет применена к навигационной панели настраница, панель расположена сверху основного контейнера DIV.То, что я пытаюсь сделать, - это продолжить тень блока основного DIV на панели навигации, которая находится над ним, но без нижней тени на панели навигации.Взгляните на сам сайт , чтобы понять, о чем я говорю, проще, чем добавить сюда все HTML и CSS.

ОБНОВЛЕНИЕ 2 После DIVЯ работаю с единичным, вместо того, чтобы пытаться поместить тень на каждую навигационную линию, я решил изменить ее следующим образом:

-webkit-box-shadow: 0px -4px 7px #e6e6e6;
    -moz-box-shadow: 0px -4px 7px #e6e6e6;
    box-shadow: 0px -4px 7px #e6e6e6;

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

Ответы [ 9 ]

26 голосов
/ 29 февраля 2012

используйте значение спреда ...

box-shadow имеет следующие значения

box-shadow: x y blur spread color;

чтобы вы могли использовать что-то вроде ..

box-shadow: 0px -10px 10px -10px black;

ОБНОВЛЕНИЕ: Я добавляю jsfiddle

18 голосов
/ 07 февраля 2011

Лучше, если вы просто закроете нижнюю часть другим div, и вы получите постоянную тень на доске.как волшебство!

14 голосов
/ 13 ноября 2012

Вы можете присвоить несколько значений свойству box-shadow
Например,

-moz-box-shadow: 0px 10px 12px 0px #000,
                    0px -10px 12px 0px #000;
-webkit-box-shadow: 0px 10px 12px 0px #000,
                    0px -10px 12px 0px #000;
box-shadow: 0px 10px 12px 0px #000,
            0px -10px 12px 0px #000;

это тень от влево и вправо , вы можете адаптировать ее к вашим требованиям

7 голосов
/ 14 марта 2013

Я нашел способ покрыть тень с помощью «: after», вот мой код:

#div:after {
    content:"";
    position:absolute;
    width:5px;
    background:#fff;
    height:38px;
    top:1px;
    right:-5px;
}
4 голосов
/ 21 марта 2013

Следующий код сделал это для меня, чтобы сделать теневую вставку справа:

-moz-box-shadow: inset -10px 0px 10px -10px #000;
-webkit-box-shadow: inset -10px 0px 10px -10px #000;
box-shadow: inset -10px 0px 10px -10px #000;

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

1 голос
/ 17 января 2016

Я знаю, что это очень старо, но ни один из этих ответов не помог мне, поэтому я добавляю свой ответ. Это, как и ответ @ yichengliu, использует элемент Pseudo ::after.

#div {
    position: relative;
}



#div::after {
    content: '';
    position: absolute;
    right: 0;
    width: 1px;
    height: 100%;
    z-index: -1;

    -webkit-box-shadow: 0px 0px 5px 0px rgba(0,0,0,1);
    -moz-box-shadow: 0px 0px 5px 0px rgba(0,0,0,1);
    box-shadow: 0px 0px 5px 0px rgba(0,0,0,1);
}

/*or*/

.filter.right::after {
    content: '';
    position: absolute;
    right: 0;
    top: 0;
    width: 1px;
    height: 100%;
    background: white;
    z-index: -1;

    -webkit-filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1));
    filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1));
}

Fiddle

Если вы решите изменить X тени (первое измерение пикселя drop-shadow или box-shadow), изменение ширины поможет, так что не будет выглядеть белый промежуток между div и тень.

Если вы решите изменить Y тени (измерение второго пикселя drop-shadow или box-shadow), изменение высоты поможет по той же причине, что и выше.

1 голос
/ 12 марта 2015

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

У меня уже есть CSS для моих вкладок, и вот что у меня сработало:

(Обратите внимание, в частности, padding-bottom: 2px; внутри #tabs #selected a {. Это аккуратно скрывает нижнюю часть box-shadow и отлично работает для меня со следующим CSS.)

#tabs {
    margin-top: 1em;
    margin-left: 0.5em;
}
#tabs li a {
    padding: 1 1em;
    position: relative;
    top: 1px;
    background: #FFFFFF;
}
#tabs #selected {
    /* For the "selected" tab */
    box-shadow: 0 0 3px #666666;
    background: #FFFFFF;
}
#tabs #selected a {
    position: relative;
    top: 1px;
    background: #FFFFFF;
    padding-bottom: 2px;
}
#tabs ul {
    list-style: none;
    padding: 0;
    margin: 0;
}
#tabs li {
    float: left;
    border: 1px solid;
    border-bottom-width: 0;
    margin: 0 0.5em 0 0;
    border-top-left-radius: 3px;
    border-top-right-radius: 3px;
}

Думал, я бы выдвинул это как еще одно возможное решение для любого, кто просматривает SO для этого.

1 голос
/ 06 февраля 2011

Добавление отдельного ответа, потому что он радикально отличается.

Вы можете использовать rgba и установить низкий уровень альфа-канала (чтобы получить прозрачность), чтобы сделать вашу тень менее заметной.

Попробуйте что-то вроде этого (играйте с .5)

-webkit-box-shadow: 0px -4px 7px rbga(230, 230, 230, .5);
-moz-box-shadow: 0px -4px 7px rbga(230, 230, 230, .5);
box-shadow: 0px -4px 7px rbga(230, 230, 230, .5);

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

0 голосов
/ 21 октября 2016
#div:before {
 content:"";
 position:absolute;
 width:100%;
 background:#fff;
 height:38px;
 top:1px;
 right:-5px;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...