L'empilage des feuilles de style
bazooka07
PluXml Lead Developer, Moderator
Bonjour,
Pour quelques plugins que j'ai écrit et qui ont un rendu visuel côté public, j'ai besoin de proposer une feuille de style par défaut intégré au plugin.
Cela soulève un problème avec les thèmes. Si on prend le thème par défaut livré avec PluXml, dans header.php, les feuilles de style CSS du thème sont les premières chargées. Viennent ensuite les feuilles de style de tous les plugins.
Selon la logique CSS, ce sont les dernières feuilles de style chargées qui sont prioritaires. En conséquence, les créateurs de thèmes ne peuvent pas harmoniser le rendu visuel des plugins.
Autant il est bon de télécharger la feuille reset.css au début, autant il me semble préférable de télécharger la feuille style.css en dernier pour laisser la liberté aux créateurs de théme sans les obliger à plonger dans le code des plugins.
J'ai ce souci en particulier avec mon plugin myPager où on ne peut modifier tout l'aspect des boutons dans le thème.
Pour quelques plugins que j'ai écrit et qui ont un rendu visuel côté public, j'ai besoin de proposer une feuille de style par défaut intégré au plugin.
Cela soulève un problème avec les thèmes. Si on prend le thème par défaut livré avec PluXml, dans header.php, les feuilles de style CSS du thème sont les premières chargées. Viennent ensuite les feuilles de style de tous les plugins.
Selon la logique CSS, ce sont les dernières feuilles de style chargées qui sont prioritaires. En conséquence, les créateurs de thèmes ne peuvent pas harmoniser le rendu visuel des plugins.
Autant il est bon de télécharger la feuille reset.css au début, autant il me semble préférable de télécharger la feuille style.css en dernier pour laisser la liberté aux créateurs de théme sans les obliger à plonger dans le code des plugins.
J'ai ce souci en particulier avec mon plugin myPager où on ne peut modifier tout l'aspect des boutons dans le thème.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je comprends le problème que tu énonces, mais cela ne fait que renverser le problème, parce qu'après ce sont les développeurs de plugins qui vont se plaindre que leur css est modifié par celui du thème.
Si le plugin est bien développé avec des classes css adéquates, il ne devrait pas avoir de conflit avec ceux du thème si le plugin requiert une mise en page particulière. Sinon il me semble normal que le plugin hérite de la mise en page du thème en chargeant ses feuilles de style en dernier.
La logique veut que ce soit le plugin qui hérite du thème et pas l'inverse (ce qui se produira si le css du thème est chargé en dernier)
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
à plus,
Gzyg
Je te prends un exemple comme le plugin myPager.
J'ai des boutons qui peuvent afficher 1 ou 2 chiffres, 1 chevron > ou un double chevron >>. Comment je fais pour afficher la même largeur pour tous les boutons. Sur des sites avec 30 pages d'articles, c'est horrible de voir 30 boutons à la queue leu-leu. Du coup, on affiche que quelques boutons au milieu ceux du début et ceux de la fin, et pour attirer l'attention de l'utilisateur sur les boutons manquants on crée un espace en les 3 groupes.
De plus, on mâche un peu le boulot pour le créateur de thèmes. Si la couleur ou les dimensions ne conviennent pas, il ouvre le déboggueur de Firefox ou de Chrome et il trouve de suite la régle CSS qui a le dernier mot, sans se casser la tête à trouver le bloc de balises HTML qu'il doit styliser. Et la correction est vite faite dans sa feuille de style si elle a le dernier mot.
Après tout le monde ne maitrise pas CSS. Si on demande à quoi correspond un "border-radius" ou "a:nth-last-child(2), on risque de voir beaucoup de gens la bouche bée. Donc, il faut à minima présenter un plugin prêt "out of the box".
@je-evrard,
Il y a une solution plus élégante qu'une option supplémentaire.
Dans PluXml, il y a pas plusieurs hooks pour agir :
plxShowTemplateCss, plxShowPluginsCss, et en dernier ressort, ThemeEndHead.
Le problème, c'est que style.css est appelé en premier. Donc toutes les feuilles de style suivantes lui passent dessus.
Il suffirait d'intercaler l'appel à style.css entre les appels de Hooks plxShowPluginsCss et ThemeEndHead. Cela permettrait de gérer la priorité de la feuille de style CSS du plugin selon le hook choisi.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Certes l'idéal est d'avoir des classes vraiment spécifiques aux plugins mais il est vrai que si un thème nécessite l'utilisation d'un plugin, il serait plus facile que la feuille de style du thème se charge après celles des plugins. Ainsi, il est possible au designer d'inclure directement le style voulu plutôt que via un commentaire ou une aide en ligne pas toujours comprise/lue.
Ce serait véritablement du clés en main et l'utilisateur final n'aurait pas à mettre les mains dans le cambouis.
Cela faciliterait également le partage des thèmes sur pluxml : le designer écrit son thème avec ses plugins activés. Et il uploade ensuite sur la plateforme pluxml uniquement le dossier de son thème. Dans la description, il donne la version de pluxml à utiliser ainsi que les versions des plugins à charger.
La sécurité de la plateforme serait ainsi renforcée et ne nécessiterait pas comme actuellement de télécharger tout ce qui est nécessaire (juste le script minimum).
Pour le coup, bazooka a mis dans le mille sans dégât collatéral ]:D
il faut différencier la composition de la stylisation ...
*/ la composition ne s'occupe que du flux, de la taille des éléments, le positionnement, l'alignement ...
*/ la stylisation est pour la couleur, bordure, font, etc ...
La feuille CSS du plugin organise/compose et celle du thème donne l'esthétique.
J'ai pour habitude de donner une class et un id au body.
ça permet de cibler un mode, un template, une catégorie, un article, une static ...
En écrivant, je pense également au sélecteur de thèmes : ce qui convient à l'un ne conviendra pas forcément à un autre thème. Et si l'on veut utiliser le même plugin mais avec des thèmes différents, le seul moyen valable et de mettre la css des plugins avant celle des thèmes.
donc si tu crées un plugin, tu attributs un identifiant/class pour prendre le pas sur la feuille générale, quelle soit placée avant ou après.
Corrigez-moi si je me trompe ...
je n'ai jamais eu de soucis de hiérarchie des CSS
Mais quid du néophyte ? Et du sélecteur de thèmes ?
Il faudrait cette modification en natif pour chaque appel css/js.
Cela permettrai de charger un seul fichier css et un seul fichier js après a voir s'il est utile on non d'utiliser un cache.
Si le plugin est bien pensé et bien programmé, il gère ses propres classes css sans rentrer en conflit avec celles d'un thème. Au mieux il vient les compléter, voir les modifier.
Inverser l'ordre de chargement des feuilles (plugin et apres theme), c'est prendre le problème à l'envers parce que ça vous arrange dans vos devs, soit par facilité, méconnaissance ou fénéantise.
Cela ne doit en aucun cas être un argument technique ou fonctionnel: en tout cas c'est ma conception theme/plugin.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
à plus,
Gzyg
Je suis d'accord avec toi.
On aura toujours plus de néophites que des pro des feuilles CSS.
Les plugins doivent être livrés avec une version minimale prête à fonctionner.
@Gzyg,
Si je reprends mon plugin myPager, je n'envoie que le minimum syndical dans la page html : une suite de balises : <a href ="..">..</a>.
Si je n'utilise pas quelques règles CSS, cela ne va ressembler qu'à une suite de chiffres. Je ne suis pas sûr que beaucoup de gens accrochent devant un tel désign. Faute de quoi, je serais obligé d'utiliser la balise <table>. C'est pas top !!
@Frédéric,
Les créateurs de style peuvent utiliser le hook ThemeEndHead. Il est appelé en dernier dans index.php. Ils sont alors sûrs d'avoir le dernier mot et conserver l'unité graphique du site.
@Stéphane,
Non, je ne suis pas d'accord. Aucun plugin, pas plus que PluXml ne devrait indiquer de classe. Cela alourdit les pages HTML et au final on ne sait plus qui fait quoi. Le seul truc qui doit être permis est l'utilisation de l'attribut id dans les balises html pour servir de point de repère. C'est la tendance actuelle sur le net, surtout avec la diversité des tailles de terminaux (Ecran Mac 27", PC de bureau, portable, tablette, smartphone, montre, ...).
Si on a inventé les sélecteurs d'attribut et les pseudo-classes, c'est qu'il y a une raison.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Maintenant si tu veux les feuilles css des plugins chargées avant celle du theme, dans le fichier header.php de ton theme remplace
par
et le tour est joué
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
exemple :
Une suite de liens est une liste.
Avec un simple display:inline-block sur les LI, un text-align:center sur UL et on a une composition du contenu ...
suffit de rajouter un id à UL et une classe active/no-active (qui correspond à PluXml) aux liens pour donner la liberté d'adapter le décorum ...
Exactement !
C'est ce que j'ai que j'ai fait sur mon site
Petit aparté: Si tu jettes un œil sur le source de la page, note la balise <meta name="generator">. Il faut la rajouter dans le thème par défaut.
@Jos,
Si on te suit dans ton raisonnement, il va falloir un plugin par thème. On n'est pas rendu. Ce n'est pas la logique habituelle : on maquette, on code, on stylise.
@Danielsan,
On est bien d'accord. C'est ce que j'ai fait dans myPager. Sauf qu'il n'y a pas de <li>, on attaque directement avec <a>. Et dans le <div> parent fourni par PluXml, le "id" me va bien. Donc inutile d'en rajouter un autre.
En parlant de feuille de style, cela serait bien d'en rajouter une pour le media="print" dans le thème par defaut. Imprimer le menu ou la side-bar me semble être d'un intérêt limité.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Si la structure/composition de ta page te semble cohérente, alors c'est bon.
note : il m'arrive de surfer avec un navigateur textuel, et là ... c'est très drôle !
c'est noté
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
C'est pas si drôle que tu le crois.
Comment font les mal-voyants ou les aveugles ?
Voir sites labelisés
Quand on remplace les yeux par un synthétiseur vocal, cela ne doit pas toujours être évident.
Cela voudrait le coup de faire un essai.
C'est sûr qu'il y a des talents cachés pour faire des grandes usines à gaz. :mad:
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Une suite de liens EST UNE LISTE de liens ... d'où l'usage de UL/LI car c'est reconnu comme tel.
On n'utilise pas assez les listes, moi j'aime bien, et les imbriquer en plus ]:D
Pour ceux qui veulent tester leurs site avec une synthèse vocale : la majorité des aveugles utilisent Jaws (payant et cher) mais certains utilisent une solution gratuite. http://www.nvda-fr.org/
Je suis d'accord avec Frédéric, charger plusieurs fichiers CSS est plus long que d'en charger un seul.
On perd des points dans PageSpeed si on utilise plusieurs fichiers CSS, ce qui peut être dommageable pour le référencement.
Pour voir la notation PageSpeed de son site : http://gtmetrix.com/
faut-il nommer la feuille de style du plugin d'une manière particulière pour qu'elle soit appelée automatiquement (genre elle porte le même nom)
ou faut-il l'envoyer dans le hook plxShowPluginsCss ? (il manque ces infos dans la doc en ligne)
j'essai de la nommer de différente manière mais ça veut pas :rolleyes:
moi j'en suis toujours à envoyer ça dans ThemeEndHead
Pour résume:
A partir de l'écran de gestion des plugins, pour chaque plugin tu as un menu "Code css".
Tu peux à partir de là mettre le css nécessaire au fonctionnement du plugin coté admin ou coté visiteur.
Pour définir du css par défaut: dans le dossier de ton plugin créez un dossier css, dedans mets un fichier site.css et admin.css.
Le contenu de site.css sera visible et modifiable sur l'écran "Code css" du plugin. Idem pour admin.css
De cette façon tu peux initialiser le code css par défaut nécessaire au plugin, qui pourra etre personnaliser sans éditer les fichiers à partir de l'écran "Code css". Plus besoin de coder le css dans le fichier .php du plugin
Le moteur des plugins de PluXml charge les fichiers css s'ils existent, pour les mettre dans une sorte de cache qui sera appelé par l'instruction pluginsCss déclarée dans le fichier header.php de ton thème.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Je n'ai plus qu'à faire du copiez-collez d'un plugin à l'autre. Et dans le dossier du plugin myPlugin, j'ai donc, selon le besoin, myPlugin.php, myPlugin.css, myPlugin.js.
Je fais la même chose pour le hook plxShowPluginsCss, sauf qu'il n'y a pas de test sur la variable plugin.
La multitude de feuilles CSS augmente le temps de réponse du serveur.
Il faudrait un plugin ou un bouton dans le panneau de config qui permettrait de cumuler dans une grosse feuille, les feuilles du thème avec les feuilles de chaque plugin. Le problème est le même pour javascript.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
par contre,
1/ en activant ckEditor dans les pages statics, c'est aussi actif pour le CSS ... du coup ça me met des balises dedans
2/ ça ne marche pas pour l'écran de config mais que d'admin ...
C'est ce qui est fait par le moteur de plugin de PluXml.
Chaque code css (coté admin ou visiteur) ajouté dans l'écran "Code css" des plugins est regroupé dans 1 seul fichier afin de ne pas multiplier les appels. L'instruction pluginsCss ne fait que charger cet unique fichier, fichier qui est lui meme minimisé.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)