CSS tip:
object-fit
your images.
To have an image that doesn't try to stretch to its width/height the classic CSS is as follows:
.thumbnail {
width: 50px;
height: 50px;
background-size: cover;
background-position: center;
}
With this associated HTML (inline styles… 👎):
<div
class="thumbnail"
style="background-image: url('some-url');"
>
</div>
We can do:
.thumbnail {
width: 50px;
height: 50px;
object-fit: cover;
object-position: center;
}
With the following HTML:
<img
class="thumbnail"
alt="My thumbnail"
src="some-url">
This was sent out on the Code with Hugo newsletter last Monday.
Subscribe to get the latest posts right in your inbox (before anyone else).
Why is this cool?
- One word: accessibility.
- Two words: semantic markup.
- Many words, with the
div
+background-image
solution:- if the URL turned out to be broken, it would show empty space, with the
img
+object-fit
one, it shows the good old “broken image because of URL” fallback (oralt
attribute value). - An
img
tag is more accessible since we can havealt
- Typing
src="my-url"
is just less characters thanstyle="background-image: url('my-url')"
.
- if the URL turned out to be broken, it would show empty space, with the
Warning: this might not work on older browsers, it does, however gracefully degrade (the image will just be stretched), it won't mess up the layout though.
Top comments (5)
I haven't really worked on enterprise apps/sites but I can tell you I have ignored ie9 for years for all my css work. And what's more, I am beginning to think that ignoring ie11 might be a good idea as well. Looking at caniuse, I don't think it's a good idea to waste time on making an app/site compatible with old, very low usage versions of browsers.
object fit degrades ok anyways, the image will be stretched, but I remember the days when background-image would result in a blank block in legacy browsers of the day (and you would have to polyfill that)
It's not responsive if you are fixing the height and width.
That's true, I guess it still works if one of the height or width isn't fixed (or is a percentage)
MSIE9 is ancient! only "modern" browser having problems with object-fit is MSIE11 afaik, and that's very low in usage anyway.