Suomi

Opi rakentamaan vankkoja ja esteettömiä verkkosovelluksia progressiivisen parantelun ja ominaisuudentunnistuksen avulla. Tämä opas tarjoaa globaalin näkökulman ja parhaat käytännöt kestävien verkkokokemusten luomiseen.

Progressiivinen parantelu: Ominaisuudentunnistus – Resilienttien verkkokokemusten rakentaminen globaalille yleisölle

Jatkuvasti kehittyvässä internetin maisemassa on ensiarvoisen tärkeää varmistaa, että verkkosovelluksesi ovat saavutettavia, suorituskykyisiä ja tulevaisuudenkestäviä. Yksi tehokkaimmista strategioista tämän saavuttamiseksi on progressiivinen parantelu, suunnittelufilosofia, joka korostaa ydintoiminnallisuuden rakentamista niin, että se toimii laajalla valikoimalla laitteita ja selaimia, samalla kun lisätään parannuksia käyttäjän ympäristön ominaisuuksien perusteella. Progressiivisen parantelun olennainen osa on ominaisuudentunnistus, jonka avulla kehittäjät voivat selvittää, tukeeko selain tiettyä ominaisuutta ennen sen käyttöönottoa. Tämä lähestymistapa takaa yhdenmukaisen käyttäjäkokemuksen, erityisesti maailman monimuotoisessa teknologisessa ympäristössä.

Mitä on progressiivinen parantelu?

Progressiivinen parantelu on verkkokehitysstrategia, joka lähtee liikkeelle vankasta, saavutettavasta perustasta ja lisää sitten edistyneitä ominaisuuksia selaimen tai laitteen salliessa. Tämä lähestymistapa asettaa sisällön ja ydintoiminnot etusijalle kaikille käyttäjille laitteesta, selaimesta tai internet-yhteydestä riippumatta. Se omaksuu ajatuksen, että verkon tulisi olla käyttökelpoinen ja informatiivinen kaikille, kaikkialla.

Progressiivisen parantelun ydinperiaatteita ovat:

Miksi ominaisuudentunnistus on välttämätöntä

Ominaisuudentunnistus on progressiivisen parantelun kulmakivi. Sen sijaan, että luotettaisiin selaimen nuuskimiseen (käyttäjän selaimen tunnistaminen sen käyttäjäagenttimerkkijonon perusteella), ominaisuudentunnistus keskittyy siihen, mitä selain *osaa* tehdä. Tämä on paljon luotettavampi lähestymistapa, koska:

Menetelmiä ominaisuudentunnistukseen

Selaimen ominaisuuksien havaitsemiseen on useita menetelmiä, joista jokaisella on omat vahvuutensa ja heikkoutensa. Yleisin menetelmä käyttää JavaScriptiä tietyn ominaisuuden tai API:n olemassaolon tarkistamiseen.

1. JavaScriptin käyttö ominaisuuksien tarkistamiseen

Tämä menetelmä on yleisin ja joustavin. Tarkistat tietyn selainominaisuuden saatavuuden JavaScript-koodin avulla.

Esimerkki: `fetch`-API:n tarkistaminen (JavaScript verkon datan noutamiseen)


if ('fetch' in window) {
  // The 'fetch' API is supported. Use it to load data.
  fetch('data.json')
    .then(response => response.json())
    .then(data => {
      // Process the data
    })
    .catch(error => {
      // Handle errors
    });
} else {
  // The 'fetch' API is not supported. Use a fallback like XMLHttpRequest.
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'data.json');
  xhr.onload = function() {
    if (xhr.status >= 200 && xhr.status < 300) {
      // Process the data
    } else {
      // Handle errors
    }
  };
  xhr.onerror = function() {
    // Handle errors
  };
  xhr.send();
}

Tässä esimerkissä koodi tarkistaa, onko `fetch`-ominaisuus olemassa `window`-oliossa. Jos on, selain tukee `fetch`-API:a, ja koodi voi käyttää sitä. Muussa tapauksessa käytössä on varamekanismi (`XMLHttpRequest`).

Esimerkki: `classList`-API-tuen tarkistaminen


if ('classList' in document.body) {
  // Browser supports classList.  Use classList methods (e.g., add, remove)
  document.body.classList.add('has-js');
} else {
  // Browser does not support classList. Use alternative methods.
  // e.g., using string manipulation to add and remove CSS classes
  document.body.className += ' has-js';
}

2. CSS-ominaisuuskyselyt (`@supports`)

CSS-ominaisuuskyselyt, jotka merkitään `@supports`-säännöllä, mahdollistavat CSS-sääntöjen soveltamisen sen perusteella, tukeeko selain tiettyjä CSS-ominaisuuksia tai ominaisuusarvoja.

Esimerkki: `@supports`-säännön käyttö asettelun tyylittelyyn Grid Layoutin avulla


.container {
  display: flex; /* Fallback for browsers without grid */
}

@supports (display: grid) {
  .container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
  }
}

Tässä esimerkissä `.container` käyttää aluksi `flex`-asettelua (laajasti tuettu ominaisuus). `@supports`-sääntö tarkistaa, tukeeko selain `display: grid`:iä. Jos tukee, säännön sisällä olevat tyylit otetaan käyttöön ohittaen alkuperäisen flex-asettelun grid-asettelulla.

3. Kirjastot ja viitekehykset

Useat kirjastot ja viitekehykset tarjoavat sisäänrakennettuja ominaisuudentunnistuskykyjä tai apuohjelmia, jotka yksinkertaistavat prosessia. Nämä voivat abstrahoida tiettyjen ominaisuuksien tarkistamisen monimutkaisuuden. Yleisiä esimerkkejä ovat:

Esimerkki: Modernizrin käyttö


<html class="no-js" >
<head>
  <!-- Other meta tags, etc. -->
  <script src="modernizr.min.js"></script>
</head>
<body>
  <div class="my-element"></div>
  <script>
    if (Modernizr.borderradius) {
      // Apply border-radius styles
      document.querySelector('.my-element').style.borderRadius = '10px';
    }
  </script>
</body>
</html>

Tässä skenaariossa Modernizr lisää luokan `borderradius` ``-elementtiin, jos selain tukee `border-radius`:ia. JavaScript-koodi tarkistaa sitten tämän luokan ja soveltaa vastaavan tyylin.

Käytännön esimerkkejä ja globaaleja näkökohtia

Katsotaanpa joitakin käytännön esimerkkejä ominaisuudentunnistuksesta ja niiden toteuttamisesta, ottaen huomioon globaalit näkökohdat, kuten saavutettavuus, kansainvälistyminen (i18n) ja suorituskyky.

1. Responsiiviset kuvat

Responsiiviset kuvat ovat välttämättömiä optimaalisten kuvakokojen toimittamiseen käyttäjän laitteen ja näytön koon perusteella. Ominaisuudentunnistuksella voi olla ratkaiseva rooli niiden tehokkaassa toteutuksessa.

Esimerkki: `srcset`- ja `sizes`-tuen tarkistaminen

`srcset` ja `sizes` ovat HTML-attribuutteja, jotka tarjoavat selaimelle tietoja kuvien lähdevaihtoehdoista, jolloin selain voi valita sopivimman kuvan nykyiseen kontekstiin.


<img
  src="image-fallback.jpg"
  srcset="image-small.jpg 480w, image-medium.jpg 768w, image-large.jpg 1024w"
  sizes="(max-width: 480px) 100vw, (max-width: 768px) 50vw, 33vw"
  alt="Description of the image"
>

The `srcset` attribute specifies a list of image sources with their widths. The `sizes` attribute provides information about the image's intended display size based on media queries.

Jos selain ei tue `srcset`:iä ja `sizes`:iä, voit käyttää JavaScriptiä ja ominaisuudentunnistusta saman tuloksen saavuttamiseksi. Kirjastot kuten `picturefill` tarjoavat polyfillin vanhemmille selaimille.


if (!('srcset' in document.createElement('img')) || !('sizes' in document.createElement('img'))) {
  // Use a polyfill like picturefill.js
  // Link to picturefill: https://scottjehl.github.io/picturefill/
  console.log('Using picturefill polyfill');
}

Tämä lähestymistapa varmistaa, että kaikki käyttäjät saavat optimoituja kuvia selaimestaan riippumatta.

2. Verkkoanimaatiot

CSS-animaatiot ja -siirtymät voivat parantaa merkittävästi käyttäjäkokemusta, mutta ne voivat myös olla häiritseviä tai ongelmallisia joillekin käyttäjille. Ominaisuudentunnistuksen avulla voit tarjota näitä animaatioita vain silloin, kun se on tarkoituksenmukaista.

Esimerkki: CSS-siirtymien ja -animaatioiden tuen havaitseminen


if (Modernizr.cssanimations && Modernizr.csstransitions) {
  // Apply animation classes
  document.body.classList.add('animations-enabled');
} else {
  // Use a static UI or a more basic experience without animations
  document.body.classList.add('animations-disabled');
}

Poistamalla animaatiot käytöstä vanhempia selaimia käyttäville tai kun käyttäjä on ilmaissut mieluummin vähemmän liikettä (via `prefers-reduced-motion` mediakyselyn kautta), voit tarjota sulavamman ja osallistavamman käyttökokemuksen.

Globaaleja näkökohtia animaatioista: Huomioi, että joillakin käyttäjillä voi olla tasapainohäiriöitä tai muita sairauksia, jotka voivat laukaista animaatiot. Tarjoa aina mahdollisuus poistaa animaatiot käytöstä. Kunnioita käyttäjän `prefers-reduced-motion` -asetusta.

3. Lomakevalidointi

HTML5 toi mukanaan tehokkaita lomakevalidointiominaisuuksia, kuten pakolliset kentät, syöttötyyppien validoinnin (esim. sähköposti, numero) ja mukautetut virheilmoitukset. Ominaisuudentunnistuksen avulla voit hyödyntää näitä ominaisuuksia tarjoten samalla tyylikkäitä vararatkaisuja.

Esimerkki: HTML5-lomakevalidointituonnin tarkistaminen


if ('checkValidity' in document.createElement('input')) {
  // Use HTML5 form validation.
  // This is built-in, and doesn't require JavaScript
} else {
  // Implement JavaScript-based form validation.
  // A library such as Parsley.js can be useful:
  // https://parsleyjs.org/
}

Tämä varmistaa, että vanhempia selaimia käyttävät käyttäjät saavat edelleen lomakevalidoinnin, vaikka se olisi toteutettu JavaScriptin avulla. Harkitse palvelinpuolen validoinnin tarjoamista viimeisenä turvallisuus- ja kestävyyskerroksena.

Globaaleja näkökohtia lomakevalidointiin: Varmista, että virheilmoituksesi ovat lokalisoituja ja saavutettavia. Anna selkeitä, ytimekkäitä virheilmoituksia käyttäjän kielellä. Harkitse, miten erilaisia päivämäärä- ja numeroformaatteja käytetään globaalisti.

4. Edistyneet asettelutekniikat (esim. CSS Grid)

CSS Grid Layout tarjoaa tehokkaan tavan luoda monimutkaisia, responsiivisia asetteluja. On kuitenkin tärkeää varmistaa, että vanhemmat selaimet käsitellään tyylikkäästi.

Esimerkki: CSS Gridin käyttö vararatkaisun kanssa


.container {
  display: flex;  /* Fallback for older browsers */
  flex-wrap: wrap;
}

@supports (display: grid) {
  .container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  }
}

Tämä koodi käyttää `flexboxia` vararatkaisuna selaimille, jotka eivät tue `grid`-asettelua. Jos selain tukee `grid`-asettelua, asettelu renderöidään gridillä. Tämä lähestymistapa luo responsiivisen asettelun, joka heikkenee tyylikkäästi vanhemmissa selaimissa.

Globaaleja näkökohtia asetteluun: Suunnittele eri näyttökokoja, kuvasuhteita ja syöttötapoja (esim. kosketusnäytöt, näppäimistönavigointi) varten. Testaa asetteluasi eri laitteilla ja selaimilla globaalisti. Harkitse oikealta vasemmalle (RTL) -kielitukea, jos kohdeyleisöösi kuuluu käyttäjiä, jotka lukevat RTL-kirjoituksia (esim. arabia, heprea).

Parhaat käytännöt ominaisuudentunnistukseen

Maksimoidaksesi ominaisuudentunnistuksen tehokkuuden, noudata näitä parhaita käytäntöjä:

Saavutettavuuden (a11y) huomioiminen ominaisuudentunnistuksessa

Saavutettavuus on progressiivisen parantelun kriittinen osa. Ominaisuudentunnistus voi auttaa varmistamaan, että verkkosivustosi on saavutettavissa vammaisille käyttäjille.

Kansainvälistyminen (i18n) ja ominaisuudentunnistus

Globaalia verkkosivustoa rakentaessasi harkitse i18n:ää. Ominaisuudentunnistus voi edistää i18n-pyrkimyksiäsi helpottamalla kielikohtaista sisältöä ja käyttäytymistä.

Johtopäätös: Rakentaminen tulevaisuutta varten

Progressiivinen parantelu ja ominaisuudentunnistus eivät ole pelkästään teknisiä käytäntöjä; ne ovat verkkokehityksen perusperiaatteita, jotka mahdollistavat osallistavien, suorituskykyisten ja resilienttien verkkokokemusten luomisen globaalille yleisölle. Ottamalla käyttöön nämä strategiat voit rakentaa verkkosivustoja, jotka mukautuvat jatkuvasti muuttuvaan teknologiamaisemaan, varmistaen, että sisältösi on saavutettavissa ja mukaansatempaavaa kaikille käyttäjille, heidän laitteestaan, selaimestaan tai sijainnistaan riippumatta. Keskittymällä ydintoimintoihin, omaksumalla ominaisuudentunnistuksen ja asettamalla saavutettavuuden etusijalle luot vankemman ja käyttäjäystävällisemmän verkkokokemuksen kaikille.

Verkon jatkuvasti kehittyessä progressiivisen parantelun merkitys vain kasvaa. Ottamalla nämä käytännöt käyttöön tänään sijoitat verkkosovellustesi tulevaisuuteen ja varmistat niiden menestyksen globaalissa digitaalisessa ekosysteemissä.

Toiminnalliset oivallukset: