私は 91 * 91 ピクセルの 62 枚の画像のスプライトを持っています。これにより、全体が 91 * 5642 ピクセルになります。それらは、ユーザー/ポインターの動きに応じて拡大および縮小する一種の動的グリッドで表示されます。要素 (std 91 * 91 px) がズームインして 120 * 120 px になることがあります。明らかに、91 * 91 px の画像全体が 120 * 120 要素全体に表示されるように、背景を拡大したいと考えています。
background-size: 100% auto
幅を常に完璧にするために入力します。問題は、background-position
その値も更新されることを期待していることです! 62 要素すべてに inline がありstyle=background-position etc
ます。インラインから背景位置を更新できません。背景を最初に配置してからサイズ変更(ズーム)し、サイズ変更してから配置(間違った位置にズーム)するのではありません。
私が意味を成しているのかどうかはわかりません。やや明確にするために:
- すべての要素のスタイルは
width: 91px; height: 91px; background-size: 100% auto;
. - 2 番目のイメージのインライン スタイルは
background-position: 0 -91px
. - その要素にカーソルを合わせると、スタイルが取得さ
width: 120px; height: 120px;
れ、サイズ変更後に配置が行われるため、2 番目の画像の大部分と 1 番目の画像の一部が表示されます =( - background-position (ズーム/ホバー後) を に変更すると
0 -120px
、正しく配置されます。(しかし、ズーム/ホバリングしていないときは明らかに間違っています。)
非常に簡単な解決策は、実際のzoom: 1.3
またはを使用することtransform: scale(1.3)
ですが、それはトランジションで非常に遅くなります。
私は何かが欠けているに違いない。CSS はこれよりも賢くなければなりません。背景サイズのスプライト… ありえないじゃないですか!?
スプライトがどのように見えるかは私次第なので、91 * 91 の代わりに 120 * 120 グリッドにすることもできます。
編集:フィドルの例: http://jsfiddle.net/rudiedirkx/g4RQx/
スマートな答え 1: background-position: 0 calc(100% / 61 * 2)
(62 枚の画像から 61、3 枚目の画像から 2)