Tâche d'analyse par mise en page (sass, pug, gulp, bem)

Pour les juniors, pour les juniors ... ou ils commenceront ici ... oui nous, oui c'est ...

J'ai terminé le projet (site) pug + sass + es6 + gulp + BEM. Pendant le développement, j'ai rencontré de nombreuses difficultés. Cet article est destiné aux débutants, à ceux qui ne connaissent pas les marges négatives, ont entendu parler de la méthodologie de nommage BEM, mais ne l'ont pas essayée, à ceux qui n'ont pas une grande expérience en développement. J'espère que vous serez intéressé ici. Si vous lisez ceci au travail, assis sur 4 moniteurs et écrivant d'une main le code de l'IA, et de l'autre main parcourant le hub, alors j'aimerais avoir de vos critiques constructives sur les méthodes qui ont été utilisées ici.

Marge et largeur négatives 110%
Je connais un tel truc depuis longtemps, mais ce n'est que pour la première fois que je l'ai appliqué à la pratique. Il y avait une restriction dans la mise en page (wrapper = largeur: 1170 px, bordure rouge). À droite, le contenu correspondait à la restriction et était adjacent à la frontière, mais à gauche, l'image a rampé hors de la frontière. Au début, cela peut être effrayant, mais cela vaut la peine d'en savoir plus sur le fonctionnement de margin-letf: -100px et vous savez déjà comment résoudre la tâche. Soit dit en passant, c'est flex et en jaune, j'ai marqué les limites des objets.

Nous sommes habitués à utiliser la largeur, la hauteur à 100%, et cela est clair, tout pour l'adaptation, en utilisant la largeur, vous pouvez obtenir un résultat similaire à celui des marges négatives. Donnez simplement la taille au descendant plus grande que votre parent (par exemple largeur: 130%)


Structure CSS BEM
Ce fut probablement la chose la plus difficile pour moi.

image

Cette photo illustre bien mon projet, et en fait n'importe quel projet. Lorsque vous écrivez les cent premières lignes, tout semble simple et vous ne remarquez aucun problème. Vous avez donc terminé le projet, avec une longueur de 900 lignes et de façon inattendue pour vous-même, décidé de faire défiler le fichier, enfin, ou d'ajouter des requêtes multimédias.



Vous écrivez des styles pour un élément dans les médias, regardez le site et ne comprenez pas pourquoi les styles ne fonctionnent pas comme requis. À la recherche d'un problème que vous avez déjà passé 15 minutes, vous avez vérifié les tâches dans gulp et parcouru le fichier css compilé.

Par hasard, par accident ... vous trouvez le problème dans une feuille de style en cascade, ou plutôt dans la façon dont les styles sont appliqués aux éléments. Au tout début de mon voyage sur le Web, j'ai certainement lu que les sélecteurs ont des priorités d'application différentes. Bref, alors pour un sélecteur ordinaire (div, ul, a, p, etc.) -1 point, pour la classe-10, pour l'identifiant 100.



Après avoir soigneusement vérifié toute l'imbrication, j'ai toujours trouvé une erreur. Il s'avère que vous devez surveiller l'imbrication des éléments et ne pas leur donner le dernier sens.

Cela peut inclure la structure du fichier css (sass). Il y a un bloc "portfolio", il a un tas d'éléments du type "portfolio __ *", mais deux classes dans cette imbrication ne sont pas nécessaires, à mon avis.

C'était le premier projet dans lequel j'ai essayé d'adhérer strictement à BEM, mais je n'ai pas passé une minute sur la conception au tout début, mais j'ai proposé des cours en déplacement, ce qui a conduit au fait que le soutien est donné avec difficulté.



Mais cela, à mon avis, est un bon exemple de BEM



Classes BEM longues
J'ai lu ce problème dans l'un des articles sur BEM, mais je l'ai moi-même rencontré pour la première fois. C'est très similaire aux problèmes de bootstrap, il y en avait aussi ... il y a des classes longues. Comment me débrouiller avec le nombre minimum de cours?

C'est btn par défaut.



Et ce sont déjà des boutons modifiés ...









Sélecteurs complexes
Étant donné que j'ai dû écrire sur BEM, certaines complications du projet sont venues d'ici. J'ai déjà écrit sur les classes longues, voici un autre cas.

Il y avait 6 éléments similaires sur la page. Lorsque les médias interrogent, il a fallu masquer un certain nombre d'éléments. Après tout, ne créez pas de nouvelles classes pour chaque objet. J'ai dû utiliser la pseudo-classe nth-child (). Auparavant, il n'était utilisé que de manière rognée (enfant (1), enfant (3), enfant (4), etc.), maintenant il fallait masquer tous les éléments sauf les deux premiers. Ayant passé 5 minutes à lire la documentation, j'ai utilisé nth-child (n + 3), obtenant ainsi le résultat dont j'avais besoin.



Un autre exemple de la façon dont vous pouvez prendre l'élément souhaité à travers un groupe de sélecteurs, et ne pas proposer une classe spéciale pour cet élément.



Voir l'image ci-dessous. L'entrée suivante div.1> p sélectionnera uniquement les objets de classe «2», div.3> p recevra en conséquence les objets de classe «4». L'image montre comment cela fonctionne. Les éléments les plus proches sont sélectionnés dans la hiérarchie.



Conclusion


J'écris cet article car Ça m'intéresse, ça m'intéresse de démonter mes projets. Cela me donne l'opportunité de développer et de combler le fossé dans ma connaissance de certaines technologies. Merci d'avoir lu, j'espère que vous avez apprécié.

Source: https://habr.com/ru/post/fr432248/


All Articles