Hrvatski

Istražite moć CSS media queryja i prilagođenih svojstava za stvaranje automatskih svijetlih i tamnih tema koje se prilagođavaju korisničkim preferencijama, poboljšavajući pristupačnost i vizualnu privlačnost za globalnu publiku.

CSS Funkcija Light-Dark: Automatska Prilagodba Teme za Globalni Web

U današnjem globalno povezanom svijetu, web stranice moraju biti pristupačne i vizualno privlačne korisnicima različitih pozadina i preferencija. Jedan od najučinkovitijih načina da se to postigne je automatskom prilagodbom tema, specifično nudeći svijetle i tamne teme koje se prilagođavaju sistemskim postavkama korisnika. Ovaj blog post će vas provesti kroz implementaciju ove funkcionalnosti koristeći CSS media queryje i prilagođena svojstva, osiguravajući besprijekorno i ugodno iskustvo pregledavanja za vašu međunarodnu publiku.

Zašto Implementirati Automatske Svijetle i Tamne Teme?

Postoji nekoliko uvjerljivih razloga za uključivanje automatske prilagodbe tema u vaše web projekte:

Kako Implementirati Automatsku Prilagodbu Teme s CSS-om

Srž automatske prilagodbe teme leži u prefers-color-scheme media queryju. Ovaj CSS media query omogućuje vam da detektirate korisnikovu preferiranu shemu boja (svijetlu ili tamnu) i primijenite odgovarajuće stilove.

Korak 1: Definirajte Prilagođena Svojstva (CSS Varijable)

Započnite definiranjem prilagođenih svojstava (CSS varijabli) za pohranu vrijednosti boja za vaše svijetle i tamne teme. To olakšava prebacivanje između tema jednostavnim ažuriranjem vrijednosti varijabli.


:root {
  --background-color: #ffffff; /* Pozadina svijetle teme */
  --text-color: #000000; /* Tekst svijetle teme */
  --link-color: #007bff; /* Poveznica svijetle teme */
  --button-background-color: #f0f0f0;
  --button-text-color: #000;
}

@media (prefers-color-scheme: dark) {
  :root {
    --background-color: #121212; /* Pozadina tamne teme */
    --text-color: #ffffff; /* Tekst tamne teme */
    --link-color: #66b3ff; /* Poveznica tamne teme */
    --button-background-color: #333;
    --button-text-color: #fff;
  }
}

U ovom primjeru definiramo varijable za boju pozadine, boju teksta, boju poveznice i boje gumba. Selektor :root primjenjuje ove varijable na cijeli dokument. Media query @media (prefers-color-scheme: dark) zatim nadjačava ove varijable vrijednostima za tamnu temu kada je korisnik postavio svoj sustav na tamni način rada.

Korak 2: Primijenite Prilagođena Svojstva na Vaše Stilove

Zatim, primijenite ova prilagođena svojstva na svoje CSS stilove kako biste kontrolirali izgled elemenata vaše web stranice.


body {
  background-color: var(--background-color);
  color: var(--text-color);
  transition: background-color 0.3s, color 0.3s; /* Glatka tranzicija */
}

a {
  color: var(--link-color);
}

button {
  background-color: var(--button-background-color);
  color: var(--button-text-color);
  border: none;
  padding: 10px 20px;
  cursor: pointer;
}

Ovdje koristimo funkciju var() za pristup vrijednostima naših prilagođenih svojstava. Također smo dodali svojstvo transition elementu body kako bismo stvorili glatku tranziciju između tema.

Korak 3: Testiranje i Usavršavanje

Temeljito testirajte svoju implementaciju na različitim preglednicima i operativnim sustavima. Moderni preglednici poput Chromea, Firefoxa, Safarija i Edgea u potpunosti podržavaju prefers-color-scheme media query. Možete se prebacivati između svijetlog i tamnog načina rada u postavkama vašeg operativnog sustava kako biste vidjeli promjene na vašoj web stranici.

Napredne Tehnike i Razmatranja

Pružanje Ručnog Prekidača za Teme

Iako je automatska prilagodba teme odlična polazna točka, neki korisnici možda preferiraju ručno nadjačavanje sistemskih postavki. Možete pružiti ručni prekidač za teme koristeći JavaScript i lokalnu pohranu (local storage).

HTML:



JavaScript:


const themeToggle = document.getElementById('theme-toggle');
const body = document.body;

let currentTheme = localStorage.getItem('theme') || 'auto'; // Zadano je automatski

function setTheme(theme) {
  if (theme === 'dark') {
    body.classList.add('dark-theme');
    body.classList.remove('light-theme');
  } else if (theme === 'light') {
    body.classList.add('light-theme');
    body.classList.remove('dark-theme');
  } else {
    body.classList.remove('light-theme', 'dark-theme');
  }
  localStorage.setItem('theme', theme);
  currentTheme = theme;
}

// Primijeni početnu temu pri učitavanju stranice
if (currentTheme === 'dark') {
  setTheme('dark');
} else if (currentTheme === 'light') {
  setTheme('light');
} else {
  //Ako je postavljeno na automatski, dopusti da odluči prefers-color-scheme
}


themeToggle.addEventListener('click', () => {
    if (currentTheme === 'auto'){
        setTheme('light');
    } else if (currentTheme === 'light') {
        setTheme('dark');
    } else {
        setTheme('auto');
    }
});

CSS: Dodajte sljedeći CSS uz prethodni CSS. Primijetite ručno nadjačavanje:


body.light-theme {
  --background-color: #ffffff; /* Pozadina svijetle teme */
  --text-color: #000000; /* Tekst svijetle teme */
  --link-color: #007bff; /* Poveznica svijetle teme */
  --button-background-color: #f0f0f0;
  --button-text-color: #000;
}

body.dark-theme {
  --background-color: #121212; /* Pozadina tamne teme */
  --text-color: #ffffff; /* Tekst tamne teme */
  --link-color: #66b3ff; /* Poveznica tamne teme */
  --button-background-color: #333;
  --button-text-color: #fff;
}

Ovaj isječak koda dodaje gumb koji korisnicima omogućuje prebacivanje između svijetle, tamne i automatske teme. Odabrana tema pohranjuje se u lokalnoj pohrani (local storage) kako bi ostala sačuvana pri ponovnom učitavanju stranice.

Rukovanje Slikama i SVG-ovima

Neke slike i SVG-ovi možda neće izgledati dobro i u svijetlim i u tamnim temama. Možete koristiti CSS media queryje za uvjetno prikazivanje različitih verzija tih resursa.


img.light-mode {
  display: block;
}

img.dark-mode {
  display: none;
}

@media (prefers-color-scheme: dark) {
  img.light-mode {
    display: none;
  }

  img.dark-mode {
    display: block;
  }
}

Ovaj isječak koda prikazuje jednu sliku (s klasom light-mode) u svijetlom načinu rada i drugu sliku (s klasom dark-mode) u tamnom načinu rada.

Razmatranja o Paleti Boja za Međunarodnu Publiku

Prilikom odabira paleta boja za vaše svijetle i tamne teme, budite svjesni kulturnih asocijacija i razmatranja o pristupačnosti. Evo nekih općih smjernica:

Razmatranja o Performansama

Iako je implementacija automatske prilagodbe teme relativno jednostavna, važno je razmotriti potencijalni utjecaj na performanse. Izbjegavajte korištenje pretjerano složenih CSS selektora ili animacija koje mogu usporiti renderiranje. Također, osigurajte da su vaša prilagođena svojstva definirana učinkovito kako biste minimalizirali opterećenje pretraživanja varijabli.

Evo nekih najboljih praksi za optimizaciju performansi:

Najbolje Prakse za Pristupačnost

Osigurajte da vaše svijetle i tamne teme zadovoljavaju smjernice za pristupačnost, kao što su WCAG (Web Content Accessibility Guidelines). To uključuje pružanje dovoljnog kontrasta boja, korištenje semantičkog HTML-a i osiguravanje da su svi interaktivni elementi dostupni putem tipkovnice.

Evo nekih specifičnih najboljih praksi za pristupačnost koje treba slijediti:

Primjeri iz Različitih Regija

Razmotrite ove primjere kako se svijetle i tamne teme mogu prilagoditi raznolikoj globalnoj publici:

Zaključak

Implementacija automatskih svijetlih i tamnih tema ključan je korak prema stvaranju pristupačnijeg i korisnički ugodnijeg web iskustva za globalnu publiku. Korištenjem CSS media queryja i prilagođenih svojstava, možete lako prilagoditi izgled vaše web stranice kako bi odgovarao korisničkim preferencijama, smanjio naprezanje očiju i poboljšao pristupačnost za korisnike s oštećenjem vida. Ne zaboravite uzeti u obzir kulturne asocijacije, smjernice za pristupačnost i razmatranja o performansama kako biste osigurali besprijekorno i inkluzivno iskustvo pregledavanja za sve.

Usvajanjem ovih tehnika, pokazujete predanost modernim principima web dizajna i udovoljavate raznolikim potrebama vaše međunarodne publike, čineći vašu web stranicu gostoljubivim i ugodnim prostorom za sve.