CSS3 box-shadow : inset은 한면 또는 두 면만 할 수 있습니까? 경계선처럼?


80

css3의 측면 특정 내부 그림자에 대한 지원에 대해 궁금합니다.

나는 이것이 지원되는 브라우저에서 잘 작동한다는 것을 알고 있습니다.

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

나는 다음과 같은 것을 달성하는 방법이 있는지 궁금합니다.

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

더 자세한 답변과 설명이있는 왼쪽 및 오른쪽에만 상자 그림자를 얻는 방법의 중복 가능성 이 있습니다.
brichins

답변:


147

이것은 나를 위해 일한 것입니다.

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

예 : http://jsfiddle.net/23Egu/


9
지금까지 가장 우아한 솔루션.
enyo

대박! 나는 이것으로 영원히 어려움을 겪었지만이 단일 라인은 가장 섹시한 한쪽 테두리를 제공합니다. 고마워요!
Sliq

12
box-shadow: inset 1px -4px 9px -6px;하단 그림자로 전환 할 수 있습니다 .
저스틴 러셀

7
왼쪽 그림자 : box-shadow: inset 4px 1px 9px -6px; 오른쪽 그림자 :box-shadow: inset -4px 1px 9px -6px;
bryanbraun 2014

흠 그래서 우리가하는 일은 큰 스프레드 값을 사용하고 네거티브 블러를 사용하여 부정하는 것입니다. 영리한
사미 율라 칸

11

난 당신이 정말 필요가 있다고 생각하지 않습니다 box-shadow-top당신이 설정 한 경우 때문에 offsetx0과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>

그리고 그림자는 당신이 원하는 것보다 더 많이 퍼질 것입니다. 그리고 측면도 바뀌 었습니다. 분명히주는 것과는 다른 결과 box-shadow-top입니다. 편집 하지만 그게 내가 보통하는 방법이다 =)
Rudie

@Rudie, 색상 rgba대신 측면의 그림자를 제거 hex하고 더 크게 설정 하려면 offsetybox-shadow : 0 5px 5px rgba (0,0,0, .5) 이렇게하면 그림자가 더 불투명 해 지므로 측면이 숨겨집니다. 오프셋이
많을수록

3
참고로, 두 개의 중첩 된 div를 사용하여 동시에 상단 및 하단 그림자를 얻는 대신 다음을 사용하여 하나의 div로 수행 할 수 있습니다.box-shadow:inset 0 1px 5px black, inset 0 -1px 5px black;
Jake Wilson

10

다음 예제와 같이 부모 상자에서 일반 그림자가 잘린 요소 :beforeafter요소 사용 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>

이것은 나를 위해 일한 기술입니다. 제 경우에는 #element가 스크롤 가능했기 때문에 작동하려면 위치를 스티키로 변경해야했습니다.
Mihai Răducanu

5

대부분의 경우 해결을 위해 배경 그라데이션을 사용할 수 있습니다.

SCSS (나침반 포함) 예 :

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

1
때때로 우리는 한 발 물러서서 우리가 성취하려는 것이 무엇인지 생각해야합니다. 그리고 이것은 종종 우리가 단면 내부 상자 그림자로 추구하는 것입니다. 훌륭한. 할 수 있다면 두 번 찬성했습니다!
random_user_name 2013

이 댓글을 처음 보았을 때 작업하기가 복잡해 보였지만 완벽하게 작동했습니다. 감사합니다!!
Alex

4
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


3

동일한 그림자이지만 상단에만 :

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

한 방향으로 그림자를 가지려면 "spread"매개 변수로 "blur"매개 변수를 무효화 한 다음 동일한 값으로 "h-pos"및 / 또는 "v-pos"매개 변수를 조정해야합니다. 반대쪽 테두리 나 삼중 테두리에서는 작동하지 않습니다. 정의를 하나 더 추가해야합니다.

여기에 더 많은 예 : http://codepen.io/GBMan/pen/rVXgqP



1

나도이 문제가 있었다. 내가 찾은 해결책은 여러 개의 상자 그림자 (그림자를 원하는 각면에 하나씩)였습니다. 정의는 다음과 같습니다.

box-shadow: none|h-offset v-offset blur spread color |inset|initial|inherit;

생각하는 방법은 다음과 같습니다.

  • 먼저 스프레드를 0으로 만듭니다 (이렇게하면 모든면에서 효과가 비활성화 됨).
  • h 오프셋 (양수로 설정하면 왼쪽에, 음수로 설정하면 오른쪽에 캐스트됩니다)
  • v-offset (양수로 설정하면 위쪽에 캐스트되고 음수로 설정하면 아래쪽에

여기에서 3면에 박스 섀도우가있는 제 케이스를 볼 수 있습니다. ) https://codepen.io/cponofrei/pen/eMMyQX


0

div를 설정 overflow:hidden하고 테두리를 따라 그림자 요소를 추가하여 단면 내부 그림자를 만들 수 있습니다.

분할의 위쪽 및 아래쪽 테두리에 내부 그림자를 설정합니다.

HTML

<div id="innerShadow">
    <div id="innerShadowTop">
        Content...
    <div id="innerShadowBottom">
</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);
}

많은 사람들은 이와 같은 추가 마크 업을 추가하는 것은 의미 론적이지 않으며 나쁜 습관이라고 주장 할 것입니다. 이것은 insetbox-shadow css의 값을 사용하여 창의력을 발휘하여 얻을 수 있습니다 . 동일한 요소에 상자 그림자를 쌓을 수 있습니다. 따라서 위의 주석에서 @Jakobud이 말한 것과 같은 것을 사용할 수 있습니다. box-shadow:inset 0 1px 5px black, inset 0 -1px 5px black; 불필요한 마크 업을 추가하는 것보다 약간 덜 공격적인 또 다른 방법은 :before:after선택자를 사용하는 것 입니다. 그러나 원래 요소를 직접 선택하고 스타일을 지정하여 할 수 있다면 왜 그렇게 할 수 있습니까?
ORyan 2013-04-23

0

box-shadow사방 모두를위한 것입니다. 당신은 그것을 바꿀 수 없습니다 (아직?). 의 4 개 크기 box-shadow의 정의는 OffsetX, offsetY, BlurSpread.


1
스프레드와 블러는 동일하지 않습니다. 각각에 대해 별도의 값이 있습니다. 그래서 기술적 6가 Inset/Outset, OffsetX, OffsetY, BlurRadius, SpreadRadiusColor. 다른 사람들이 지적했듯이,이 같은 한쪽을 지정할 수 있습니다box-shadow: inset 0 8px 6px -6px black;
ORyan

1
진실. 4 가지 크기를 모두 반영하도록 답을 변경했습니다 .
Rudie 2013-04-24

0

여러 상자 그림자가 나에게 트릭을 제공했습니다.

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/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.