1つを除くすべての面に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スタイルを変更(パディングを削除)して影を追加
#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/
これにより、ゼロ状態またはホバリング状態になり、背景色が下のコンテンツからの影をオーバーレイしたままになります。上記の方法でそれが可能かどうかわからない:
更新:
実際、私は間違っていました。上記のホバー状態をサポートされているソリューションでサポートすることができます。これを行います:
aに正の相対値を持たせる代わりに、以下の#content divよりも高いzインデックス(影がある)でa-activeクラスに配置しますが、z- 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 */
複数のボックスシャドウを使用してシャドウを隠すこともできます。
box-shadow:0 10px 0#fff、0 0 10px #ccc;
フックに2つのスパンを追加した場合、次のような2つのスパンを使用できます。
box-shadow: -1px -1px 1px #000;
1つのスパンで
box-shadow: 1px -1px 1px #000;
別の。動作するかもしれません!
影が重なる場合は、左に1ピクセル、右に1ピクセル、上に1ピクセル、または任意の太さの3つの影を使用することもできます。
部分的なサポートのみで実験技術を使用する場合は、 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のサイズは柔軟に設定できます。
ハッキングのようなもので、完璧ではありませんが、問題ないように見えます:
<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);
}