Constat
- Passer les couleurs utilisateur de SPIP à SCSS pour le compiler par GULP, c’est pas vraiment faisable.
- Par ailleurs, ça permet pas à des plugins de réutiliser les couleurs de base (autre que couleur_claire & couleur_foncée actuellement envoyées) dans les fichiers
prive/style_prive_plugin_xx.html
- L’utilisateur est limité aux couleurs qu’on a choisi : on pourrait certainement faire mieux que ça.
Proposition
Utiliser les variables CSS. C’est le top (modifiables en JS, suivent aussi l’effet de cascade...)
- Les préférences utilisateur pourraient permettre de choisir comme actuellement un panel de couleurs, et en plus de choisir explicitement une couleur désirée avec un picker
- Ces couleurs sont déclarées dans
:root ensuite en variables CSS au tout début du head dans l’espace privé (juste avant les autres styles CSS). Elles deviennent alors utilisables dans tout fichier CSS (dans les navigateurs assez récents).
- On pourrait aussi déclarer une taille de police de base (sur la balise html), qui pourrait être définie dans les préférences utilisateurs. En utilisant des
rem ensuite partout ça devrait être assez sympa.
Ça donne donc par exemple :
<style type="text/css">
:root {
--couleur-foncee: #fa9a00;
--couleur-claire: #ffc000;
--couleur-lien: #FF5B00;
--couleur-lien-off: #B49280;
--html-font-size: 1.2em;
}
</style>
- Ensuite on utilise directement dans le scss une déclaration de type :
:root {
--couleur-defaut: var(--couleur-foncee, #8F8FBD);
}
Et on peut alors utiliser à différents endroits var(--couleur-defaut) simplement.
Problèmes rencontrés
J’ai fait quelques tests en partie concluants, mais je suis à demi bloqué
- CSS ne sait pas encore faire de calcul de couleurs pour augmenter ou baisser la luminosité par exemple. Ça sera un jour fait avec https://drafts.csswg.org/css-color/#funcdef-color-mod mais on n’en est pas là.
- SCSS sait le faire, mais évidemment pas avec des variables CSS (dont il ne connait pas la valeur en plus).
Solutions possibles
Comme alternative à l’impossibilité de modifier les couleurs en CSS depuis une variable, je me dis qu’une possibilité serait de faire générer un panel de couleurs par SPIP depuis les couleurs choisies de l’utilisateur. C’est pas extrêmement compliqué, mais ça serait bien de pouvoir le faire approximativement aussi en JS (https://stackoverflow.com/questions/5833624/increase-css-brightness-color-on-click-with-jquery-javascript) pour que les couleurs se modifient instantanément dans les préférences utilisateur.
On pourrait avoir quelque chose comme :
--couleur-principale-10: #nnnnnn; // lumineux
--couleur-principale-20: #nnnnnn;
--couleur-principale-30: #nnnnnn;
...
--couleur-principale-90: #nnnnnn; // sombre
Et ceci pour chaque couleur.
Est-ce que ça suffirait ? Est-ce qu’on aurait une plage suffisante de choix ?
Constat
prive/style_prive_plugin_xx.htmlProposition
Utiliser les variables CSS. C’est le top (modifiables en JS, suivent aussi l’effet de cascade...)
:rootensuite en variables CSS au tout début du head dans l’espace privé (juste avant les autres styles CSS). Elles deviennent alors utilisables dans tout fichier CSS (dans les navigateurs assez récents).remensuite partout ça devrait être assez sympa.Ça donne donc par exemple :
Et on peut alors utiliser à différents endroits
var(--couleur-defaut)simplement.Problèmes rencontrés
J’ai fait quelques tests en partie concluants, mais je suis à demi bloqué
Solutions possibles
Comme alternative à l’impossibilité de modifier les couleurs en CSS depuis une variable, je me dis qu’une possibilité serait de faire générer un panel de couleurs par SPIP depuis les couleurs choisies de l’utilisateur. C’est pas extrêmement compliqué, mais ça serait bien de pouvoir le faire approximativement aussi en JS (https://stackoverflow.com/questions/5833624/increase-css-brightness-color-on-click-with-jquery-javascript) pour que les couleurs se modifient instantanément dans les préférences utilisateur.
On pourrait avoir quelque chose comme :
Et ceci pour chaque couleur.
Est-ce que ça suffirait ? Est-ce qu’on aurait une plage suffisante de choix ?