今日、Firefox 18.0.2 で奇妙な動作を発見しました。FF19.0にアップデートしてもダメでした。
特定の縦横比を維持しながら、動的なサイズのサムを作成する必要がありました。おそらく、次のような他のより良い解決策があります。
Html: - Doctype は HTML5 です
<div class="img">
<img alt="" src="/blank.gif" class="imgScalar">
<div class="imgA">
<div class="imgP">
<div style="background-image:url(-pathToThumb-)" class="thumb"></div>
</div>
</div>
</div>
「blank.gif」のサイズは 2x2px 固定です。辺の長さが同じであることが重要でした。
CSS:
.img {
position: relative;
overflow: hidden;
margin: 1px 0;
}
.img .imgScalar {
width: 100%;
}
.img .imgA {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-image: url('../gfx/loader.gif');
background-repeat: no-repeat;
background-position: 50% 50%;
}
.img .imgP {
padding: 0 1px;
height: 100%;
overflow: hidden;
}
.img .thumb {
position: relative;
width: 100%;
height: 100%;
background-position: center top;
background-repeat: no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
.img .imgScalar,
.img.r16-9 .imgScalar {
margin-bottom: -43.75%;
}
.img.r16-10 .imgScalar {
margin-bottom: -37.5%;
}
.img.r4-3 .imgScalar {
margin-bottom: -25%;
}
.img.r9-16 .imgScalar {
margin-bottom: 77.77777777777777%;
}
.img.r10-16 .imgScalar {
margin-bottom: 60%;
}
.img.r3-4 .imgScalar {
margin-bottom: 33.333333333333314%;
}
私にとっての利点は、@media ルールにヒットしたときに CSS でアスペクト比を切り替えることができることです。
@media (max-width: 767px) {
.img.r9-16 .imgScalar,
.img.r10-16 .imgScalar,
.img.r3-4 .imgScalar {
margin-bottom: -25%;
}
}
情報として: これは、デフォルトで幅 1200px の静的なレイアウトに統合されており、解像度が 1200px を下回り、クライアント ブラウザーがルールをサポートし、モバイル解像度にも反応する場合は流動的です (すべて CSS のみ)。
Google Chrome、Opera、Safari、Internet Explorer、および iPhone で上記をテストしましたが、これらのテスト済みデバイスで動作するようです...これを実行している唯一のブラウザーは Firefox です。
問題に見えるのは:
.thumbは絶対配置された.imgAの子要素であるため、background-size は、相対配置された.thumb自体ではなく、.imgAの次の相対親に適用されるようです。テスト目的で、.imgPも相対化しましたが、これも役に立ちません。
一時的な解決策:
HTML:
<div class="img">
<div class="imgWrap">
<img alt="" src="/iS16-9.gif" style="background-image:url(-imgPath-)" class="imgScalar">
</div>
</div>
iS16-9.gif は、「ヘルパー」要素として使用されるいくつかの空白の画像の 1 つです。名前が示すように、縦横比を表すために幅 16 ピクセル、高さ 9 ピクセルがあります。
CSS:
.img > .imgWrap {
position: relative;
margin: 1px;
background-image: url('../gfx/loader.gif');
background-repeat: no-repeat;
background-position: 50% 50%;
}
.img > .imgWrap > img {
width: 100%;
background-position: center top;
background-repeat: no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
javascript-components を使用せずに解像度の変更に対応する機能がなくなってしまったのは残念です。
たぶん、この問題を解決する方法を知っている人もいますか?
//編集:最初の解決策と互換性のないブラウザを確認しました:
- ファイアフォックス
- イタチ
- 風はかせ 0.5.8
- アイスエイプ
- 海猿
MSIE5.5 以外の他のブラウザーでは問題はありません。MSIE6.0 でもこれを処理できるようです。Mozilla ベースのブラウザーだけが、すべてのバージョンでこれに完全に失敗しています (私が見たように 20 も)