Taustakuvat ovat pahasta
Opi miksi sinun tulisi välttää taustakuvia verkkosivustollasi, miten löydät taustakuvat nopeasti ja miten korjaat tämän ongelman
Taustakuvat ovat pahasta
Ne teistä, jotka tuntevat minut tai ovat kuulleet minun puhuvan, ovat saattaneet kuulla minun puhuvan taustakuvista. Ne teistä, jotka eivät: en todellakaan pidä taustakuvista. Tässä artikkelissa selitän nopeasti, miksi en pidä taustakuvista, miten löydät nopeasti sivut, joissa on taustakuvia, ja miten korjaat ne!
Miksi taustakuvat ovat haitallisia Core Web Vitals -mittareille
Verkkosivua ladattaessa jokaisella elementillä on oma aikansa ja paikkansa. Nykyaikaisilla tekniikoilla kuten viivästyksellä, esilatamisella, asynkronisella latauksella, aikataulutuksella, fetchpriority-määrittelyllä jne. saamme kaikki kriittiset resurssit melko hyvin hallintaan. Paitsi taustakuvat!
Harkitse tätä tosielämän esimerkkiä:
Päivittäin, useimmiten WordPress-sivustoilla näen tämän kaavan. Kaikki normaalit kuvat on ladattu laiskasti ja jotkut kuvat (tässä tapauksessa sosiaalisen median kuvakkeet alatunnisteessa) ovat taustakuvia. Arvaatko mitä tapahtuu?
<html>
<head>
<style>
footer {
/* a margin of 100 vh wil make the footer off-screen !*/
margin-top: 100vh;
>.social {
>.facebook {background-image: url('img/facebook.jpg');}
>.instagram {background-image: url('img/instagram.jpg');}
>.linkedin {background-image: url('img/linkedin.jpg');}
>.email {background-image: url('img/email.jpg');}
}
}
</style>
</head>
<body>
<!-- yes this image is lazy loaded, because tiny mistakes happen! -->
<img loading="lazy" src="img/hero.jpg"></img>
<footer>
<div class="social">
<span class="facebook"></span>
<span class="instagram"></span>
<span class="linkedin"></span>
<span class="email"></divspan
</div>
</footer>
</body>
</html>
Olet ehkä arvannut: näytön ulkopuolella olevat taustakuvat asetetaan latausjonoon ennen paljon tärkeämpää 'hero.jpg'-kuvaa josta tulee yleensä sivun Largest Contentful Paint -elementti.

Mutta se ei ole vielä kaikki!
Kuten sanoin, taustakuvat ovat pahasta! Tämä johtuu siitä, että oudon prioriteetin lisäksi, jonka ne joskus saavat, taustakuvilta puuttuvat normaalien kuvien hienot ominaisuudet!
- Ei laiskaa latausta: taustakuville ei ole loading-attribuuttia
- Ei asynkronista dekoodausta: taustakuville ei ole decoding-attribuuttia
- Ei fetchpriority-tukea: taustakuville ei ole fetchpriority -attribuuttia
- Responsiiviset kuvalähteet: Taustakuvien image-set()-attribuutilla ei ole samaa ominaisuusvalikoimaa kuin hyvällä responsiivisella suunnittelulla.
- Ei width- ja height-attribuuttia. Se, ettei yksinkertaista width- ja height-attribuuttia voi asettaa, pakottaa käyttämään kiertoteitä, jotka vaativat koodia (enemmän koodia on aina hitaampaa kuin vähemmän koodia samalla monimutkaisuudella!)
- Ei alt-tekstiä: vaikka tämä ei
Löydä nopeasti kaikki taustakuvat sivulta
let bgimg = performance.getEntriesByType('resource')
.filter(rs => rs.initiatorType == 'css')
.map(rs => {
return {
name: rs.name,
initiator: rs.initiatorType
}
}) || [];
(bgimg.length > 0)?
console.table(bgimg):
console.log('No background images on this page!');
Tämä näyttää sinulle siististi muotoillun taulukon kaikkien taustakuvien nimistä ja initiator-tiedoista
Miten välttää taustakuvia
Taustakuvat on helppo välttää. Tapa riippuu itse kuvasta. Menetelmiä on karkeasti kaksi.
Normaalien kuvien tapauksessa
Et uskoisi, jos kertoisin, mutta suurimmassa osassa tapauksia, joissa löydän taustakuvia, taustakuvan tausta-osalla ei ole edes tarkoitusta. Kuvien pitää vain 'olla jossain sivulla' ja background-image:url() -ominaisuutta käytetään väärin tähän tarkoitukseen.
Jos näin on, lisää vain normaali kuva-tagi ja poista taustakuva tyylitiedostosta.
Peittokuvien tapauksessa:
Peittokuvat ovat kuvia, jotka peittävät kokonaan ylätason säiliön. Taustakuvien käyttäminen peittokuvina on tavallaan ymmärrettävää, koska kauan sitten tämä oli ainoa tapa saada peittokuvia, ja ihmiset pitävät kiinni siitä, minkä tuntevat. Onneksi meillä on nyt parempia vaihtoehtoja. Korjataan se!
Peittokuvien tapauksessa poista vain tyyli background-image: url(hero.jpg); background-size: cover; ja aseta normaali kuva samaan säiliöön ja muokkaa CSS näyttämään tältä:
<style>
.img-container {
position: relative;
> img {
width: 100%;
height: 100%;
object-fit: cover;
position: absolute;
z-index: 1;
}
}
<style>
<div class="img-container">
<img
height="500"
width="300"
decoding="async"
loading="lazy"
src="hero.jpg"
srcset="hero-320w.jpg, hero-480w.jpg 1.5x"
alt="alt text"
fetchpriority="low"
>
</div>CrUX data is 28 days late.
Google provides data 28 days late. CoreDash provides data in real-time. Debug faster.
- Real-Time Insights
- Faster Debugging
- Instant Feedback