それぞれ可変幅の 2 つの要素にボックス シャドウを追加しようとしています。私の望ましい結果は次のようになります。
重なっているボックスの影を覆う疑似要素を使用してこの結果を得ようとしましたが、透過性が必要なため、ボックスの端に小さな重なりがない解決策を見つけることができないようです疑似要素も正しい幅に調整されません。私の問題を解決するために、上部のボックスに必ずしも上部の境界線が必要なわけではありません。
HTML:
<div>
<p></p>
</div>
<div>
<p></p>
</div>
SCSS:
div {
display: inline-block;
margin: 75px;
width: 200px;
height: 50px;
position: relative;
p {
position: absolute;
top: 100%;
left: 0;
height: 300px;
width: 250px;
}
&, p {
background: #ededed;
}
}
div:last-child p {
width: 150px
}
div {
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.2);
p {
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.2);
}
}
編集:
通常、私はレイアウトに JS を考慮しませんが、私の特定のケースでは、ユーザーの操作が発生するまでボックスが表示されないため、スクリプトを使用して問題を解決しました。スクリプトは、DOM の準備ができたときに上の要素が下の要素よりも大きいかどうかを判断し、それぞれに「大きい」または「小さい」クラスを追加します。それを知ることで、疑似要素の幅がどの要素を継承する必要があるかがわかります。どの要素が大きいかを変更するような方法で要素のサイズが変更されない限り、これはうまく機能します。
また、JS を必要とせず、ボックス サイズのぼかしのみが必要でスプレッドが不要な場合に備えて、疑似要素が 1 つ少ない、よりクリーンなソリューションもあります。
フィドル:
すべての白い背景が黒に置き換えられているこのスクリーンショットでわかるように、最終結果は完全ではありません。
左ボックスの左上を見ると、ボーダーの影が少しカーブしているのがわかります。とにかく、それは私に十分に近いです。
cssのみを使用して最初のフィドルと同様の結果をもたらすソリューションを誰かが見つけたら、本当に感謝します。