WordPress Responsive Embeds käytännössä
Upotettu sisältö on nykyisellä verkkosivustolla lähes arkipäivää. WordPress-sivulle voidaan lisätä YouTube-videoita, karttoja, julkaisuja, kuvia, some-sisältöä ja muita ulkoisia elementtejä ilman, että kaikkea tarvitsee rakentaa käsin.
Ongelma tulee vastaan silloin, kun upotettu sisältö ei mukaudu näytön kokoon.
Pöytäkoneella video näyttää hyvältä, mutta puhelimessa se voi olla liian leveä, aiheuttaa vaakasuuntaisen vierityksen tai rikkoa sivun rakenteen.
Responsive Embeds ratkaisee juuri tämän ongelman: upotetun sisällön pitäisi säilyttää oikea mittasuhde ja mukautua käytettävissä olevaan leveyteen.
Mitä Responsive Embed tarkoittaa?
Responsive embed tarkoittaa tekniikkaa, jossa upotettu sisältö skaalautuu automaattisesti sen ympärillä olevan tilan mukaan.
Esimerkiksi 16:9-video voi olla:
pöytäkoneella ja:
puhelimella.
Sisällön mittasuhde säilyy, mutta leveys muuttuu laitteen mukaan.
WordPress ja Embed-järjestelmä
WordPressissä upotukset liittyvät oEmbed-järjestelmään ja Embed API:in.
Käyttäjä voi esimerkiksi liittää editoriin YouTube-URL-osoitteen:
WordPress voi tunnistaa osoitteen ja muodostaa siitä upotetun sisällön.
Kehittäjän kannalta kiinnostavaa on se, miten tämä sisältö sijoitetaan sivulle ja miten sen responsiivisuus varmistetaan.
Miksi responsive embed on tärkeä?
Responsiivinen upotus vaikuttaa useaan asiaan:
- mobiilikäyttöön
- sivuston layoutiin
- vaakavierityksen välttämiseen
- käyttökokemukseen
- saavutettavuuteen
- suorituskykyyn
Erityisesti videot ja iframe-elementit ovat tavallisia ongelmakohtia.
Iframe on tyypillinen ongelma
Upotettu sisältö näyttää usein HTML:ssä tältä:
Kiinteät width– ja height-arvot voivat aiheuttaa ongelmia pienillä näytöillä.
Jos iframe on esimerkiksi 560 pikseliä leveä ja puhelimen sisältöalue on vain 390 pikseliä, elementti voi ylittää sivun leveyden.
Moderni CSS-ratkaisu
Nykyisessä CSS:ssä responsiivinen iframe voidaan toteuttaa varsin yksinkertaisesti.
Pelkkä tämä ei kuitenkaan aina riitä videon oikean kuvasuhteen säilyttämiseen.
Parempi ratkaisu on käyttää aspect-ratio-ominaisuutta.
HTML:
Tällöin iframe täyttää säiliön ja 16:9-kuvasuhde säilyy.
aspect-ratio on nykyään tärkeä työkalu
Vanhoissa WordPress-teemoissa responsiiviset videot toteutettiin usein CSS:n padding-hackilla.
Nykyään voidaan käyttää suoraan:
Se tekee koodista selkeämmän ja helpommin ylläpidettävän.
Muita yleisiä kuvasuhteita ovat esimerkiksi:
ja:
WordPressin Embed Blocks
Gutenberg-editorissa upotuksia voidaan lisätä Embed Blockien avulla.
Käytössä voi olla esimerkiksi:
- YouTube
- Vimeo
- Spotify
- SoundCloud
- X
- karttapalvelut
- muita oEmbed-palveluita
WordPress huolehtii osasta rakenteesta automaattisesti, mutta teeman CSS vaikuttaa lopulliseen ulkoasuun.
Siksi responsive embed kannattaa testata aina käytössä olevan teeman kanssa.
WordPressin embed_oembed_html
Jos kehittäjä haluaa muokata oEmbedin muodostamaa HTML:ää, käytettävissä on esimerkiksi:
Tällä voidaan tarvittaessa lisätä oma wrapper-elementti tai muita rakenteellisia muutoksia.
Esimerkiksi:
Tämän jälkeen CSS voidaan keskittää wrapperiin.
Kaikkia upotuksia ei kannata käsitellä samalla tavalla
YouTube-video, Instagram-julkaisu ja Google Maps -kartta eivät ole teknisesti samanlaisia.
Niillä voi olla erilaiset:
- mittasuhteet
- iframe-rakenteet
- korkeudet
- JavaScript-riippuvuudet
- responsiivisuusvaatimukset
Siksi yksi yleinen CSS-sääntö ei välttämättä ole paras ratkaisu kaikkiin upotuksiin.
Videoiden responsiivisuus
Videoiden yleisin kuvasuhde on 16:9.
Esimerkiksi:
Tämä toimii hyvin tavallisissa video-upotuksissa.
Jos videolähde käyttää muuta kuvasuhdetta, säiliö kannattaa määrittää vastaavasti.
YouTube ja WordPress
YouTube on yksi yleisimmistä WordPressin embed-kohteista.
Responsiivisessa toteutuksessa kannattaa huolehtia siitä, ettei iframe saa kiinteää leveyttä, joka ylittää sisältöalueen.
Esimerkiksi:
Jos teemassa käytetään erityistä wrapper-rakennetta, tarkempi CSS voi olla tarpeen.
Vimeo ja muut videopalvelut
Sama periaate toimii myös esimerkiksi Vimeon kanssa.
Tärkeää ei ole niinkään palvelu vaan HTML-rakenne:
Wrapper → iframe → aspect ratio
Kun tämä rakenne on hallittu, eri videopalveluita voidaan käsitellä yhdenmukaisesti.
Responsive Embeds ja WordPress-teemat
Teeman pitäisi tarjota riittävästi tilaa Embed Blockeille ja muille upotuksille.
Kannattaa tarkistaa erityisesti:
- content width
- iframe-leveys
- wrapperin leveys
- sivun paddingit
- mobiilinäkymä
- overflow-asetukset
Jos teema käyttää esimerkiksi erittäin kapeaa sisältöaluetta, iframe voi näyttää oikealta mutta silti menettää liikaa tilaa.
Älä käytä overflow-x: hidden korjauksena
Yleinen mutta huono ratkaisu on piilottaa vaakasuuntainen ylitys:
Tämä voi peittää oireen, mutta ei korjaa liian suurta iframe-elementtiä.
Parempi ratkaisu on tehdä itse upotuksesta responsiivinen.
Responsive Embeds ja saavutettavuus
Responsiivisuus ei yksin takaa saavutettavuutta.
Iframeen kannattaa lisätä esimerkiksi kuvaava title:
Upotetun sisällön pitäisi myös olla käytettävissä näppäimistöllä ja toimia mahdollisimman hyvin erilaisilla päätelaitteilla.
Responsive Embeds ja suorituskyky
Responsiivinen iframe ratkaisee layout-ongelmia, mutta se ei automaattisesti tee upotuksesta nopeaa.
Esimerkiksi YouTube-embed voi ladata:
- JavaScriptiä
- kuvia
- iframe-sisältöä
- muita resursseja
Jos sivulla on useita videoita, vaikutus voi olla merkittävä.
Yksi tehokas ratkaisu on käyttää facade-tekniikkaa, jossa raskas iframe ladataan vasta käyttäjän pyytäessä sitä.
Facade ja lazy loading
Videon tilalle voidaan ensin näyttää kevyt esikatselu.
Esimerkiksi:
Kun käyttäjä painaa toistopainiketta, varsinainen iframe ladataan.
Tämä voi vähentää sivun ensimmäisen latauksen kustannuksia huomattavasti.
loading="lazy"
Iframe voidaan myös ladata laiskasti:
Tämä voi vähentää sellaisten upotusten alkuvaiheen kuormaa, joita käyttäjä ei vielä näe.
Lazy loading ei kuitenkaan korvaa kunnollista embed-arkkitehtuuria.
Responsive Embeds ja Core Web Vitals
Upotettu sisältö voi vaikuttaa myös Core Web Vitals -mittareihin.
Erityisesti layoutin yllättävä muuttuminen on ongelmallista.
Jos iframe saa korkeutensa vasta latauksen jälkeen, sivun sisältö voi hypätä.
aspect-ratio auttaa varaamaan upotukselle tilan jo ennen sisällön latautumista.
Tämä voi vähentää layout shift -ongelmia.
Custom Embed -ratkaisut
Jos WordPress-sivustolla käytetään paljon tietyn palvelun upotuksia, kannattaa harkita omaa Embed-ratkaisua.
Sen avulla voidaan hallita keskitetysti:
- wrapperia
- kuvasuhdetta
- lazy loadingia
- saavutettavuutta
- ulkoasua
- suorituskykyä
Näin jokaisen editoriin lisätyn upotuksen ei tarvitse sisältää omaa CSS-viritystä.
Responsive Embed ja JavaScript
Useimmat tavalliset responsiiviset embed-ratkaisut eivät tarvitse JavaScriptiä.
CSS:
on yleensä parempi kuin JavaScript, joka laskee elementin korkeuden selaimen koon perusteella.
JavaScriptiä kannattaa käyttää vasta silloin, kun upotettu sisältö tarvitsee dynaamista kommunikointia.
Yleisimmät virheet
Responsive Embeds -toteutuksissa nähdään usein samoja ongelmia:
- iframe käyttää kiinteää leveyttä
- kuvasuhdetta ei määritetä
- responsiivisuus tehdään JavaScriptillä ilman tarvetta
overflow-x: hiddenpeittää ongelman- iframe aiheuttaa layout shiftin
- mobiilinäkymää ei testata
- embed lataa raskaita resursseja heti
- saavutettavuutta ei huomioida
Useimmiten ongelma voidaan ratkaista melko pienellä määrällä CSS:ää.
Parhaat käytännöt
WordPressin Responsive Embed -toteutuksessa kannattaa:
- käytä suhteellista leveyttä
- hyödynnä
aspect-ratio-ominaisuutta - vältä kiinteitä iframe-leveyksiä
- anna iframe-elementille kuvaava
title - käytä
loading="lazy"tarvittaessa - harkitse facade-ratkaisua raskaille upotuksille
- varaa upotukselle tila layout shiftin vähentämiseksi
- testaa mobiili-, tabletti- ja desktop-näkymät
- käsittele eri embed-tyypit tarvittaessa erillisillä säännöillä
Käytännön perusratkaisu
Monessa WordPress-projektissa hyvä lähtökohta on:
HTML:
Tämän jälkeen ratkaisua voidaan laajentaa tarpeen mukaan.
Yhteenveto
WordPressin Responsive Embeds -toteutuksessa tavoitteena on tehdä ulkoisesta sisällöstä osa sivun responsiivista rakennetta ilman, että iframe tai muu embed rikkoo layoutia.
Nykyisessä WordPress-kehityksessä hyvä perusta on yksinkertainen: 100 prosentin leveys, hallittu kuvasuhde ja tarvittaessa lazy loading. CSS:n aspect-ratio tekee tästä huomattavasti helpompaa kuin vanhoissa WordPress-teemoissa käytetyt workaroundit.
Samalla kannattaa muistaa, että responsiivisuus on vain yksi osa kokonaisuutta. Hyvä embed-ratkaisu huomioi myös saavutettavuuden, suorituskyvyn, Core Web Vitals -mittarit ja ulkoisen sisällön tietoturvan.