Română

Creați teme light/dark automate cu CSS care se adaptează preferințelor utilizatorilor, sporind accesibilitatea și atractivitatea vizuală pentru o audiență globală.

Funcția Light-Dark din CSS: Adaptare Automată a Temei pentru un Web Global

În lumea globalizată de astăzi, site-urile web trebuie să fie accesibile și atractive vizual pentru utilizatori cu medii și preferințe diverse. Una dintre cele mai eficiente metode de a realiza acest lucru este prin adaptarea automată a temei, în special prin oferirea de teme deschise (light) și întunecate (dark) care se ajustează în funcție de setările de sistem ale utilizatorului. Acest articol de blog vă va ghida în implementarea acestei funcționalități folosind media query-uri CSS și proprietăți personalizate, asigurând o experiență de navigare fluidă și confortabilă pentru audiența dumneavoastră internațională.

De ce să implementați teme automate deschise și întunecate?

Există mai multe motive convingătoare pentru a încorpora adaptarea automată a temei în proiectele dumneavoastră web:

Cum se implementează adaptarea automată a temei cu CSS

Elementul central al adaptării automate a temei constă în media query-ul prefers-color-scheme. Acest media query CSS vă permite să detectați schema de culori preferată de utilizator (deschisă sau întunecată) și să aplicați stilurile corespunzătoare.

Pasul 1: Definiți proprietăți personalizate (variabile CSS)

Începeți prin a defini proprietăți personalizate (variabile CSS) pentru a stoca valorile de culoare pentru temele deschise și întunecate. Acest lucru facilitează comutarea între teme prin simpla actualizare a valorilor variabilelor.


:root {
  --background-color: #ffffff; /* Fundal temă deschisă */
  --text-color: #000000; /* Text temă deschisă */
  --link-color: #007bff; /* Link temă deschisă */
  --button-background-color: #f0f0f0;
  --button-text-color: #000;
}

@media (prefers-color-scheme: dark) {
  :root {
    --background-color: #121212; /* Fundal temă întunecată */
    --text-color: #ffffff; /* Text temă întunecată */
    --link-color: #66b3ff; /* Link temă întunecată */
    --button-background-color: #333;
    --button-text-color: #fff;
  }
}

În acest exemplu, definim variabile pentru culoarea de fundal, culoarea textului, culoarea link-ului și culorile butoanelor. Selectorul :root aplică aceste variabile întregului document. Apoi, media query-ul @media (prefers-color-scheme: dark) suprascrie aceste variabile cu valorile pentru tema întunecată atunci când utilizatorul și-a setat sistemul pe modul întunecat.

Pasul 2: Aplicați proprietățile personalizate stilurilor dumneavoastră

Apoi, aplicați aceste proprietăți personalizate stilurilor dumneavoastră CSS pentru a controla aspectul elementelor site-ului web.


body {
  background-color: var(--background-color);
  color: var(--text-color);
  transition: background-color 0.3s, color 0.3s; /* Tranziție lină */
}

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

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

Aici, folosim funcția var() pentru a accesa valorile proprietăților noastre personalizate. Am adăugat și o proprietate transition elementului body pentru a crea o tranziție lină între teme.

Pasul 3: Testare și rafinare

Testați implementarea în detaliu pe diferite browsere și sisteme de operare. Browserele moderne precum Chrome, Firefox, Safari și Edge suportă complet media query-ul prefers-color-scheme. Puteți comuta între modurile deschis și întunecat în setările sistemului de operare pentru a vedea modificările reflectate pe site-ul dumneavoastră.

Tehnici avansate și considerații

Furnizarea unui comutator manual de temă

Deși adaptarea automată a temei este un punct de plecare excelent, unii utilizatori ar putea prefera să suprascrie manual setările de sistem. Puteți oferi un comutator manual de temă folosind JavaScript și stocarea locală (local storage).

HTML:



JavaScript:


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

let currentTheme = localStorage.getItem('theme') || 'auto'; // Implicit este auto

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;
}

// Aplică tema inițială la încărcarea paginii
if (currentTheme === 'dark') {
  setTheme('dark');
} else if (currentTheme === 'light') {
  setTheme('light');
} else {
  // Dacă este setat pe auto, lasă prefers-color-scheme să decidă
}


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

CSS: Adăugați următorul CSS împreună cu CSS-ul anterior. Observați suprascrierea manuală:


body.light-theme {
  --background-color: #ffffff; /* Fundal temă deschisă */
  --text-color: #000000; /* Text temă deschisă */
  --link-color: #007bff; /* Link temă deschisă */
  --button-background-color: #f0f0f0;
  --button-text-color: #000;
}

body.dark-theme {
  --background-color: #121212; /* Fundal temă întunecată */
  --text-color: #ffffff; /* Text temă întunecată */
  --link-color: #66b3ff; /* Link temă întunecată */
  --button-background-color: #333;
  --button-text-color: #fff;
}

Acest fragment de cod adaugă un buton care permite utilizatorilor să comute între temele deschisă, întunecată și automată. Tema selectată este stocată în local storage, astfel încât persistă la reîncărcarea paginii.

Gestionarea imaginilor și a SVG-urilor

Unele imagini și SVG-uri s-ar putea să nu arate bine atât în tema deschisă, cât și în cea întunecată. Puteți utiliza media query-uri CSS pentru a afișa condiționat versiuni diferite ale acestor resurse.


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;
  }
}

Acest fragment de cod afișează o imagine (cu clasa light-mode) în modul deschis și o imagine diferită (cu clasa dark-mode) în modul întunecat.

Considerații privind paleta de culori pentru audiențe internaționale

Atunci când alegeți paletele de culori pentru temele deschise și întunecate, fiți atenți la asocierile culturale și la considerațiile de accesibilitate. Iată câteva linii directoare generale:

Considerații de performanță

Deși implementarea adaptării automate a temei este relativ simplă, este important să se ia în considerare impactul potențial asupra performanței. Evitați utilizarea selectorilor CSS sau a animațiilor prea complexe care pot încetini randarea. De asemenea, asigurați-vă că proprietățile personalizate sunt definite eficient pentru a minimiza supraîncărcarea căutărilor de variabile.

Iată câteva bune practici pentru optimizarea performanței:

Cele mai bune practici de accesibilitate

Asigurați-vă că temele deschise și întunecate respectă ghidurile de accesibilitate, cum ar fi WCAG (Web Content Accessibility Guidelines). Aceasta include furnizarea unui contrast de culoare suficient, utilizarea HTML semantic și asigurarea că toate elementele interactive sunt accesibile de la tastatură.

Iată câteva bune practici specifice de accesibilitate de urmat:

Exemple din diferite regiuni

Luați în considerare aceste exemple despre cum temele deschise și întunecate pot fi adaptate pentru diverse audiențe globale:

Concluzie

Implementarea temelor automate deschise și întunecate este un pas crucial către crearea unei experiențe web mai accesibile și mai prietenoase pentru o audiență globală. Prin utilizarea media query-urilor CSS și a proprietăților personalizate, puteți adapta cu ușurință aspectul site-ului dumneavoastră pentru a corespunde preferințelor utilizatorilor, pentru a reduce oboseala ochilor și pentru a îmbunătăți accesibilitatea pentru utilizatorii cu deficiențe de vedere. Nu uitați să luați în considerare asocierile culturale, ghidurile de accesibilitate și considerațiile de performanță pentru a asigura o experiență de navigare fluidă și incluzivă pentru toată lumea.

Prin adoptarea acestor tehnici, demonstrați un angajament față de principiile moderne de design web și satisfaceți nevoile diverse ale audienței internaționale, făcând site-ul dumneavoastră un spațiu primitor și confortabil pentru toți.