요소의 한쪽에 상자 그림자를 추가하려면 어떻게해야합니까?


445

일부 block요소 에는 상자 그림자를 만들어야 하지만 오른쪽에만 (예 :) 상자 그림자를 만들어야합니다 . 그것을 할 방법으로는 내부 요소를 감싸 인 box-shadow으로 외부 하나로 padding-rightoverflow:hidden;그림자의 다른 세 변을 표시되지 않도록.

이것을 달성하는 더 좋은 방법이 있습니까? 처럼 box-shadow-right?

편집 : 내 의도는 그림자의 수직 부분 만드는 입니다. repeat-y규칙 과 정확히 동일 background:url(shadow.png) 100% 0% repeat-y합니다.


3
상자 그림자와 관련하여 CSS의 제한된 도구를 고려할 때 귀하의 접근 방식은 이미 상당히 좋습니다. 너무 복잡하지 않고 의미 론적으로 상당히 작은 영향을 미칩니다. 단 하나의 의미없는 div입니다.
Bazzz

다음은 멋진 CSS 사이드 섀도우입니다. stackoverflow.com/a/20596554/1491212
Armel

답변:


567

예, 상자 그림자 규칙의 그림자 확산 속성을 사용할 수 있습니다.

.myDiv
{
  border: 1px solid #333;
  width: 100px;
  height: 100px;
  box-shadow: 10px 0 5px -2px #888;
}
<div class="myDiv"></div>

-2px그림자 확산이있는 네 번째 속성 은 그림자 확산을 변경하여 그림자가 한쪽에만있는 것처럼 보이도록 사용할 수 있습니다.

또한 그림자 위치 지정 규칙 10px을 사용하여 오른쪽 (수평 오프셋)으로 전송 0px하고 요소 (수직 오프셋) 아래에 유지합니다.

5px 블러 반경입니다 :)

여기에 당신을위한 예가 있습니다 .


12
내가 모르는 것을 지적 해 주셔서 감사합니다. 그러나 나의 의도는 그림자의 수직 부분 만을 만드는 것이 었습니다 . background : url (shadow.png) 100 % 0 % repeat-y와 정확히 동일합니다.
tillda

4
@Tillda 당신은 이것을 해결책으로 검색하는 다른 사람들에게 맨 위에 나타나도록 대답으로 표시해야합니다. 나는 주석을 읽는 스타일링 방법을 거의 무시하고 대답을 받아 들였다.
Devin G Rhode

6
모서리에서 그림자를 감쇠시키지 않으려는 경우에 효과적입니다. 나는이 솔루션을 스스로 생각해 냈지만 대부분의 경우 (한쪽의 그림자의 경우) 그림자가 요소보다 작게 설정되어 잘못되어 의도 한 것처럼 환상을 깨는 것은 잘못되었습니다. 제기 "또는"3D ".
Steven Lu

1
@ Mr.Alien 감사합니다 box-shadow. 규칙이 표준화 되면서 접두사가 삭제되었습니다 .
Kyle

5
그러나이 그림자에는 흐림이 없으며 흐림을 포함하여 다른 부분에서 나옵니다. 스프레드를 줄임으로써이를 설명하면 실제로 원하는 쪽에서 조기에 종료됩니다. UGHHHHHH
Muhammad Umer

37

편집하기 쉬운 내 자체 솔루션 :

HTML :

<div id="anti-shadow-div">
    <div id="shadow-div"></div>
</div>

CSS :

#shadow-div{
    margin-right:20px; /* Set to 0 if you don't want shadow at the right side */
    margin-left:0px; /* Set to 20px if you want shadow at the left side */
    margin-top:0px; /* Set to 20px if you want shadow at the top side */
    margin-bottom:0px; /* Set to 20px if you want shadow at the bottom side */
    box-shadow: 0px 0px 20px black; 
    height:100px;
    width:100px;
    background: red;
}

#anti-shadow-div{
    margin:20px;
    display:table;
    overflow:hidden;
}​

데모 :
http://jsfiddle.net/jDyQt/103


1
어떻게 든 가장 직선적 인 것 같습니다-단지 컨테이너 div가 나를 어떻게 든 불행하게 만듭니다.)
BananaAcid

1
이것이 유일한 해결책입니다. 허용 된 답변은 여전히 ​​다른 위치에서 그림자의 맨 위와 맨 아래에 흐리게 표시됩니다.
Jelle Blaauw

이것은 Microsoft Edge 또는 Internet Explorer 11에서 작동하지 않았습니다. 확대 / 축소 수준에 따라 다른쪽에는 여전히 약간의 그림자가있었습니다. 다른 브라우저는 괜찮 았습니다.

stackoverflow.com/a/24220224/238753 의 답변 은 이와 동일하지만이 답변의 브라우저 호환성 문제는 없습니다
Sam

24

클리핑 된 효과를 최대 2면까지 얻으려면 배경 그라디언트와 의사 요소를 사용할 수 있습니다.

header::before, main::before, footer::before, header::after, main::after, footer::after {
    display:    block;
    content:    '';
    position:   absolute;
    width:      8px;
    height:     100%;
    top:        0px;
}

header::before, main::before, footer::before {
    left:       -8px;
    background: linear-gradient(to left, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}

header::after, main::after, footer::after {
    right:      -8px;
    background: linear-gradient(to right, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}

일반적으로 문서를 구성하는 요소의 왼쪽과 오른쪽에 그림자 같은 효과를 추가합니다.


마크 업을 어지럽히 지 않고 요소의 한쪽에만 그림자 효과를 추가하므로 완벽한 솔루션입니다.
Liquinaut

1
네거티브 스프레드 방식에 비해 모서리가 줄어들지 않는 장점이 있습니다.
케빈 크리스토퍼 헨리

3
@BananaAcid 나는 그것을 필요로하는 사람을 위해 데모를 만들었다 : jsfiddle.net/jDyQt/1198
zeckdude

이 기능은 Chrome, Safari, Firefox, IE11 및 Edge에서 부작용없이 완벽하게 작동했습니다.
Sam

15

:: after 또는 :: before pseudo 요소를 사용하여 그림자를 추가하십시오. 1px로 만들고 원하는면에 배치하십시오. 아래는 top의 예입니다.

footer {
   margin-top: 50px;
   color: #fff;
   background-color: #009eff;
   text-align: center;
   line-height: 90px;
   position: relative;
}

footer::after {
    content: '';
    position: absolute;
    width: 100%;
    height: 1px;
    top: 0;
    left: 0;
    z-index: -1;
    box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.75);
}
<footer>top only box shadow</footer>


이것은 여전히 ​​가장자리를 넘어 유출되지만 일부 사람들이 원하는 것일 수 있습니다
Sam

5

내 예는 다음과 같습니다.

.box{
        
        width: 400px; 
        height: 80px; 
        background-color: #C9C; 
        text-align: center; 
        font: 20px normal Arial, Helvetica, sans-serif; 
        color: #fff; 
        padding: 100px 0 0 0;
        -webkit-box-shadow: 0 8px 6px -6px black;
           -moz-box-shadow: 0 8px 6px -6px black;
                box-shadow: 0 8px 6px -6px black;
    }
<div class="box">
</div>


4

내가 한 약간의 해킹이 있습니다.

<div id="element"><!--element that I want an one-sided inset shadow from the bottom--></div> 
<div class="one_side_shadow"></div>

1. 크리에이트 <div class="one_side_shadow"></div>나는 한 쪽 상자 그림자를 생성하려는 요소 아래의 권리를 (이 경우에 나는에 대한 일방적 인 세트의 그림자를 원하는 id="element"바닥에서 오는)

2. 그런 다음 box-shadow음의 수직 오프셋을 사용하여 그림자를 위쪽으로 밀어내는 규칙 을 만들었습니다 .

`box-shadow: 0 -8px 20px 2px #DEDEE3;`

2

이것은 간단한 방법이 될 수 있습니다

border-right : 1px solid #ddd;
height:85px;    
box-shadow : 10px 0px 5px 1px #eaeaea;

이것을 div에 할당


1

각 측면 또는 작동하는 스 니펫에 대해 설명 하는 코드 펜 은 다음과 같습니다 .

.boxes {
  display: flex;
  flex-wrap: wrap;
}

.box {
  margin: 20px;
  border: 1px solid #ccc;
  font-family: Helvetica Neue, Arial, sans-serif;
  font-weight: 100;
  letter-spacing: 2px;
  color: #999;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  flex: 1;
  padding: 40px;
  line-height: 1.4em;
}

.top {
  box-shadow: 0 -5px 5px -5px #333;
}

.right {
  box-shadow: 5px 0 5px -5px #333;
}

.bottom {
  box-shadow: 0 5px 5px -5px #333;
}

.left {
  box-shadow: -5px 0 5px -5px #333;
}
<div class="boxes">
  <div class="box top">Top Only</div>
  <div class="box right">Right Only</div>
  <div class="box bottom">Bottom Only</div>
  <div class="box left">Left Only</div>
</div>


0

이 사이트는 나를 도와줍니다 : https://gist.github.com/ocean90/1268328 (해당 사이트에서 왼쪽과 오른쪽 이이 게시물의 날짜와 반대로 바뀌지 만 예상대로 작동합니다.) 아래 코드에서 수정되었습니다.

<!DOCTYPE html>
<html>
    <head>
        <title>Box Shadow</title>

        <style>
            .box {
                height: 150px;
                width: 300px;
                margin: 20px;
                border: 1px solid #ccc;
            }

            .top {
                box-shadow: 0 -5px 5px -5px #333;
            }

            .right {
                box-shadow: 5px 0 5px -5px #333;
            }

            .bottom {
                box-shadow: 0 5px 5px -5px #333;
            }

            .left {
                box-shadow: -5px 0 5px -5px #333;
            }

            .all {
                box-shadow: 0 0 5px #333;
            }
        </style>
    </head>
    <body>
        <div class="box top"></div>
        <div class="box right"></div>
        <div class="box bottom"></div>
        <div class="box left"></div>
        <div class="box all"></div>
    </body>
</html>


0

내가하는 일은 그림자의 수직 블록을 만들고 블록 요소가 있어야하는 위치 옆에 배치하는 것입니다. 그런 다음 두 블록은 다른 블록으로 랩핑됩니다.

<div id="wrapper">
    <div id="shadow"></div>  
    <div id="content">CONTENT</div>  
</div>

<style>

div#wrapper {
  width:200px;
  height:258px;      
}

div#wrapper > div#shadow {
  display:inline-block;
  width:1px;
  height:100%;
  box-shadow: -3px 0px 5px 0px rgba(0,0,0,0.8)
}

div#wrapper > div#content {
  display:inline-block;
  height:100%;
  vertical-align:top;
}

</style>

여기에 jsFiddle 예제가 있습니다 .


0

좋아, 여기 하나 더 시도해보십시오. 의사 요소를 사용하고 그 위에 쉐도우 박스 포 퍼티를 적용합니다.

html :

<div class="no-relevant-box">
  <div class="div-to-shadow-1"></div>
  <div class="div-to-shadow-2"></div>
</div>

사스 :

.div-to-shadow-1, .div-to-shadow-2
  height: 150px
  width: 150px
  overflow: hidden
  transition: all 0.3s ease-in-out
  &::after
    display: block
    content: ''
    position: relative
    top: 0
    left: 100%
    height: 100%
    width: 10px
    border: 1px solid mediumeagreen
    box-shadow:  0px 7px 12px rgba(0,0,0,0.3)
  &:hover
    border: 1px solid dodgerblue
    overflow: visible

https://codepen.io/alex3o0/pen/PrMyNQ


0

clip-path(2020)은 요소의 특정 측면에서 상자 그림자를 얻는 가장 간단한 방법 중 하나입니다. 특히 필요한 효과가 특정 가장자리에서 "깨끗한 컷"그림자 인 경우 (예 : OP가 원래 찾고 있던 것으로 생각) 이:

.shadow-element {
    border: 1px solid #333;
    width: 100px;
    height: 100px;
    box-shadow: 0 0 15px rgba(0,0,0,0.75);
    clip-path: inset(0px -15px 0px 0px);
}
<div class="shadow-element"></div>

... 감쇠 / 감소 / 얇은 그림자와는 대조적으로 :

.shadow-element {
    border: 1px solid #333;
    width: 100px;
    height: 100px;
    box-shadow: 15px 0px 15px -10px rgba(0,0,0,0.75);
}
<div class="shadow-element"></div>

문제의 요소에 다음 CSS를 적용하기 만하면됩니다.

box-shadow: 0 0 Xpx [hex/rgba]; /* note 0 offset values */
clip-path: inset(Apx Bpx Cpx Dpx);

어디:

  • Apx 상단 가장자리의 그림자 가시성을 설정합니다
  • Bpx 권리
  • Cpx 바닥
  • Dpx 왼쪽

그림자를 숨길 가장자리에 대해서는 0을, 그림자를 표시 할 가장자리에는 음수 (상자 그림자 흐림 반경-와 동일 Xpx)를 입력하십시오.


@tillda, 10 년 전의 질문을 준발-한 번에 한 번 요구 사항 (특히 차단 그림자 효과)을 올바르게 해석했는지 궁금합니다 .- 정확하게 달성하려고 노력하고 있었고 방법.
Luke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.