grid-template-rows: repeat(3, auto);
grid-auto-columns: 18rem;
Je pense que vous avez embrouillé vos idées. Votre grille a deux rangées positionnées en dehors de la grille sans raison valable ; elles ont été ajouté automatiquement alors qu’elles auraient dû être définies explicitement.
grid-template-rows: repeat(3,auto);
grid-template-columns: repeat(3,18rem);
Je suis désolé je ne vois vos commentaires que maintenant.
Qu’entendez vous par 2 rangées positionnées en dehors de la grille ? Je ne suis pas sûr de comprendre. Dans le cas de https://codepen.io/julienpradet/pen/GRPpZrR je ne vois pas de rangées en dehors de la grille ?
L’avantage de grid-auto-columns est que cela permet d’avoir un nombre variable d’éléments dans la grille: y compris s’il n’y a qu’1 ou 2 articles. Ca ne marcherait pas pour des articles qu’on voudrait les uns en dessous des autres. Mais ce n’est pas le but de ce composant.
Vous ne connaissez pas le concept à mon avis. Les éléments sont disposés dans la grille. La grille que vous avez définie explicitement dans vos déclarations CSS n’a que trois lignes (row) et une seule colonne (column). Vous avez neuf éléments (items) à disposer (3x3). La propriété CSS grid-auto-column
spécifie la largeur des colonnes créées implicitement, en relation avec la déclaration grid-auto-flow: column
. En supposant que grid-auto-flow: row;
soit effective (ce n’est pas ce qui est recherché), les éléments h2
, img
et p
auraient été placés dans les trois lignes de la seule colonne définie explicitement. Les autres éléments auraient été placés dans de nouvelles lignes créées implicitement. On appelle cela la grille implicite (implicit grid).
Je dois admettre que ce n’est pas très bien expliqué de ma part. Normalement, grid-auto-flow
spécifie l’ordre dans lequel disposer les éléments de la grille. La valeur row
spécifie qu’il faut remplir la grille ligne par ligne : ligne 1 colonne 1, ligne 1 colonne 2, ligne 1 colonne 3, ligne 2 colonne 1, ligne 2 colonne 2, ligne 2 colonne 3, etc. Les éléments auraient été disposé l’un à côté de l’autre par groupe de trois si ces trois colonnes auraient été défini explicitement.
Le concept de grille est que le nombre d’éléments (ici, les articles) importe moins. On sait au préalable comment les éléments seront positionnés, c’est l’essentiel.
Pour quoi nommer des classes comme « article » ? C’est une façon de désigner les choses qui est très générique. Les éléments sont déjà nommés comme cela ou peuvent être désignés de la même manière.
#grid article h2 { }
C’est vrai qu’on pourrait s’en contenter - encore plus dans le contexte d’un petit test isolé comme celui-ci. Mais malgré tout peut être que je l’ai mal nommé ici. Sûrement que dans un vrai projet j’aurai nommé ma classe “article-preview” par exemple.
Par contre l’inconvénient de la méthode est que tu proposes est que ça va augmenter de manière assez forte la spécificité de ton sélecteur CSS. Du coup si demain tu as besoin de surcharger la classe pour une raison ou une autre ça risque de te compliquer la tâche. Ça devient aussi plus facile de repérer quel code n’est plus utilisé et peut être supprimé au cours de l’évolution d’un projet.
La méthode que j’ai utilisé ici est https://getbem.com/introduction/
Je ne suis pas tellement convaincu par votre explication. En théorie, on pourrait définir la spécificité des règles CSS en appliquant des sélecteurs adéquats et en plaçant les déclarations CSS dans les règles appropriées. En cas de conflit dans les déclarations, il n’y a pas de surcharge, c’est par exemple la déclaration CSS la plus spécifique qui s’applique (le principe de la cascade : combiner des déclarations CSS). Je veux bien croire que les noms de classes sont exploités par des outils automatisés pour effectuer des analyses sémantiques mais je ne pense pas qu’en tant que tel les noms de classes aient véritablement un rôle sémantique (à mon avis, ce sont plutôt des indicateurs). Après, je pense que isolément, cela peut-être plus évident à lire avec des noms de classe spécifiques comme par exemple .article-preview
, dans une feuille de style. Dans le fichier HTML, c’est moche (parce que superflu). Graphiquement, je ne sais pas si on ne perd pas en corrélation sur la complémentarité CSS / HTML. C’est juste une intuition, je ne sais rien sinon, car je n’ai pas d’expérience.
Bjr.
Voici l’URL que j’ai sur le texte : “les images sont correctement compressées” http://localhost:5173/tutoriels/reseau-et-core-web-vitals/#optimisation-des-fichiers
;)
Oopsie ! Merci pour l’info !
C’est corrigé en faveur de https://www.julienpradet.fr/tutoriels/reseau-et-core-web-vitals/#optimisation-des-fichiers
Je vous prie de m’excuser. J’ai une question à poser en lien avec le sujet mais ce n’est peut-être pas approprié dans un commentaire à propos de l’article. Est-il raisonnable de vouloir positionner des éléments avec CSS ? Je me pose cette question à cause de la multitude de façons apparaissant sur le Web. D’aucunes sont considérées comme du raccommodage ce dont je partage l’avis sauf que je n’ai jamais rien réalisé. Cela m’exaspérerait de devoir façonner du code HTML pour faire une mise en page. N’est-ce pas contraire au principe de conception Web ? Pourtant, on peut observer cela chez des développeurs Web. À tel point que je me demande s’il ne faut pas créer des éléments en SVG à intégrer dans le HTML.
Tout est question de compromis et nous devons faire avec les outils qui nous sont à disposition. Tout passer en SVG entraine de nombreuses complications d’accessibilité, je ne pense pas que ce soit une meilleure solution.