CSS3 box-shadow:insetは片面または両面しか実行できませんか?ボーダートップのように?


80

css3でのサイド固有の内部シャドウのサポートについて疑問に思っています。

私はこれがサポートされているブラウザでうまく機能することを知っています。

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

私は次のようなことを達成する方法があるかどうかについて興味があります:

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

左側と右側のみボックスシャドウを取得する方法の重複の可能性があり、より詳細な回答と説明があります。
brichins 2017年

回答:


147

これは私のために働いたものです:

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

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


9
これまでで最もエレガントなソリューション。
enyo 2012

驚くばかり!私はこれに永遠に苦労してきましたが、この一本の線はこれまでで最もセクシーな片側の境界線をもたらします。ありがとう!
sliq 2012年

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

うーん、私たちがしているのは、大きなスプレッド値を使用し、次に負のブラーを使用してそれを否定することだけです。賢い
SamiullahKhan18年

11

0にbox-shadow-top設定offsetxすると、本当に必要だとは思いません。offsety、任意の正の値に、残りのシャドウのみが上に表示。

上に影を、下に影を付けたい場合は、2つのdivを使用するだけです。

<div style="box-shadow:inset 0 1px 5px black;">
  <div style="box-shadow:inset 0 -1px 5px black;">
    some content
  </div>
</div>

側面の影を取り除きたい場合はrgbahex色の代わりに使用して大きく設定して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、側面の影を取り除きたい場合rgbaは、hex色の代わりに使用して大きく設定しoffsetyます:box-shadow:0 5px 5px rgba(0,0,0、.5)このようにすると、影の不透明度が高くなり、側面が非表示のままになりますオフセットを大きくすると、不透明度が低くなります
seler

3
:FYI、代わりに2つの入れ子のdivのあなたがこれを使用して1つのDIVでそれを行うことができ、同時に上部と下部の影を達成するために持っていることのbox-shadow:inset 0 1px 5px black, inset 0 -1px 5px black;
ジェイク・ウィルソン

10

この例のように、親ボックスで通常の​​シャドウがカットされた要素を使用:beforeafterますoverflow:hiddenhttp//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はスクロール可能だったので、それが機能するためには位置をスティッキーに変更する必要がありました。
ミハイ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
時には、一歩下がって、何を達成しようとしているのかを考える必要があります。そして、これは多くの場合、片側の内側のボックスの影で私たちが求めているものです。鮮やかさ。できれば2回賛成します!
random_user_name 2013年

このコメントを最初に見たとき、これまで機能するのは複雑に見えると思いましたが、完全に機能しました。ありがとうございました!!
アレックス

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;

一方向に影を付けるには、「blur」パラメータを「spread」パラメータで無効にしてから、「h-pos」および/または「v-pos」パラメータをこの同じ値で調整する必要があります。反対側の境界線または三重の境界線では機能しません。もう1つの定義を追加する必要があります。

その他の例:http//codepen.io/GBMan/pen/rVXgqP



1

私は自分でこの問題を抱えていました。私が見つけた解決策は、複数のボックスシャドウ(シャドウが必要な側ごとに1つ)を使用することでした。定義は次のとおりです。

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

これがそれを考える方法です:

  • まず、スプレッドを0にします(これにより、すべての側で効果が無効になります)
  • hオフセット(正に設定すると左側にキャストされ、負に設定すると右側にキャストされます)
  • vオフセット(正に設定した場合は上側に、負に設定した場合は下側にキャストされます)

ここでは、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);
}

多くの人は、このようにマークアップを追加することは意味論的ではなく、悪い習慣であると主張するでしょう。これinsetは、box-shadow cssの値を使用してクリエイティブにすることで、実現できます。同じ要素にボックスシャドウを積み重ねることができることを忘れないでください。したがって、@ Jakobudが上記のコメントで述べたようなものを使用できます。box-shadow:inset 0 1px 5px black, inset 0 -1px 5px black; 別の方法は、不要なマークアップを追加するよりもわずかに不快感が少ない:before:afterセレクターを使用することです。しかし、元の要素を直接選択してスタイルを設定することでそれを実行できるのであれば、なぜそうするのでしょうか。
ORyan 2013

0

box-shadow4つの側面すべてに対応しています。あなたはそれを変えることはできません(まだ?)。4つのサイズのbox-shadow定義がありOffsetXoffsetYBlurSpread


1
スプレッドとブラーは同じではありません。それぞれに個別の値があります。だから、技術的に6.があるInset/OutsetOffsetXOffsetYBlurRadiusSpreadRadiusColor。他の人が指摘しているように、次のように片側を指定できますbox-shadow: inset 0 8px 6px -6px black;
ORyan 2013

1
本当。4つのサイズすべてを反映するように回答を変更しました。
ルディ2013

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.