A better image reset for your CSS

One of the most common resets in CSS is to set a max-width: 100% and a display: block on our images. In this video, I look at why it might also be a good idea to declare background-size, font-style, and shape-margin, among other things.
🔗 Links
✅ Harry Roberts post on Twitter: / 1717841334462005661
✅ Harry's article on low-quality image placeholders: csswizardry.com/2023/09/the-u...
✅ More on shape-margin and shape-outside: • Wrap text around any i...
⌚ Timestamps
00:00 - Introduction
00:50 - max-width
01:50 - vertical-align: middle
03:50 - height: auto
04:20 - font-style: italic
05:35 - background-size and background-repeat
09:29 - shape-margin
#css
--
Come hang out with other dev's in my Discord Community
💬 / discord
Keep up to date with everything I'm up to
✉ www.kevinpowell.co/newsletter
Come hang out with me live every Monday on Twitch!
📺 / kevinpowellcss
---
Help support my channel
👨‍🎓 Get a course: www.kevinpowell.co/courses
👕 Buy a shirt: teespring.com/stores/making-t...
💖 Support me on Patreon: / kevinpowell
---
My editor: VS Code - code.visualstudio.com/
---
I'm on some other places on the internet too!
If you'd like a behind the scenes and previews of what's coming up on my KZread channel, make sure to follow me on Instagram and Twitter.
Twitter: / kevinjpowell
Codepen: codepen.io/kevinpowell/
Github: github.com/kevin-powell
---
And whatever you do, don't forget to keep on making your corner of the internet just a little bit more awesome!

Пікірлер: 167

  • @WarrenGroom
    @WarrenGroom7 ай бұрын

    After many years of following, watching, and taking your courses, I've just this second realised that you open your videos with "Hello my front end friends", not "Hello my friend and friends", that I thought that I'd heard dozens and dozens of times, lol. Just LOVE your videos, the most value I get from KZread, by a huge margin ❤️

  • @CrispyCircuits

    @CrispyCircuits

    7 ай бұрын

    I thought the same thing! Been watching for a long time.

  • @dom8429

    @dom8429

    7 ай бұрын

    WHAT thats crazy I never noticed but it makes so much sense now

  • @TechnicJelle

    @TechnicJelle

    7 ай бұрын

    Wait what!? I thought that too!

  • @RayAndrewsDev

    @RayAndrewsDev

    7 ай бұрын

    Only realized that a few months ago myself :)

  • @CarlosHernandez101400

    @CarlosHernandez101400

    7 ай бұрын

    Well, crap 😂😂. I never understood why he says hello to just one friend first. It turns out I need my hearing checked. 😂😂

  • @chainedbeauty
    @chainedbeauty7 ай бұрын

    I saw the video and immediately implemented it in a project. Thanks for sharing as always! ❤

  • @kaustavroy6542
    @kaustavroy65427 ай бұрын

    This is what a high quality video is all about . Learning new stuff on every video. I didn't even know about the shape margins thing , checking that out next. Thanks Kevin ❤

  • @zarkasias
    @zarkasias7 ай бұрын

    This is great!! The explanation shows how this reset can really help improve performance.

  • @Locklesh
    @Locklesh7 ай бұрын

    Fantastic content. I love watching your videos. I learn something new pretty much everytime I watch one. You're a great teacher!

  • @HuynhLuong227
    @HuynhLuong2277 ай бұрын

    great tricks, really thanks Kevin, love your content.

  • @osaid56
    @osaid565 ай бұрын

    maaaaan this is veeeeeeeeery nice video, it made me think again about my understanding of this stuff, very beneficial, thanks a lot man.

  • @xphstos_
    @xphstos_7 ай бұрын

    Thank you!! I've been screaming my lungs out every time I was seeing display block on images! Vertical align is the way to go!

  • @pibbz13
    @pibbz137 ай бұрын

    Thank you! This is so useful :D

  • @D7460N
    @D7460N7 ай бұрын

    Perfect timing, sir.

  • @RakeshSingh-vl2mz
    @RakeshSingh-vl2mz6 ай бұрын

    So much informative I am hell impressed by your knowledge thank you sir❤

  • @JosephCodette
    @JosephCodette7 ай бұрын

    Good stuff ! You can also style the alt attribute img[alt] if needed ! I used it for small thumbnails where I wanted an overflow of none when the alt is displayed 😊

  • @hobbit125

    @hobbit125

    17 сағат бұрын

    That's not styling the alt attribute (you can't style attributes.) That's styling any img element that has an alt attribute.

  • @programingwithali2461
    @programingwithali24617 ай бұрын

    Thanks for this content

  • @Pompiduskus
    @Pompiduskus7 ай бұрын

    this is awesome !!!

  • @AndrewSmithDev
    @AndrewSmithDev7 ай бұрын

    I like the background image hack!

  • @spatialoptic
    @spatialoptic6 ай бұрын

    Using this and it is great!

  • @okelecomedyhouse6994
    @okelecomedyhouse69947 ай бұрын

    You have been a very big influence in my life and I really appreciate you for that and I would really like to know the courses u have done so far so I can follow my mentor and his foot steps to learn the same courses as you

  • @lewisone
    @lewisone6 ай бұрын

    The low-res image part is a very interesting concept that I am for sure going to use from now on, especially since I have experienced slow internet in public places and see how important if can be. Very cool insights.

  • @eduardoalvarez4457

    @eduardoalvarez4457

    3 ай бұрын

    maybe it can be combined with CSS filter blur to remove the ugly compression. (note that the filter needs to be done by the browser not be applied to the low res image directly because blurring the image adds more colors, meaning the low res will have a big file size, defeating its purpose)

  • @wardxela
    @wardxela7 ай бұрын

    Dealing with high quality images is not uncommon nowadays. Low-res technique is something! I really appreciate you for sharing this kind of things with us.

  • @mrgamerzyt3945

    @mrgamerzyt3945

    5 ай бұрын

    Yea, this technique will really be helpful. I personally have tried to do it before but failed 😭

  • @MasterHobbitLoL
    @MasterHobbitLoL7 ай бұрын

    Great video

  • @serychristianrenaud
    @serychristianrenaud7 ай бұрын

    Thankd 👍

  • @valmirvirtuoso3796
    @valmirvirtuoso37967 ай бұрын

    Your channel is very good Kevin, congratulations, i'am from Brazil, and I discovered your channel a short time ago, but with KZread's automatic subtitles I've been getting by, good job! Can you make some content about animations? Or someone who recommends something from your channel that you've already done.

  • @LaughingInCorner
    @LaughingInCorner7 ай бұрын

    This is great

  • @manuelenng
    @manuelenng6 ай бұрын

    Oh! Kevin Powell. I bless the day I followed your KZread channel.

  • @houston61452
    @houston614527 ай бұрын

    Excellent video, as always! I noticed a major drawback with the low-res background image, in the case of a .png with transparency, we'll see blurred pixels from the low-res image behind the edges of the source image.

  • @enriquegrageda
    @enriquegrageda7 ай бұрын

    I like the low resolution to high resolution effect 😃

  • @hovhadovah
    @hovhadovah7 ай бұрын

    I don't think vertical-align: middle is a one-to-one replacement for display: block, but correct me if I'm mistaken. Per my understanding, display: block removes the line height from the image entirely (since block-level elements can't have a line height), while vertical-align keeps the line height but moves the image down vertically so it no longer seems like it has uneven spacing. Technically the image still has extraneous spacing, but now above and below as opposed to just below.

  • @xphstos_

    @xphstos_

    7 ай бұрын

    You're kinda right. If you use imagery in your site just for decoration. Then yes.. display block seems more reasonable reset but if we're talking about a blog site were most of the images live inside article's body then it's best to add display block when needed and keep vertical align middle for the rest. Although vertical align does behave like display block. There is no excess space on top or bottom if you use it. So why don't we use that as a default reset!? As a personal rule I try to avoid turning block elements to inline and vice versa. It feels like I'm using div with display: inline... it doesn't affect anything perfomance wise or semantically but it feels wrong!

  • @hovhadovah

    @hovhadovah

    7 ай бұрын

    @@xphstos_ Hmm, I just tested in a jsfiddle and vertical-align: middle does appear to work the same way. I wonder _why_ this works, though. Does line height behave differently for images?

  • @nikolaypanayotov6941

    @nikolaypanayotov6941

    7 ай бұрын

    Vertical align top should remove it completely. Some other elements have this as well, for example

  • @crstnio
    @crstnio7 ай бұрын

    Built into my new project! ✅

  • @mk72v2oq
    @mk72v2oq7 ай бұрын

    Regarding of lowres version images: progressive jpeg exist. It loads in low quality first and gradually improves during loading. This is a very old feature and supported by all browsers. That's it, simply encode your jpegs as progressive and no extra html/css manipulations needed.

  • @r-i-ch

    @r-i-ch

    7 ай бұрын

    How to? Do you need multiple jpgs?

  • @mk72v2oq

    @mk72v2oq

    7 ай бұрын

    @@r-i-ch advanced image viewers/editors simply have "progressive" option when saving jpeg. That's all, the image will be encoded in progressive mode, no extra manipulations required.

  • @KevinPowell

    @KevinPowell

    7 ай бұрын

    I know, and you can even see that working here, but it still starts with the lowres one first, and then you can see the quality improving over that image as the better image loads in.

  • @mk72v2oq

    @mk72v2oq

    7 ай бұрын

    @@KevinPowell I mean to encode original image as progressive. The image in the video loads pixels sequentially top-to-bottom. A progressive image on the other hand starts with low-res version and gradually "emerges" improving in quality.

  • @Eckster

    @Eckster

    7 ай бұрын

    Yeah, I'm a bit confused why this is better than progressive encoded images, I suppose it gives you better control over load priority and just how low quality the original one is? Seems less efficient though and definitely more inconvenient.

  • @EugeneKoshelev
    @EugeneKoshelev6 ай бұрын

    Cool!

  • @tenthlegionstudios1343
    @tenthlegionstudios13437 ай бұрын

    wow this was super applicable to what I am doing at work today. I want an SVG from the server to be in place of the image until it loads.So with slight modification I can serve the SVG from my server that will be loaded with the html, until my image can load in. Thanks!!

  • @JohnBortins
    @JohnBortins7 ай бұрын

    Added this to one project. Now I need to make some small adjustments where images lack margin.

  • @incarnateTheGreat
    @incarnateTheGreat7 ай бұрын

    That background low-res hack reminds me of Netscape back in the day.

  • @NebihTV
    @NebihTV2 ай бұрын

    I did the low res solution already in 2015.. unbelievable that people just came up now with this. 😂

  • @KlaudiusL
    @KlaudiusL7 ай бұрын

    Instead of using a crappy/broken/low quality image, use a blurried version. Smooth color transition favor the jpeg algorithm. _comparation_ original image: 1 Mb low quality image: 49 kb blurried image: 15 Kb

  • @xorlop

    @xorlop

    7 ай бұрын

    I would be interesting to try and convert to svg with a couple of squares then blur the svg

  • @zzord

    @zzord

    7 ай бұрын

    Or another option is to use blurhash. That's only a few bytes per image and looks very nice.

  • @KlaudiusL

    @KlaudiusL

    7 ай бұрын

    @@zzord Yeah .. nice catch. Thanks

  • @dealloc

    @dealloc

    7 ай бұрын

    @@zzordAnd also relatively cheap to decode! I love Blurhash :)

  • @VaibhavShete
    @VaibhavShete7 ай бұрын

    I remember when some websites used to feature this low-res-then-hi-res images, but when I checked it had turned out that there's a special way of encoding in jpg: Progressive JPEG! Don't think it is supported in webp so we don't see it much these days. That also maybe because overall the internet speed is better than those days. But it does exactly this. Shows a low res version of the image and progressively enhances it!! All in a single image file, not making you store hi-res and low-res separately.

  • @PBearne
    @PBearne7 ай бұрын

    We added a background color placeholder in WP performance-lab plugin

  • @bendavies925
    @bendavies9257 ай бұрын

    at 7:05, did you chuckle at what you said? hahaha

  • @Benjambles
    @Benjambles7 ай бұрын

    If you have a lot of images, and a slow network, preloading low-res images may also not be great. You could also consider using blob urls which will add to the initial page weight, but should compress fairly well.

  • @clintquasar

    @clintquasar

    7 ай бұрын

    Perhaps lazy loading then.

  • @thekwoka4707

    @thekwoka4707

    7 ай бұрын

    No, just use srcset and sizes properly. And lazy loading too, of course.

  • @martinklasson1981

    @martinklasson1981

    6 ай бұрын

    ​@@thekwoka4707 I just am not that fond of srcset/sizes - because they use the viewport and not the container as the "judge" of what image to load? I can not understand why there is a better native solution already for this.

  • @davidcooper4327
    @davidcooper43274 ай бұрын

    My first big takeaway was that you can undock the dev tools. I've been wrestling with docking on the side vs underneath for years.

  • @nomadshiba
    @nomadshiba7 ай бұрын

    great

  • @RhayvenBlood
    @RhayvenBlood7 ай бұрын

    Wait, that shape-outside gives me an idea for a redesign that would work well with that style of positioning o:

  • @xorlop
    @xorlop7 ай бұрын

    Hey yall just a heads up to get that progressive image loading scan effect, I think your image needs to be interlaced. Otherwise, it will replace original all at once.

  • @kosmar
    @kosmar4 ай бұрын

    watched this on the subway. ironically i saw the lowres image part in a very low res video.

  • @henriquesalgueiro2744
    @henriquesalgueiro27446 ай бұрын

    Pleease make a video of handling with browsers input autofill (how to change the way it styles) 🙏🏻

  • @dj10schannel
    @dj10schannel3 ай бұрын

    Interesting 🤔

  • @tonimaunde
    @tonimaunde7 ай бұрын

    8:10. What a nerd! Beautiful technique.

  • @philibertetienne1747
    @philibertetienne17477 ай бұрын

    Hello Kevin, thanks for all the inspiration ✨️ Lighthouse in chrome devtools gives the advice to use srcset and avif format for optimized images. Would it be something you recommend in addition to current content of your wonderful video ?

  • @thekwoka4707

    @thekwoka4707

    7 ай бұрын

    Srcset is better 100%. This lowres placeholder thing is nonsense. Use srcset and sizes with a. Generous helping of options in webp, and all the loading issues are solved.

  • @hubyxreds
    @hubyxreds7 ай бұрын

    Nice video! I wonder what are the advantages of a low res placeholder vs a progresive jpg? Also in specific cases you don't want to have contents shifting may be better to use a transparent placeholder and an absolute object on top of it.

  • @tombyrer1808

    @tombyrer1808

    7 ай бұрын

    As suggested in the video, you can preload 'above the fold' placeholders. A very low resolution placeholder might be less kb than the first pass of a progressive image. Also, depending on your target browsers, might be better not to use jpegs, but only AVIF & WebP.

  • @hubyxreds

    @hubyxreds

    7 ай бұрын

    @@tombyrer1808 I don't know the math behind the progressive scan but I'm certain that the first pass is smaller than a reduced image. Btw, I would stay away from the AVIF format for now until its compatibility improves.

  • @HolgerNestmann
    @HolgerNestmann7 ай бұрын

    This is so funny. I basically built the same fake progressive image image loader this morning. What'd be really cool if we'd had a pseudo class during loading - we could blur the background image or indicate loading indicator without javascript

  • @thekwoka4707
    @thekwoka47077 ай бұрын

    The low res placeholder thing is a bad bandage. It just increases network congestion. Use a proper src-set and sizes attributes so that you srent acrually loading it massively oversized images, and the browser can adapt to poor network conditions.

  • @paradoxify_
    @paradoxify_7 ай бұрын

    If I have many images in my site, do I have to prefetch low-res images of them in head tag if I want to use them? Wouldn't it make a mess?

  • @seabass_1
    @seabass_13 ай бұрын

    whats best practice as far as this vs like figure , picture, source stuff

  • @fabbahiense
    @fabbahiense4 ай бұрын

    In the hero image, wouldn't it negatively affect the lighthouse, for example?

  • @ruittenbogaard-digital
    @ruittenbogaard-digital7 ай бұрын

    Awesome tips! But I was just wondering... what is the advantage of a background-image over ?

  • @KevinPowell

    @KevinPowell

    7 ай бұрын

    That was deprecated with the release of html5. The purpose of that was what we can do with srcset now, with several different versions. From what I understand, it's purpose wasn't to act as a placeholder, but was an alternative version that was lower res.

  • @danish_ayoub
    @danish_ayoub7 ай бұрын

    interesting

  • @MaxWeir
    @MaxWeir7 ай бұрын

    I love the background image idea, but how could I use this method as a carousel? And for a page that has multiple cards with carousels.

  • @adam4813
    @adam48137 ай бұрын

    Just a shout-out to adam-7 pngs that have this progressive loading of a lowres version for an image, while loading the higher res, out of the box.

  • @DainSPb
    @DainSPb2 ай бұрын

    About the background-image trick: isn't it better to use progressive jpeg instead of messing with duplicated image files that may cause some SEO and maintenance issues?

  • @nathanmiddleton1478
    @nathanmiddleton14787 ай бұрын

    Whatever happened to progressive JPEG? Doesn't that do the same thing without making two network connections?

  • @SebastianMares

    @SebastianMares

    7 ай бұрын

    Just my thought

  • @HolgerNestmann

    @HolgerNestmann

    7 ай бұрын

    nothing happened. They are still great. This is good for png, gifs or maybe user uploaded jpgs. HTTP2 helps on the connection overhead

  • @thekwoka4707

    @thekwoka4707

    7 ай бұрын

    It's also larger than a webp, so why bother?

  • @PicSta
    @PicSta7 ай бұрын

    Wouldn't it be better to apply this to picture, svg and video tag as well?

  • @cupcake4fia686
    @cupcake4fia6867 ай бұрын

    Thank you for the video, also 🇵🇸

  • @MatthewMichalsky

    @MatthewMichalsky

    7 ай бұрын

    🇮🇱❤

  • @letshev
    @letshev7 ай бұрын

    Is this applicable to SVG images inside the img tag?

  • @outpost31737
    @outpost317377 ай бұрын

    Most hosting providers already include a built-in lazy load option. Great idea but more code and unnecessary in most cases.

  • @jmsherry
    @jmsherry7 ай бұрын

    If you leave it as display inline and you have it as an isolated element surely that loses the ability to use vertical margins, no? That could be problematic?! (Case for inline-block?)

  • @Tony.Nguyen137
    @Tony.Nguyen1377 ай бұрын

    Can I use width and height 100% + object-fit: cover/contain on image or it it bad practise

  • @Stoney_Eagle
    @Stoney_Eagle7 ай бұрын

    Is there a way to get rid of that broken image thingy and the border for missing images? (Specific use case only) I can use Javascript but a plain css/html option would be nice.

  • @KevinPowell

    @KevinPowell

    7 ай бұрын

    You can use a psuedo element (::before and ::after) on images, which only shows up when an image is broken, otherwise it doesn't do anything. I haven't played around with that much though, so I'm not sure how support is across browsers

  • @rohitpariyar1095
    @rohitpariyar10953 ай бұрын

    img { display: block; max-width:100%; height: auto; font-size: italic; background-repeat: no-repeat; background-size: cover; shape-margin: 1rem; }

  • @ncmathsadist
    @ncmathsadist7 ай бұрын

    An image, by default, is an "overgrown character."

  • @dzigizord6567
    @dzigizord65673 ай бұрын

    Why using the background image hack when we can use tag and have a low res image while big one is loading

  • @scryspc
    @scryspc5 ай бұрын

    Instead of the low res version I get a white background while the high res image is loading over it and I'm not sure why.

  • @sito8943
    @sito89437 ай бұрын

    That was amazing Kevin, thanks face-blue-smilingface-blue-smiling

  • @MonsterSmart
    @MonsterSmart7 ай бұрын

    shape-margin... Yea I already see developer in the corpo having PR blocked with the PR changes requests like "why is this shape-margin is for? When we are not using it then it shouldn't be here"

  • @dasten123
    @dasten1237 ай бұрын

    I don't get why the shape-margin should be included in the img reset. If it's just for those special cases, why not specify it along with the float and stuff?

  • @najmantube
    @najmantube7 ай бұрын

    Would it be overkill (or bad SEO) to preface all alt text with 'Image:', e.g. alt="Image: range of hills"? This, along with italic text, would help to distinguish it from the surrounding text if image loading failed.

  • @thekwoka4707

    @thekwoka4707

    7 ай бұрын

    It's more just not appropriate. Alt text is not a description of the image (description is a separate atteibute). Alt text is supposed to communicate whatever the point of the image is, not describe what the image is. In this case, the hills has no point. So it is decorative and wouldn't have an alt, to be each compliment.

  • @najmantube

    @najmantube

    7 ай бұрын

    @@thekwoka4707 That's a critique of the use of alt text in the video. My point was that, given the alt text did have some use and was correctly written, wouldn't prefixing the alt text with 'Image:' help people who had to read it on the screen (because image loading failed)?

  • @trevoreyre

    @trevoreyre

    6 ай бұрын

    @@najmantube You usually don’t want to say it’s an image in your alt text. A screen reader will announce that the element is an image before reading the alt text, and a broken image will have the little broken image icon next to the alt text for sighted users. So in both cases, it’s already clear that it’s an image and including that in your alt text is redundant.

  • @najmantube

    @najmantube

    6 ай бұрын

    @@trevoreyre You're right!

  • @royerromero7u7
    @royerromero7u74 ай бұрын

    Eres un genio, piensas doblar el idioma al español para tus suscripciones latinos?

  • @Antimated
    @Antimated7 ай бұрын

    Would all of this work with a figure tag and multiple source-sets?

  • @KevinPowell

    @KevinPowell

    7 ай бұрын

    For an image inside a figure, I don't see why it wouldn't work :)

  • @mihao-runs
    @mihao-runs7 ай бұрын

    height auto sometimes messes up in safari :/

  • @NovaKirsch
    @NovaKirsch7 ай бұрын

    Harry??? Harry???

  • @dienvidbriedis1184
    @dienvidbriedis11847 ай бұрын

    if i'm on slow 3g network, last thing i need is to load extra low res images just because designer wanted to flex his css skills. fail!

  • @QwDragon
    @QwDragon7 ай бұрын

    Why eberybody makes low resolution images instead of using progressive jpeg?

  • @thekwoka4707

    @thekwoka4707

    7 ай бұрын

    Progressive jpg load slower, since they are larger, by a LOT, than webp

  • @pinnaclewd
    @pinnaclewd7 ай бұрын

    Hmmm is this really any better than a webp compressed with lazy load?

  • @HolgerNestmann

    @HolgerNestmann

    7 ай бұрын

    yes. WebP doesnt offer progressive or deinterlaced loading. So having a couple of pixel large placeholder is still helping while the (albeit faster) loading webp arrives

  • @thekwoka4707

    @thekwoka4707

    7 ай бұрын

    No it's not. It's just worse. If you have proper srcsets sizes and loading attributes, then the image loading thing isn't an issue.

  • @giannismentz3570
    @giannismentz35706 ай бұрын

    Isn't this extra loading of a low-res img redundant, since jpg already has this built-in, in its "progressive" property?

  • @junsu-ho
    @junsu-ho7 ай бұрын

    classic overcomplicating things from Kevin xD 😅

  • @hunin27
    @hunin277 ай бұрын

    wassup guys

  • @brad1785
    @brad17857 ай бұрын

    The real ultimate low-quality image placeholder technique is a progressive JPEG/JPEG-XL.

  • @codeguy11
    @codeguy117 ай бұрын

    Instructions unclear. My images didn't load

  • @lucienchu9649
    @lucienchu96497 ай бұрын

    image always drive me crazy, even the most basic styling.

  • @badcatdesign
    @badcatdesign7 ай бұрын

    Sometimes we just miss "lowsrc" 🤣

  • @kliMaLd
    @kliMaLd7 ай бұрын

    2023 - slow 3G?

  • @MohammadAk-rx6kl
    @MohammadAk-rx6kl7 ай бұрын

    Third

  • @vivekv4250
    @vivekv42507 ай бұрын

    Second

  • @BoobCheese
    @BoobCheese7 ай бұрын

    first

  • @funkologie
    @funkologie7 ай бұрын

    Get serious 😂

  • @mirabilis
    @mirabilis7 ай бұрын

    CSS is pain

  • @rumisbadforyou9670
    @rumisbadforyou96707 ай бұрын

    why purposefully add bloat? buy your customers an i9, then add all the bloat you want till then, keep your hands away from my cpu

  • @Manic_Drone_Idiom
    @Manic_Drone_Idiom7 ай бұрын

    This video needs no padding

  • @cemondel
    @cemondel5 ай бұрын

    overengineering

  • @stillready6405
    @stillready64057 ай бұрын

    Pretty cool "trick/hack". I will start using it :D