IEでもCSSによる画像のトリミングをしたい (object-fitのIE11対応)
はじめに
アバターなどユーザーがアップロードした画像を特定の領域内に表示したいというケースがフロントエンドの実装をやっているとちょこちょこあります。
そのような場合は、object-fitという素晴らしいCSSプロパティがあるので、これだけ使っていれば大体事足りるのですが、残念なことにIEはこのobject-fit
プロパティに対応していません。
参考 Can I use: object-fit/object-position
すでにIEは非推奨ブラウザなので対応しないとできれば良いのですが、案件によってはIE11対応を求められることもあります。そういった場合にどうやったらobject-fit
みたいな実装をIEでもできるのかを本記事に記載します。
対応内容
同じような悩みを抱えていたエンジニアが多かったようで、素晴らしい先人がobject-fit-imagesというライブラリですでにIEのobject-fit
のPolyfill対応をしてくれているので、今回はこちらを使用します。
-
yarn add object-fit-images
でライブラリを追加 - 下記のコードのように
object-fit
を利用したいimgタグにfont-family
の記述を追加します
.your-favorite-image {
object-fit: contain;/* ← これでIE以外のブラウザは対応可能*/
font-family: 'object-fit: contain;';/* ←の記載をIEのPolyfil用に追加*/
}
3.</body>
の前か、DOMの読み込みが終わったタイミングでobjectFitImages()
を呼び出します
(objectFitImages
にセレクタを渡すことでPolyfilの対象を指定することもできます)
=> background-image
などで'object-fit
相当の表現ができていることを確認できます。
補足事項
1.デフォルトの挙動
object-fit-images
はデフォルトではすべてのimg
タグを対象にします
2.objectFitImages
の呼び出しのタイミング
object-fit-images
はobject-fit
のターゲットとなるElementのsrc
属性 / srcset
属性を読み取って処理を行います。
そのため、React / Vue / jQueryなど動的にDOMを生成する場合はsrc
属性 / srcset
属性が反映されたあとにobjectFitImages
の呼び出しをする必要があります。
最後に
DOMを動的に生成している場合は注意が必要ですが、IEでの画像対応どうしようという場合にこのライブラリを利用すると少ないコード量で実装できるので助かりました。
自分もこういう痒いところに手が届くライブラリをOSSで公開したいなと思いました。
Author And Source
この問題について(IEでもCSSによる画像のトリミングをしたい (object-fitのIE11対応)), 我々は、より多くの情報をここで見つけました https://qiita.com/saba_can00/items/349b9cd4940b81300e28著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .