CSS3 Box Shadow сверху, слева и справа

Привет,

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

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

Каким будет лучший способ достичь этого?

Спасибо!

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

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

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

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

Ответ 1

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

#servicesContainer {
  /*your css*/
  position: relative;
}

и исправлено! как волшебство!

Ответ 2

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

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

box-shadow: x y blur spread color;

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

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

UPDATE: Я добавляю jsfiddle

Ответ 3

Вы можете указать несколько значений для свойства 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;

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

Ответ 4

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

#div:after {
    content:"";
    position:absolute;
    width:5px;
    background:#fff;
    height:38px;
    top:1px;
    right:-5px;
}

Ответ 5

Следующий код сделал для меня создание теневой вставки правой стороны:

-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;

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

Ответ 6

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

Вы можете использовать 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);

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

Ответ 7

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

У меня был 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 для этого.

Ответ 8

Я знаю, что это очень старый, но ни один из этих ответов не помог мне, поэтому я добавляю свой ответ. Это, как и ответ @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), изменение высоты поможет по той же причине, что и выше.

Ответ 9

#div:before {
 content:"";
 position:absolute;
 width:100%;
 background:#fff;
 height:38px;
 top:1px;
 right:-5px;
}