ブラウザのパフォーマンスへの影響により、box-shadow
CSS プロパティを使用できません。これは、シャドウを含む同じ外観のスタイルを持つ必要がある、似たような外観の要素がページに多数あるためです。これが、従来の PNG 画像を使用して影を実装したい理由です。
事実
- 私の要素は事前定義されており、さらに重要なことに固定されたピクセル幅を持っています
auto
内容に応じて流体の高さ ( ) があります。- それらは要素に直接コンテンツを持ち、一部の子要素は境界線の外側に配置されます
- CSS3 を使用できますが、パフォーマンスが重要な部分 (グラデーション、影など) は避ける必要があります。
- CSS疑似要素は無制限に使用可能
要件
- 流動的なシャドウを作成するために追加のラッパー要素を追加しないでください
- アプリケーションはモバイル ブラウザーでスムーズに実行する必要があります。モバイル デバイスの処理能力はデスクトップ コンピューターよりもはるかに低いため、シャドウによってパフォーマンスが大幅に低下するようです。
可能な方向
私は疑似を使用:before
し:after
て、含まれている要素に上から下および下の影を表示することを考えましたが、これらの疑似は親要素内に表示され、z-index
これらの子よりも親を高く配置しても効果はありません。
最終結果のビジュアルデモ
私が達成したい純粋なCSS3のこのJSFiddleデモは、PNGシャドウを使用しています。実際には、これらのボックスが多数存在するため、モバイル ブラウザーがこれらすべての影と格闘していることは想像に難くありません。
アイテムは、PNG の影が必要なボックス (下記参照) の 1 つです。左のメニューは、ボックスの外側に配置された子要素です。
Chrome で表示
HTML
<div class="item">
<menu>
<li><a href="#">Yes</a></li>
<li><a href="#">No</a></li>
<li><a href="#">Maybe</a></li>
</menu>
<div class="content">
Some content
</div>
</div>
CSS3 レス
.item {
position: relative;
width: 300px;
background-color: #fff;
box-shadow: 0 0 10px #ccc;
margin: 20px 20px 20px calc(20px + 3.5em);
min-height: 5em;
&:first-child {
margin-top: 0;
}
&:after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 10px;
height: 5em;
background-color: #fff;
}
menu {
position: absolute;
top: 0;
left: -3.5em;
width: 3.5em;
margin: 0;
border: 0;
padding: 0;
list-style: none;
background-color: #fff;
box-shadow: 0 0 10px #ccc;
li a {
display: block;
text-align: center;
padding: 2px 0;
}
}
.content {
padding: .75em 1em;
}
}