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.
Oldest comments (5)
MSIE9 is ancient! only "modern" browser having problems with object-fit is MSIE11 afaik, and that's very low in usage anyway.
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)
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)