Подтвердить что ты не робот

Может ли CSS3 box-shadow: вставить только одну или две стороны? как пограничный?

Мне интересно о поддержке сторонних внутренних теней в css3.

Я знаю, что это отлично работает на поддерживаемых браузерах.

div { box-shadow:inset 0px 1px 5px black; }

Мне просто интересно, есть ли способ добиться чего-то вроде:

div { box-shadow-top:inset 0px 1px 5px black; }
4b9b3361

Ответ 1

Это то, что сработало для меня:

box-shadow: inset 1px 4px 9px -6px;

Пример: http://jsfiddle.net/23Egu/

Ответ 2

Я не думаю, что вам действительно нужно box-shadow-top, потому что если вы установите offsetx на 0 и offsety на любое положительное значение, только оставшаяся тень будет сверху.

если вы хотите иметь тень сверху и тень внизу, вы просто можете просто использовать два div:

<div style="box-shadow:inset 0 1px 5px black;">
  <div style="box-shadow:inset 0 -1px 5px black;">
    some content
  </div>
</div>

если вы хотите избавиться от тени по сторонам, используйте rgba вместо цвета hex и установите более крупный offsety:

box-shadow:inset 0 5px 5px rgba(0,0,0,.5) 

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

полный пример:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <style type="text/css">
            body {
                background: #1C1C1C;
            }
            div {
                margin: 50px auto;
                width: 200px;
                height: 200px;
                background: #fff;
                -webkit-border-radius: 20px;
                -khtml-border-radiust: 20px;
                -moz-border-radius: 20px;
                -o-border-radius: 20px;
                border-radius: 20px;
                box-shadow:inset 0px 5px 5px rgba(0,0,0,.5); 
            }
            div > div {
                background:none;
                box-shadow:inset 0px -5px 5px rgba(0,0,0,.5); 
            }
        </style>
    </head>
    <body>
        <div><div></div></div>
    </body>
</html>

Ответ 3

используя элементы :before и after с регулярными тенями, вырезанными на overflow:hidden в родительском поле, как в этом примере: http://dabblet.com/gist/2585782

CSS

/**
 * Top and Bottom inset shadow
 */


#element{
  background-color: #E3F2F7;
  height: 55px;
  position: relative; /* to position pseudo absolute*/
  overflow: hidden; /* to cut of overflow shadow*/
  margin-top: 200px;    
}

#element:before , #element:after{
  content: "\0020";
  display: block;
  position: absolute;
  width: 100%;
  height: 1px; /* when 0 no shadow is displayed*/
  box-shadow: #696c5c 0 0 8px 0;
}

#element:before { top: -1px} /* because of height: 1*/
#element:after { bottom: -1px}  /* because of height: 1*/

HTML

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

Ответ 4

В большинстве случаев вы можете использовать градиент фона для работы:

Пример SCSS (с компасом):

@include background(linear-gradient(top, #666 1%, #999 3%, #ddd 6%, #f6f6f6 9%, #f6f6f6 92%, #ddd 94%, #999 97%, #666 99%) );

Ответ 5

box-shadow: inset 5px 0 5px -5px rgba(0,0,0,0.5),inset -5px 0 5px -5px rgba(0,0,0,0.5);
-moz-box-shadow: inset 5px 0 5px -5px rgba(0,0,0,0.5),inset -5px 0 5px -5px rgba(0,0,0,0.5);
-webkit-box-shadow: inset 5px 0 5px -5px rgba(0,0,0,0.5),inset -5px 0 5px -5px rgba(0,0,0,0.5);
-o-box-shadow: inset 5px 0 5px -5px rgba(0,0,0,0.5),inset -5px 0 5px -5px rgba(0,0,0,0.5);

Это работает просто прекрасно:)

Вот код, иллюстрирующий это: http://codepen.io/poopsplat/pen/cGBLy

Ответ 6

Нет, не напрямую, но вы можете обрезать части, которые вам не нужны, поместив их в div с помощью overflow: hidden:

http://jsfiddle.net/Vehdg/

Ответ 7

Для той же тени, но только сверху:

box-shadow: inset 0px 6px 5px -5px black;

Чтобы иметь тень в одном направлении, вы должны отменить параметр "размытие" параметром "спред", а затем настроить параметры "h-pos" и/или "v-pos" на это же значение. Он не работает с противоположной границей или тройной границей. Вы должны добавить еще одно определение.

Другие примеры здесь: http://codepen.io/GBMan/pen/rVXgqP

Ответ 8

box-shadow для всех четырех сторон. Вы не можете изменить это (пока?). 4 размера в определении box-shadow: OffsetX, offsetY, Blur и Spread.

Ответ 9

Вы можете выполнить одностороннюю внутреннюю тень, установив свой div на overflow:hidden и добавив теневые элементы вдоль границ.

Установите внутреннюю тень на верхнюю и нижнюю границы деления:

HTML

&ltdiv id="innerShadow">
    &ltdiv id="innerShadowTop">
        Content...
    &ltdiv id="innerShadowBottom">
&lt/div>

CSS

#innerShadow
{
    position: relative;
    overflow: hidden;
}

#innerShadowTop
{
    width: 100%;
    height: 1px;
    margin: 0;
    padding: 0;
    position: absolute;
    top: -1px;
    -moz-box-shadow: 0px 1px 6px 1px rgba(0, 0, 0, 0.65);
    -webkit-box-shadow: 0px 1px 6px 1px rgba(0, 0, 0, 0.65);
    -o-box-shadow: 0px 1px 6px 1px rgba(0, 0, 0, 0.65);
    box-shadow: 0px 1px 6px 1px rgba(0, 0, 0, 0.65);
}

#bannerShadowBottom
{
    width: 100%;
    height: 1px;
    margin: 0;
    padding: 0;
    position: absolute;
    bottom: -1px;
    -moz-box-shadow: 0px -1px 6px 1px rgba(0, 0, 0, 0.65);
    -webkit-box-shadow: 0px -1px 6px 1px rgba(0, 0, 0, 0.65);
    -o-box-shadow: 0px -1px 6px 1px rgba(0, 0, 0, 0.65);
    box-shadow: 0px -1px 6px 1px rgba(0, 0, 0, 0.65);
}

Ответ 10

Множественные тени теней сделали трюк для меня.

box-shadow:
        inset 0 -8px 4px 4px rgb(255,255,255),
        inset 0 2px 4px 0px rgba(50, 50, 50, 0.75);

http://jsfiddle.net/kk66f/