更新された回答 (純粋な CSS3)
極端な要件には、極端なソリューションが必要な場合があります。元の回答 (以下) に基づいて、機能する純粋な css ソリューションを作成しました (時間をかけたい場合は、より適切に機能させることができます)。現在の例はレンダリングが少し「途切れ途切れ」ですが、問題ないかもしれませんが、そうでない場合は、それを駆動しているすでにわいせつな数の@media
クエリを拡張する必要があります ( LESSまたはを使用して実装する方がはるかに簡単でしょう)。 SASS ; 数式駆動の Excel スプレッドシートをまとめて、数値を迅速に生成できるようにしました)。次のコードを使用します。
HTML
<div class="box">
<img src="yourImage.jpg" />
</div>
CSS
.box{
height:300px;
min-width: 100px; /*could be different, but you ought to have some min*/
overflow:hidden;
}
.box img {
height: 100%;
width: 100%;
-ms-transform-origin: 100% 100%; /* IE 9 */
-webkit-transform-origin: 100% 100%; /* Safari and Chrome */
-moz-transform-origin: 100% 100%; /* Firefox */
-o-transform-origin: 100% 100%; /* Opera */
transform-origin: 100% 100%;
}
/*Sample... you need alot of these--my fiddle example has 51*/
@media screen and (min-width: 100px) {
.box {
-ms-transform:skewY(45deg);
-moz-transform:skewY(45deg);
-webkit-transform:skewY(45deg);
-o-transform:skewY(45deg);
transform:skewY(45deg);
}
.box img {
-ms-transform:skewY(-90deg);
-moz-transform:skewY(-90deg);
-webkit-transform:skewY(-90deg);
-o-transform:skewY(-90deg);
transform:skewY(-90deg);
}
}
度数の計算方法はこちら
height: 300px
狭い側がほぼ 100px
高く、台形の角度が等しいと仮定します。これは、上下のオフセットが であることを意味し(300px - 100px) / 2 = 100px
ます。次に、次の式に従って.box
角度が@media
クエリの金額から設定されます。min-width
Angle = arctan(100/min-width) /*100 is the upper/lower offset as above*/
.box img
角度についてはを取り、Angle
を掛け-2
ます。したがって、次の疑似コード.box
としてメディアクエリと.box img
変換が生成されます。
@media screen and (min-width: [your target min-width]) {
.box {transform: skewY(Angle)}
.box img {transform: skewY(-2*Angle)}
}
それがどの程度スムーズに機能min-width
するかは、新しい角度設定を取得するために変更を加えるマイクロスケールに完全に依存します上記の CSS コードのコメントで述べたように、私の例では 51 回のメディア クエリ呼び出しを使用していますが、まだ途切れがあります。
代わりにいくつかの JavaScript ソリューションを使用する方がよいでしょうか...おそらく、それは完全にデザイナー次第なので、純粋な css で動作するようにすることができるという純粋な概念実証として、ここでこれを提供します。
元の回答
これで流動的な幅を実現しているようです。画像のどの程度またはどの部分が表示されているかをどの程度制御したいのかわかりません。そのため、ニーズに完全には適合しない可能性がありますが、変換を使用して柔軟な幅の画像を作成し、偽の遠近感を与えます.