要素を拡大縮小させたり、水平方向に移動させることができるobject-view-box
について学びました。
object-view-boxで拡大アニメーション
画像をホバーした時に拡大するアニメーションで、object-view-box
が使えそうです↓
このプロパティのおかげで、画像を拡大させて親要素にoverflow:hidden;
を指定する必要がなくなります。
このプロパティについて詳しく知りたい方は以下をご覧ください。
object-view-boxの基礎知識
何ができる?
仕様書から引用(原文をDeepL翻訳)↓
object-view-box プロパティは要素の上に “ビューボックス “を指定し、要素の内容のズームやパンニングを可能にする。これは SVG の 属性に対応する。[SVG2] に対応する。
2.1. Setting The Viewbox: the object-view-box property
主に画像に対して使われていることが多かったです↓
![](https://yuito-blog.com/wp-content/uploads/2023/09/bccbe1d78f402100b5a1c798ecc84c0e-1-1024x785.jpg)
![](https://yuito-blog.com/wp-content/uploads/2023/09/0b6a5ff6dd3678a014e808c398192577-1024x785.jpg)
指定できる値
以下の値を指定できます↓
- none
- rect()
- xywh()
- inset()
rect()
とxywh()
は、実験的機能でFirefoxのみ対応です。
そのためinset()
のみ使えそうです。
inset()について
基本的にobject-view-box
にinset()
を指定して使用します。
引数には最大4つ値を指定できます。marginの一括指定と同じ感じです。
単位にはpxや%が使えます。%は、親要素ではなくその要素自身の幅や高さが基準になります。
例えば、画像の幅と高さが500pxでobject-view-box:inset(10%);
と指定すると以下のように拡大されます↓
![](https://yuito-blog.com/wp-content/uploads/2023/09/Group-6-1024x465.jpg)
また最大値は、要素自身の幅または高さの値未満です。例えば、以下のような指定は無効です↓
object-view-box:inset(50%); // inset(50% 50% 50% 50%)と同じ指定
上記の場合、何も指定していないのと同じ状態になります。上下または左右合わせて100%未満にする必要があります。
以下のCodepenを実際に動かして確認してみてください(jheyさんのCodepenから引用)↓
See the Pen object-view-box Image Zoom [Chrome 104+] by Jhey (@jh3y) on CodePen.
また、inset()
にはroundオプションがありますが、object-view-box
で試してみた感じ効きませんでした。
ブラウザの対応状況
以下のみ対応してます(Can I useより引用)↓
- Chorme104〜
- Edge104〜
- Opera90〜
SafariとFirefoxは対応していません。実際に使うには、まだ早いかもです。
参考サイト
![](https://ishadeed.com/assets/object-view-box/twitter-card.jpg)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgwJTkwQ1NTJUUzJTgwJTkxQ1NTJUUzJTgxJUEwJUUzJTgxJTkxJUUzJTgxJUE3JUU3JTk0JUJCJUU1JTgzJThGJUUzJTgyJTkyJUU0JUJCJUJCJUU2JTg0JThGJUUzJTgxJUFFJUU1JUEwJUI0JUU2JTg5JTgwJUUzJTgyJTkyJUUzJTgzJTg4JUUzJTgzJUFBJUUzJTgzJTlGJUUzJTgzJUIzJUUzJTgyJUIwJUUzJTgxJUE3JUUzJTgxJThEJUUzJTgyJThCJUUzJTgwJThDb2JqZWN0LXZpZXctYm94JUUzJTgwJThEJUUzJTgxJThDJUU0JUJFJUJGJUU1JTg4JUE5JUUzJTgxJTk5JUUzJTgxJThFJUUzJTgxJTlGJUUzJTgwJTgyJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz1kZTdjZjU5NTBmZGJmZjExOTRmNDRlMTgyMzFmZDZjMQ&mark-x=120&mark-y=96&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBkZWd1ZGVndTI1MTAmdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTg4ZmRjM2IzMTZlMWViNGY5YzhmNGI5NjRiNDE0YTky&blend-x=120&blend-y=445&blend-mode=normal&txt64=aW4gUWlpdGHmoKrlvI_kvJrnpL4&txt-width=972&txt-clip=end%2Cellipsis&txt-color=%233A3C3C&txt-font=Hiragino%20Sans%20W6&txt-size=36&txt-x=134&txt-y=546&s=0eca7bed556007e0a735b9e9eda1214a)