program tip

한면을 제외한 모든면에 CSS3 상자 그림자 만들기

radiobox 2020. 7. 29. 08:06
반응형

한면을 제외한 모든면에 CSS3 상자 그림자 만들기


열린 탭에서 다른 탭과 구분하기 위해 그림자를 갖도록 탭이있는 탐색 모음이 있습니다. 또한 전체 탭 섹션에 단일 그림자 (하단 수평선 참조)가 올라가고 열려있는 탭을 제외한 모든 탭의 맨 아래를 음영 처리하고 싶습니다.

CSS3의 box-shadow속성 을 사용하여 사용 하지만 원하는 부분 만 음영 처리하는 방법을 알 수는 없습니다.

일반적으로 열린 영역의 아래쪽 그림자를 내용 영역 (더 높음 z-index) 으로 덮었 지만이 경우 내용 영역 자체에 그림자가있어 탭을 덮을 수 있습니다.

탭 레이아웃

     _______ _______ _______
    | | | | | |
____ | _______ | __ | | __ | _______ | ______

그림자 선.

그림자는 수평선에서 수직선 바깥쪽으로 올라갑니다.

                _______
               | |
_______________ | | _________________

다음 은 실제 예입니다.

도움이 필요하십니까?


샘플에서이 스타일로 #content 안에 div를 만듭니다.

#content_over_shadow {
    padding: 1em;
    position: relative; /* look at this */
    background:#fff;    /* a solid background (non transparent) */
}

# 콘텐츠 스타일 변경 (패딩 제거) 및 그림자 추가

#content {
    font-size: 1.8em;
    box-shadow: 0 0 8px 2px #888; /* line shadow */
}

탭에 그림자를 추가하십시오.

#nav li a {
    margin-left: 20px;
    padding: .7em .5em .5em .5em;
    font-size: 1.3em;
    color: #FFF;
    display: inline-block;
    text-transform: uppercase;
    position: relative;
    box-shadow: 0 0 8px 2px #888; /* the shadow */
}

오버플로로 잘라내십시오.

<style type="text/css">
    div div {box-shadow:0 0 5px #000; height:20px}
    div {overflow:hidden;height:25px; padding:5px 5px 0 5px}

</style>
<div><div>tab</div></div>

다른 div없이 여러 CSS 그림자를 사용하여 모서리 주위에 그림자가 없어야 효과를 얻을 수 있습니다.

-webkit-box-shadow: 0 -3px 3px -3px black, 3px 0px 3px -3px black, -3px 0px 3px -3px black;
-moz-box-shadow:    0 -3px 3px -3px black, 3px 0px 3px -3px black, -3px 0px 3px -3px black;
box-shadow:         0 -3px 3px -3px black, 3px 0px 3px -3px black, -3px 0px 3px -3px black;

전반적으로 매우 방해가되지는 않습니다.


개인적으로 나는 여기에 가장 적합한 해결책을 좋아합니다 : http://css3pie.com/demos/tabs/

아래의 내용에서 여전히 그림자가있는 배경색으로 0 상태 또는 호버 상태를 유지할 수 있습니다. 위의 방법으로 가능한지 확실하지 않습니다.

shadowed tab with hover state

최신 정보:

실제로 나는 틀렸다. 허용 된 솔루션이 위에 표시된 호버 상태를 지원하도록 할 수 있습니다. 이 작업을 수행:

a에 양의 친척을 두지 말고 아래의 #content div보다 높지만 (그림자에있는) z- 인덱스를 가진 a.active 클래스에 넣으십시오. content_wrapper.

예를 들면 다음과 같습니다.

<nav class="ppMod_Header clearfix">
    <h1 class="ppMod_PrimaryNavigation-Logo"><a class="ppStyle_Image_Logo" href="/">My company name</a></h1>
    <ul class="ppList_PrimaryNavigation ppStyle_NoListStyle clearfix">
        <li><a href="/benefits">Benefits</a></li>
        <li><a class="ppStyle_Active" href="/features">Features</a></li>
        <li><a href="/contact">Contact</a></li>
        <li><a href="/company">Company</a></li>
    </ul>
</nav>
<div id="ppPage-Body">
    <div id="ppPage-BodyWrap">
        content goes here
    </div>
</div>

그런 다음 CSS로 :

#ppPage-Body
    box-shadow: 0 0 12px rgba(0,0,0,.75)
    position: relative /* IMPORTANT PART */

#ppPage-BodyWrap
    background: #F4F4F4
    position: relative /* IMPORTANT PART */
    z-index: 4 /* IMPORTANT PART */


.ppList_PrimaryNavigation li a:hover
    background: #656565
    -webkit-border-radius: 6px 6px 0 0
    -moz-border-radius: 6px 6px 0 0
    border-radius: 6px 6px 0 0

.ppList_PrimaryNavigation li a.ppStyle_Active
    background: #f4f4f4
    color: #222
    -webkit-border-radius: 6px 6px 0 0
    -moz-border-radius: 6px 6px 0 0
    border-radius: 6px 6px 0 0
    -webkit-box-shadow: 0 0 12px rgba(0,0,0,0.75)
    -moz-box-shadow: 0 0 12px rgba(0,0,0,0.75)
    box-shadow: 0 0 12px rgba(0,0,0,0.75)
    position: relative /* IMPORTANT PART */
    z-index: 3 /* IMPORTANT PART */

이 문제를 해결하는 또 하나의 창의적 방법은 의사 요소를 요소 중 하나에 : after 또는 : before 추가하는 것입니다. 제 경우에는 다음과 같습니다.

#magik_megamenu>li:hover>a:after {
    height: 5px;
    width: 100%;
    background: white;
    content: '';
    position: absolute;
    bottom: -3px;
    left: 0;
}

스크린 샷을 참조하고 의사 요소를 빨간색으로 표시하여 더 잘 보이게하십시오.

See the screenshot, made the pseudo element red to make it more visible.


여러 상자 그림자를 사용하여 그림자를 덮을 수도 있습니다.

box-shadow: 0 10px 0 #fff, 0 0 10px #ccc;


If you added two spans to hook onto then you could use two, something like:

box-shadow: -1px -1px 1px #000;

on one span and

box-shadow: 1px -1px 1px #000;

on another. Might work!

If the shadows overlap you could even use 3 shadows - one 1px to the left, one 1px to the right and one 1px up, or however thick you want them.


If you are willing to use experimental technology with only partial support, you could use the clip-path property.

This will produce the desired effect: a box shadow on the top, left and right sides with a clean cut-off on the bottom edge.

In your case you would use clip-path: inset(px px px px); where the pixel values are calculated from the edge in question (see below).

#container {
    box-shadow: 0 0 8px 2px #888;
    clip-path: inset(-8px -8px 0px -8px);
}

This will clip the div in question at:

  • 8 pixels above the top (to include the shadow)
  • 8 pixels outside of the right edge (to include the shadow)
  • 0 pixels from the bottom (to hide the shadow)
  • 8 pixels outside of the left edge (to include the shadow)

Note that no commas are required between pixel values.

The size of the div can be flexible.


I did a sort of hack, not perfect, but it looks okay:

<ul class="tabs">
<li class="tab active"> Tab 1 </li>
<li class="tab"> Tab 2 </li>
<li class="tab"> Tab 3 </li>
</ul>

<div class="tab-content">Content of tab goes here</div>

SCSS

 .tabs { list-style-type: none; display:flex;align-items: flex-end;
  .tab {
    margin: 0;
    padding: 4px 12px;
    border: 1px solid $vivosBorderGrey2;
    background-color:$vivosBorderGrey2;
    color: $vivosWhite;
    border-top-right-radius: 8px;
    border-top-left-radius: 8px;
    border-bottom: 0;
    margin-right: 2px;
    font-size: 14px;
    outline: none;
    cursor: pointer;
    transition: 0.2s;
    &.active {
      padding-bottom: 10px;
      background-color: #ffffff;
      border-color: #eee;
      color: $vivosMedGrey;
      border-bottom-color: transparent;
      box-shadow: 0px -3px 8px -3px rgba(0, 0, 0, 0.1);
    }
    &:hover {padding-bottom: 10px;
    }
   } 

.tabContent {
  border: 1px solid #eee;
  padding:10px;
  margin-top: -1px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

참고URL : https://stackoverflow.com/questions/1429605/creating-a-css3-box-shadow-on-all-sides-but-one

반응형