π» Polyfill object-fit/object-position on <img>: IE9, IE10, IE11, Edge, Safari, ...
See the codeπ» Polyfill object-fit/object-position on
<img>: IE9, IE10, IE11, Edge, Safari, ...
background-size)srcset supportsrc and srcset properties and attributes keep working: img.src = 'other-image.jpg'| Comparison | fregante /object-fit-imagesπ | constancecchen /object-fit-polyfill | tonipinel /object-fit-polyfill |
|---|---|---|---|
| Browsers | IEdge 9-14, Android<5, Safari<10 | <- Same | "All browsers" |
| Tags | img | image video picture | img |
cover/contain | π | π | π |
fill | π | π | π |
none | π | π | π |
scale-down | π using {watchMQ:true} | π | π |
object-position | π | π | π |
srcset support | π Native or picturefill notes | π | π |
| Extra elements | π No | π Yes | π Yes |
| Settings | π via CSS | π via HTML | π via HTML |
You will need 3 things
one or more <img> elements with src or srcset
<img class='your-favorite-image' src='image.jpg'>
CSS defining object-fit and a special font-family property to allow IE to read the correct value
.your-favorite-image {
object-fit: contain;
font-family: 'object-fit: contain;';
}
or, if you also need object-position
.your-favorite-image {
object-fit: cover;
object-position: bottom;
font-family: 'object-fit: cover; object-position: bottom;';
}
To generate the font-family automatically, you can use the PostCSS plugin or the SCSS/SASS/Less mixins.
If you set the font-family via JavaScript (which must be followed by calling objectFitImages()), make sure to include the quotes in the property.
the activation call before </body>, or on DOM ready
objectFitImages();
// if you use jQuery, the code is: $(function () { objectFitImages() });
This will fix all the images on the page and also all the images added later (auto mode).
Alternatively, only fix the images you want, once:
// pass a selector
objectFitImages('img.some-image');
// an array/NodeList
var someImages = document.querySelectorAll('img.some-image');
objectFitImages(someImages);
// a single element
var oneImage = document.querySelector('img.some-image');
objectFitImages(oneImage);
// or with jQuery
var $someImages = $('img.some-image');
objectFitImages($someImages);
You can call objectFitImages() on the same elements more than once without issues, for example to manually request an update of the object-fit value.
resizeYou don't need to re-apply it on resize, unless:
You're using scale-down, or
your media queries change the value of object-fit, like this
img { object-fit: cover; }
@media (max-width: 500px) { img { object-fit: contain; } }
In one of those cases, use the watchMQ option:
objectFitImages('img.some-image', {watchMQ: true});
// or objectFitImages(null, {watchMQ: true}); // for the auto mode
Pick your favorite:
<script src="dist/ofi.min.js"></script>
<!-- CDN is also available, but I suggest you concatenate JS files instead -->
<!-- Visit https://cdnjs.com/libraries/object-fit-images -->
npm install --save object-fit-images
var objectFitImages = require('object-fit-images');
import objectFitImages from 'object-fit-images';
objectFitImages(images, options)Both parameters are optional.
| parameter | description | ||
|---|---|---|---|
images |
Type: string, element, array, NodeList, nullDefault: nullThe images to fix. More info in the Usage section | ||
options |
Type: objectDefault: {}Example: {watchMQ:true}
|
146 followers Β· starred Jan 2018
48 followers Β· starred May 2016
427 followers Β· starred Mar 2020
196 followers Β· starred Aug 2017
π» Polyfill object-fit/object-position on <img>: IE9, IE10, IE11, Edge, Safari, ...
See the codeπ» Polyfill object-fit/object-position on
<img>: IE9, IE10, IE11, Edge, Safari, ...
background-size)srcset supportsrc and srcset properties and attributes keep working: img.src = 'other-image.jpg'| Comparison | fregante /object-fit-imagesπ | constancecchen /object-fit-polyfill | tonipinel /object-fit-polyfill |
|---|---|---|---|
| Browsers | IEdge 9-14, Android<5, Safari<10 | <- Same | "All browsers" |
| Tags | img | image video picture | img |
cover/contain | π | π | π |
fill | π | π | π |
none | π | π | π |
scale-down | π using {watchMQ:true} | π | π |
object-position | π | π | π |
srcset support | π Native or picturefill notes | π | π |
| Extra elements | π No | π Yes | π Yes |
| Settings | π via CSS | π via HTML | π via HTML |
You will need 3 things
one or more <img> elements with src or srcset
<img class='your-favorite-image' src='image.jpg'>
CSS defining object-fit and a special font-family property to allow IE to read the correct value
.your-favorite-image {
object-fit: contain;
font-family: 'object-fit: contain;';
}
or, if you also need object-position
.your-favorite-image {
object-fit: cover;
object-position: bottom;
font-family: 'object-fit: cover; object-position: bottom;';
}
To generate the font-family automatically, you can use the PostCSS plugin or the SCSS/SASS/Less mixins.
If you set the font-family via JavaScript (which must be followed by calling objectFitImages()), make sure to include the quotes in the property.
the activation call before </body>, or on DOM ready
objectFitImages();
// if you use jQuery, the code is: $(function () { objectFitImages() });
This will fix all the images on the page and also all the images added later (auto mode).
Alternatively, only fix the images you want, once:
// pass a selector
objectFitImages('img.some-image');
// an array/NodeList
var someImages = document.querySelectorAll('img.some-image');
objectFitImages(someImages);
// a single element
var oneImage = document.querySelector('img.some-image');
objectFitImages(oneImage);
// or with jQuery
var $someImages = $('img.some-image');
objectFitImages($someImages);
You can call objectFitImages() on the same elements more than once without issues, for example to manually request an update of the object-fit value.
resizeYou don't need to re-apply it on resize, unless:
You're using scale-down, or
your media queries change the value of object-fit, like this
img { object-fit: cover; }
@media (max-width: 500px) { img { object-fit: contain; } }
In one of those cases, use the watchMQ option:
objectFitImages('img.some-image', {watchMQ: true});
// or objectFitImages(null, {watchMQ: true}); // for the auto mode
Pick your favorite:
<script src="dist/ofi.min.js"></script>
<!-- CDN is also available, but I suggest you concatenate JS files instead -->
<!-- Visit https://cdnjs.com/libraries/object-fit-images -->
npm install --save object-fit-images
var objectFitImages = require('object-fit-images');
import objectFitImages from 'object-fit-images';
objectFitImages(images, options)Both parameters are optional.
| parameter | description | ||
|---|---|---|---|
images |
Type: string, element, array, NodeList, nullDefault: nullThe images to fix. More info in the Usage section | ||
options |
Type: objectDefault: {}Example: {watchMQ:true}
|
146 followers Β· starred Jan 2018
48 followers Β· starred May 2016
427 followers Β· starred Mar 2020
196 followers Β· starred Aug 2017