Un client mi-a cerut un switch ce permite utilizatorilor să schimbe contrastul (practic inversarea culorilor).
Problema este că foarte multe secțiuni (de fapt… majoritatea!) au culori dinamice, setate de admin, deci toogle (doar) la o clasă pe body ar cam ieși din discuție. Cum aș putea aborda problema? Eu m-am gândit așa (cu refresh la pagină):
Setez o clasă pe body pentru culorile default
Restul culorilor, fiind servite din PHP, le inversez la generare.
Păstrez într-un cookie (sau în user meta) starea switch-ului.
E destul de impractic cu refresh, plus ca se pot pierde alte date, in functie de ce continut dinamic are pagina. Dar se poate face cu AJAX si json. De exemplu, pentru fiecare caz setezi un ID si atribui valorile dorite, dupa care:
Cu jQuery voi căuta fiecare $('[data-alternate-bg]') și voi ajusta background (și culoarea textului) dinamic și voi trimite un request la server să seteze cookie, să nu-și uite starea.
Revin cu soluția (găsită cu mult timp înainte, dar am uitat de acest topic):
cea mai importantă chestie a fost să generez un id pentru fiecare element ce-l voiam inversat. Cum foloseam mustache, pe lângă conținutul propriu-zis, am trimis și un ID generat (e.g. id-198273123)
La randare, puneam și un tag style în care puneam culorile corespunzătoare.
Cu JS făceam toggle pe body la clasa has-inverted-colors.
Si eu as merge pe solutia lui @navaru. Pana sa citesc raspunsul lui, voiam sa scriu ceva similar. Practic setezi un “state” , iar in scss/css pui si valorile in caz de state-ul respectiv.
Ai mai putea sa faci o mica functie JS care sa-ti editeze CSS-ul incarcat astfel incat fiecarei culori (tradusa in HSB) sa-i faca saturatia si luminozitatea 100-valoarea_actuala. Asta ar fi metoda cea mai quick’n’dirty la care ma pot gandi.
Cum, mai exact, faci schimbarea pe toate elementele CSS incarcate, este o cu totul alta intrebare. Dar, macar, nu mai ai de luat la purecat fiecare culoare in parte…