119

タブ付きのナビゲーションバーがあり、開いているタブに他のタブと区別するための影を付けたいと思います。また、タブセクション全体で、開いているタブを除くすべてのタブの下部をシェーディングする単一の影(下部の水平線を参照)を上に配置したいと思います。

CSS3のbox-shadowプロパティを使用してそれを実行しますが、必要な部分だけをシェーディングする方法がわかりません。

通常、開いているタブの下部の影をコンテンツ領域(z-index上)で覆いますが、この場合、コンテンツ領域自体に影があるため、タブを覆ってしまうだけです。

タブレイアウト

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

シャドウライン。

影は水平線から上に、垂直線の外側に上がります。

                _______
               | |
_______________ | | _________________

これが実際の例です:

天才、そこに何か助けはありますか?

4

9 に答える 9

73

サンプルでは、​​このスタイルで#content内にdivを作成します

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

#contentスタイルを変更し(パディングを削除)、影を追加します

#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 */
}
于 2009-09-20T14:56:05.687 に答える
27

オーバーフローでそれを切り取ります。

div div {box-shadow:0 0 5px #000; height:20px}
div {overflow:hidden;height:25px; padding:5px 5px 0 5px}
<div><div>tab</div></div>

于 2009-09-27T09:15:58.077 に答える
13

他のdivを使用せずに複数のCSSシャドウを使用して、角を曲がったところにシャドウがないことに注意して、目的の効果を得ることができます。

div.shadow {
    -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;
    height: 25px
}
 <div style="height: 25px"><div class="shadow">tab</div></div>

全体的には非常に邪魔になりませんが。

于 2012-03-21T07:47:16.657 に答える
11

この問題を解決するもう1つの、かなり創造的な方法は、要素の1つに:afterまたは:before疑似要素を追加することです。私の場合、次のようになります。

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

スクリーンショットを参照してください。疑似要素を赤にして、見やすくしました。

スクリーンショットを参照してください。疑似要素を赤にして、見やすくしました。

于 2016-07-14T10:49:37.517 に答える
8

アップデート:

clip-path現在、すべての主要なブラウザでサポートされています。


元の回答:

部分的なサポートのみで実験技術を使用する場合は、clip-pathプロパティを使用できます。

これにより、目的の効果が得られます。上部、左側、右側にボックスシャドウがあり、下端にきれいなカットオフがあります。

あなたの場合、clip-pathを使用します:inset(px px px px); ここで、ピクセル値は問題のエッジから計算されます(以下を参照)。

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

これにより、問題のdivが次の場所でクリップされます。

  • 上部から8ピクセル上(影を含めるため)
  • 右端の外側8ピクセル(影を含む)
  • 下から0ピクセル(影を隠すため)
  • 左端の外側8ピクセル(影を含む)

ピクセル値の間にコンマは必要ないことに注意してください。

divのサイズは柔軟にすることができます。

于 2017-03-17T02:51:05.720 に答える
7

個人的に私はここで見つけた解決策が一番好きです:http://css3pie.com/demos/tabs/

これにより、ゼロ状態またはホバー状態を背景色として使用できますが、その上にある下のコンテンツからの影が残っています。上記の方法でそれが可能かどうかはわかりません。

ホバー状態のシャドウタブ

アップデート:

実は私は間違っていました。承認されたソリューションで、上記のホバー状態をサポートすることができます。これを行う:

aに正の親戚を置く代わりに、下の#content div(影が付いている)よりも高いが、のz-indexよりも低いz-indexを持つ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 */
于 2012-01-19T05:53:50.953 に答える
4

複数のボックスシャドウを使用してシャドウを隠すこともできます。

ボックスシャドウ:0 10px 0 #fff、0 0 10px #ccc;

于 2013-02-20T10:04:12.380 に答える
1

フックするスパンを2つ追加した場合は、次のように2つを使用できます。

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

1つのスパンで

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

別の。うまくいくかもしれません!

影が重なっている場合は、3つの影を使用することもできます。1つは左に1ピクセル、1つは右に1つ、もう1つは上に1ピクセル、または任意の厚さにします。

于 2009-09-15T21:40:40.363 に答える
0

私はある種のハックをしましたが、完璧ではありませんが、問題ないようです。

<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);
}
于 2019-02-26T17:45:05.683 に答える