使用事例
「スライドショー」タイプのアプリケーションを作成しようとしています。各スライドのアスペクト比は固定されていますが、コンテンツを通常の幅/高さでレンダリングしたいので、ビューポートの幅/高さを使用して、スライドのコンテンツにCSS3「transform:scale」を使用しようとしています。スライドをビューポートに合わせるための理想的なスケール/マージンを計算します。ある特定のスライドで、私は人々のためのいくつかの「情報カード」と各人の「後継者」のリストを示しています
問題
Chromeは、画像上で非常に奇妙な動作を示しています。ウィンドウのサイズを変更すると、画像はあちこちに移動します。なんらかの方法で画像を強制的に再描画すると、画像は自動的に修正されるように見えます(つまり、ページを下にスクロールして上に戻る)
これを編集すると、境界線の半径のあるボックス内の画像に特に関連しているようです。
質問
これはChromeのバグですか?この問題を解決する回避策はありますか?
実例
このライブの例では、結果ペインのサイズを変更して、画像を拡大縮小することができます。少なくとも私のバージョンのクロームでは、画像は混乱します。
投稿編集
問題を再現するために必要な最小限のコードまでコードをいじりました。Webkitベンダーのプレフィックスのみを使用しました。
また、問題の説明を更新しました。コードをいじった後、画像を含む要素の境界半径と関係があるはずだと気付いたからです。
HTML
<div class="container">
<div class="inner">
<div class="box">
<img src="https://en.gravatar.com/userimage/22632911/5cc74047e143f8c15493eff910fc3a51.jpeg"/>
</div>
</div>
</div>
CSS
body {
background-color: black;
}
.inner {
background-color: white;
width: 800px;
height: 600px;
-webkit-transform-origin: 0 0;
}
.box {
overflow: hidden;
-webkit-border-radius: 10px;
width: 80px;
height: 80px;
margin: 10px;
}
JAVASCRIPT
(function ($) {
var $inner = $('.inner');
var $window = $(window);
var iWidth = parseInt($inner.css('width'));
var iHeight = parseInt($inner.css('height'));
var iRatio = iWidth / iHeight;
function adjustScale() {
var vWidth = $window.width();
var vHeight = $window.height();
if (vWidth / vHeight > iRatio) {
width = vHeight * iRatio;
} else {
width = vWidth;
}
var scale = width / iWidth;
$inner[0].style.WebkitTransform = 'scale(' + scale + ')';
}
adjustScale();
$window.resize(adjustScale);
})(jQuery);