Bonjour,
Je me questionne sur les pratiques d'écriture de feuilles de style et j'aimerais adopter une convention que je ne serais pas seul à utiliser et connaître.
J'ai donc clairement identifié les grands noms; SMACSS, OCSS et BEM. Le dernier me paraît plutôt pertinent (mais pas totalement sinon je ne posterais pas...) donc c'est plutôt celui là qui m'intéresse. J'ai donc essayé de me projeter et d'imaginer mentalement des cas particuliers de son usage.
Personnellement j'organise mes feuilles de style avec sass sous cette forme:
J'ai quatre répertoires variables, utils, components, et partials. C'est inutile de vous détailler entièrement la hiérarchie et les interactions de mes fichiers, mais sachez que components contient différents fichiers dont chacun correspond à une "unité d'interface", j'ai vite vu que cela correspondait aux éléments en BEM.
Maintenant je vous présente un exemple: imaginez que mon interface utilise des boutons (c'est fréquent admettez-le). J'ai donc un élément de classe button avec éventuellement des sous éléments button__icon et des états button--cancel, button--confirm, etc... Tout ça je le met dans mon fichier _button.sass du répertoire components. Mais, mon bouton va nécessairement se retrouver dans d'autres éléments indépendants (form, au hasard).
Donc déjà je trouve que c'est un peu une entrave à la logique de cette convention dans le sens où des éléments présumés atomiques s'imbriquent (oui on ne parle pas de combinaison mais bien d'imbrication puisque d'un point de vue logique comme sémantique, le bouton se retrouve dans le form).
Donc si je suivait BEM à la lettre, je devrais plutôt créer un sous élément form__button, et faire ainsi pour tous les éléments qui utilisent un bouton, et ainsi dupliquer comme jamais.
Ou sinon, je m'en fiche, j'imbrique mes atomes (cette phrase n'a pas de sens ça m'irrite), et pour gérer les éventuelles variations de mon bouton selon l'élément dans lequel il se trouve, je lui crée des états button--form, etc...
Mais c'est là que ça me pose un problème quant à la structure sass que je vous ai décrite: mes différents états je vais les définir dans le fichier _button.sass (ça semble évident); alors des styles qui sont liés au bouton mais inhérent à son parent, vont être définis dans le fichier du bouton. Moi j'aimerais le mettre dans le fichier du form mais c'est le bordel alors.
Bon vous devez voir quel est mon problème maintenant (j'espère). Mais ce serait délirant que personne ne ce soit posé la question avant moi donc je suis sûr qu'il y a une explication.
Par ailleurs, le point fort de BEM est de régler les problèmes d'héritages de CSS et d'ameliorer la lisibilité du code (je ne suis pas du tout d'accord avec ce second point soit dit en passant).
Mais quant au premier point je ne comprend pas pourquoi c'est un problème, CSS met en avant cette caractéristique (c'est meme dans son nom), et c'est très utile pour factoriser son code d'une façon qui me paraît plus lisible et élégante que BEM.
Moi j'aurais envie (et c'est plutôt ce que je fait actuellement) d'user de l'héritage pour créer mon élément button, qu'il puisse avoir un état warning avec un background orange, mais que mon élément message (par exemple) puisse lui aussi avoir un état warning qui hérite des mêmes propriétés. Et si chacun d'entre eux se comporte différemment sur certaines propriétés de cet état, j'ai juste à imbriquer mes selecteurs pour leur donner à chacun leur propriétés particulières en plus du background orange.
Bon voilà c'est le monologue que je me suis fait en me documentant sur le sujet; mais vous qu'en pensez-vous ? Vous utilisez quoi ? Pourquoi ?
Je me questionne sur les pratiques d'écriture de feuilles de style et j'aimerais adopter une convention que je ne serais pas seul à utiliser et connaître.
J'ai donc clairement identifié les grands noms; SMACSS, OCSS et BEM. Le dernier me paraît plutôt pertinent (mais pas totalement sinon je ne posterais pas...) donc c'est plutôt celui là qui m'intéresse. J'ai donc essayé de me projeter et d'imaginer mentalement des cas particuliers de son usage.
Personnellement j'organise mes feuilles de style avec sass sous cette forme:
J'ai quatre répertoires variables, utils, components, et partials. C'est inutile de vous détailler entièrement la hiérarchie et les interactions de mes fichiers, mais sachez que components contient différents fichiers dont chacun correspond à une "unité d'interface", j'ai vite vu que cela correspondait aux éléments en BEM.
Maintenant je vous présente un exemple: imaginez que mon interface utilise des boutons (c'est fréquent admettez-le). J'ai donc un élément de classe button avec éventuellement des sous éléments button__icon et des états button--cancel, button--confirm, etc... Tout ça je le met dans mon fichier _button.sass du répertoire components. Mais, mon bouton va nécessairement se retrouver dans d'autres éléments indépendants (form, au hasard).
Donc déjà je trouve que c'est un peu une entrave à la logique de cette convention dans le sens où des éléments présumés atomiques s'imbriquent (oui on ne parle pas de combinaison mais bien d'imbrication puisque d'un point de vue logique comme sémantique, le bouton se retrouve dans le form).
Donc si je suivait BEM à la lettre, je devrais plutôt créer un sous élément form__button, et faire ainsi pour tous les éléments qui utilisent un bouton, et ainsi dupliquer comme jamais.
Ou sinon, je m'en fiche, j'imbrique mes atomes (cette phrase n'a pas de sens ça m'irrite), et pour gérer les éventuelles variations de mon bouton selon l'élément dans lequel il se trouve, je lui crée des états button--form, etc...
Mais c'est là que ça me pose un problème quant à la structure sass que je vous ai décrite: mes différents états je vais les définir dans le fichier _button.sass (ça semble évident); alors des styles qui sont liés au bouton mais inhérent à son parent, vont être définis dans le fichier du bouton. Moi j'aimerais le mettre dans le fichier du form mais c'est le bordel alors.
Bon vous devez voir quel est mon problème maintenant (j'espère). Mais ce serait délirant que personne ne ce soit posé la question avant moi donc je suis sûr qu'il y a une explication.
Par ailleurs, le point fort de BEM est de régler les problèmes d'héritages de CSS et d'ameliorer la lisibilité du code (je ne suis pas du tout d'accord avec ce second point soit dit en passant).
Mais quant au premier point je ne comprend pas pourquoi c'est un problème, CSS met en avant cette caractéristique (c'est meme dans son nom), et c'est très utile pour factoriser son code d'une façon qui me paraît plus lisible et élégante que BEM.
Moi j'aurais envie (et c'est plutôt ce que je fait actuellement) d'user de l'héritage pour créer mon élément button, qu'il puisse avoir un état warning avec un background orange, mais que mon élément message (par exemple) puisse lui aussi avoir un état warning qui hérite des mêmes propriétés. Et si chacun d'entre eux se comporte différemment sur certaines propriétés de cet état, j'ai juste à imbriquer mes selecteurs pour leur donner à chacun leur propriétés particulières en plus du background orange.
Bon voilà c'est le monologue que je me suis fait en me documentant sur le sujet; mais vous qu'en pensez-vous ? Vous utilisez quoi ? Pourquoi ?