Home

Awesome

object-fit-images gzipped size npm CDNJS jsDelivr

πŸ—» Polyfill object-fit/object-position on <img>: IE9, IE10, IE11, Edge, Safari, ...

Alternative solutions

Comparisonfregante<br>/object-fit-images🌟constancecchen<br>/object-fit-polyfilltonipinel<br>/object-fit-polyfill
Browsers<sub>IEdge 9-14, Android<5, Safari<10</sub><- Same"All browsers"
Tagsimgimage video pictureimg
cover/containπŸ’šπŸ’šπŸ’š
fillπŸ’šπŸ’šπŸ’š
noneπŸ’šπŸ’šπŸ’š
scale-downπŸ’š <sub>using {watchMQ:true}</sub>πŸ’šπŸ’”
object-positionπŸ’šπŸ’šπŸ’”
srcset supportπŸ’š Native or picturefill <sub>notes</sub>πŸ’šπŸ’”
Extra elementsπŸ’š NoπŸ’” YesπŸ’” Yes
SettingsπŸ’š via CSSπŸ’” via HTMLπŸ’” via HTML

Usage

You will need 3 things

  1. one or more <img> elements with src or srcset

    <img class='your-favorite-image' src='image.jpg'>
    
  2. 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.

  3. <a name="activation"></a> 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.

Apply on resize

You don't need to re-apply it on resize, unless:

In one of those cases, use the watchMQ option:

objectFitImages('img.some-image', {watchMQ: true});
// or objectFitImages(null, {watchMQ: true}); // for the auto mode

Install

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';

API

objectFitImages(images, options)

Both parameters are optional.

<table> <tr> <th>parameter</th> <th>description</th> </tr> <tr> <th><code>images</code></th> <td> Type: <code>string</code>, <code>element</code>, <code>array</code>, <code>NodeList</code>, <code>null</code><br> Default: <code>null</code><br><br> The images to fix. More info in the <a href="#usage">Usage</a> section </td> </tr> <tr> <th><code>options</code></th> <td> Type: <code>object</code><br> Default: <code>{}</code><br> Example: <code>{watchMQ:true}</code><br><br> <table> <tr> <th><code>watchMQ</code></th> <td> Type: <code>boolean</code><br> Default: <code>false</code><br><br> This enables the automatic re-fix of the selected images when the window resizes. You only need it <a href="#apply-on-resize">in some cases</a> </td> </tr> </table> </td> </tr> </table>