片側だけにインセットボックスシャドウを作成する方法は?


109

どういうわけか、divの片側にインセットボックスシャドウのみを設定することは可能ですか?差し込みについて話していることに注意してくださいここでは、通常の外側のボックスシャドウではなく、ボックスシャドウ。

たとえば、次のJSFiddleでは、インセットシャドウが4辺すべてにさまざまな程度で表示されています。

上部のみに表示するにはどうすればよいですか?または、最大で上下のみですか?

JSFiddle: http ://jsfiddle.net/ahmadka/KFrun/

.box {
  -webkit-box-shadow: inset 0px 5px 10px 1px #000000;
  box-shadow: inset 0px 5px 10px 1px #000000;
}

.text {
  padding: 20px;
}
<div class="box">
  <div class="text">
    Lorem ipsum ....
  </div>
</div>


3
別の(完全にカスタマイズ可能な)方法は、背景のグラデーションです...
vals

回答:


237

これはあなたが探しているものです。影を付けたい各辺の例があります。

.top-box
{
    box-shadow: inset 0 7px 9px -7px rgba(0,0,0,0.4);
}
.left-box
{
    box-shadow: inset 7px 0 9px -7px rgba(0,0,0,0.4);
}
.right-box
{
    box-shadow: inset -7px 0 9px -7px rgba(0,0,0,0.4);
}
.bottom-box
{
    box-shadow: inset 0 -7px 9px -7px rgba(0,0,0,0.4);
}

その他の例については、スニペットを参照してください。


13

トリックは、第二のある.box-innerオリジナルよりも幅が大きくなっている内部、.boxおよびbox-shadowそれに適用されます。

次に、追加さ.textれた幅を補うために、にパディングを追加しました。

ロジックは次のようになります。

ボックスロジック

そして、CSSでこれを行う方法を次に示します。

最大幅を使用して、幅が広く.inner-boxならないようにし、残りが切り取られるようにします。.boxoverflow

.box {
    max-width: 100% !important;
    overflow: hidden;
}

110%は親よりも広く、子のコンテキストでは100%です(.boxたとえば、親の幅が固定されている場合も同じです)。負のマージンは幅を補い、要素を中央に配置します(右側の部分だけを非表示にするのではなく):

.box-inner {
    width: 110%;
    margin-left:-5%;
    margin-right: -5%;
    -webkit-box-shadow: inset 0px 5px 10px 1px #000000;
    box-shadow: inset 0px 5px 10px 1px #000000;
}

そして、X軸にパディングを追加して、より広いものを補い.inner-boxます:

.text {
    padding: 20px 40px;
}

これが動作するフィドルです。

フィドルを調べると、次のように表示されます。

。ボックス .box-inner 。テキスト


コードなしでフィドルへのリンクを投稿するにはどうすればよいですか?:O
Mohammad Areeb Siddiqui 2013

おとこ!それはSOハックです!クール:P
Mohammad Areeb Siddiqui 2013

私のFirefoxでは、右と左の境界にテキストが表示されません。テキストは単に切り取られます。(これはスクリーンショットgoo.gl/aO8ZXです)私は自分で試してみて、いくつかの余分なものdivを使って影を隠しています... jsfiddle.net/KFrun/19
Fabian N.

はい、jsfiddle.net / KFrun / 6を使用しています。Firefoxのバージョンに問題があるのでしょうか?私はUbuntuにFirefox 21.0を使用しています...
Fabian N.

しかし、その下にはまだ影があります
コーディグルドナー2013

8

かなり遅いですが、パディングを変更したり、余分なdivを追加したりする必要のない重複した回答がここにあります。「拡散距離を定義する4番目の長さに負の値を使用します。これは見過ごされがちですが、すべての主要なブラウザーでサポートされています」

回答者のフィドルから

box-shadow: inset 0 -10px 10px -10px #000000;

7

これは少し近づきます。

.box
{
    -webkit-box-shadow: inset -1px 10px 5px -3px #000000;
    box-shadow: inset -1px 10px 5px -3px #000000;
}

それが私が試したものです!しかし、彼はそれを望まなかったので、答えとして投稿しませんでした!:(
Mohammad Areeb Siddiqui 2013

いいね。ありがとう❤️
mghhgm

(少なくとも今のところ)これよりも簡単な答えがあるかもしれません。ありがとう
Gendrith

1

試してみてください、多分便利です...

box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 3px #cbc9c9;
                    -webkit-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;
                    -o-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;
                    -moz-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;  

上記のCSS場合、下部にボックスシャドウがあります。
あなたはより赤くすることができますここで


1

これはあなたが探しているものとは正確ではないかもしれませんが、rgbaと組み合わせて使用することで非常に類似した効果を作成できますlinear-gradient

  background: linear-gradient(rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%);

これにより、50%の不透明度(rgba(0,0,0,.5))の黒から透明(rgba(0,0,0,0))までの線形グラデーションが作成され、上から30%まで透明になります。これらの値を操作して、目的の効果を作成できます。度の値(linear-gradient(90deg, rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%))を追加するか、色を切り替えて、別の面に配置できます。さまざまな側面のさまざまな角度など、本当に複雑なシャドウが必要な場合は、レイヤー化を開始することもできますlinear-gradient

動作を確認するためのスニペットを次に示します。

.box {
  background: linear-gradient(rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%);
}

.text {
  padding: 20px;
}
<div class="box">
  <div class="text">
    Lorem ipsum ....
  </div>
</div>


0

インセットボックスシャドウは上面のみですか?

#box {
            background: #CCC;
            -webkit-box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            -moz-box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            font: bold 18px/1.2em sans-serif;
            height: auto;
            margin: 15px auto;
            padding: 75px 15px 25px;
            text-align: center;
            width: 80%;
        }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.