JeuWeb - Crée ton jeu par navigateur
La plus simple grille SCSS - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : La plus simple grille SCSS (/showthread.php?tid=6834)



La plus simple grille SCSS - t.bodeux - 03-01-2014

Bonjour,

Cela faisait assez longtemps que je n'avais pas écrit d'article sur le site. Aujourd'hui, je vais vous présentez un système de grille CSS utilisant la puissance de l'HTML5 et du CSS3 ainsi que de ses nouveaux sélecteurs.

1. Une grille CSS c'est quoi ?

Les grilles sont de plus en plus utilisées dans le domaine du web. Elles permettent de mettre en place un système de présentation clair et modulable tout en gardant une cohérence dans celle-ci. La taille de celle-ci varie selon le site ou l'envie. Pour ce test nous utiliserons la plus commune: celle de 960px.

2. Et si on passait à SCSS ?

Le SCSS (ou SASS) est un langage qui nécessite compilation pour devenir du CSS. Il permet, avec une syntaxe similaire, d'ajouter des fonctions étendues comme le nesting, l'interpolation, des fonctions de modification des couleurs et plein d'autres choses. Je vous invite à consulter leur site SITEHERE pour plus d'informations.

3. Le code et son utilisation:

// Défini la taille de notre grille.
$grid-width: 960px;

// Flex-Grid.
[grid-role~="row"] {
display: flex; margin-left: auto; margin-right: auto; width: $grid-width;
& > & {
[grid-role~="column"]:first-child { margin-left: 0; }
[grid-role~="column"]:last-child { margin-right: 0; }
}
& > [grid-role~="column"] {
margin-left: 10px; margin-right: 10px;
@for $i from 1 through 12 { &[column-size="#{$i}"]{ flex: $i; }}
}
}
<div grid-role="row">
<div grid-role="column" column-size="4">Collonne de 4 rangées</div>
<div grid-role="column row" column-size="6">
<div grid-role="column" column-size="2">2:Start</div>
<div grid-role="column" column-size="2">2</div>
<div grid-role="column" column-size="2">2:End</div>
</div>
<div grid-role="column" column-size="2">2 rangées</div>
</div>

4. Example en Live:

Préférez un navigateur moderne comme Chrome ou Safari !
http://sassmeister.com/gist/8236510

5. Dernier petit mot:

Il s'agit d'un exemple très simple, il faut bien sur rajouter les préfixe pour que ce soit valide entre les différents navigateurs. J'ai écrit ceci pour vous montrer qu'il existe des solutions simple à la portée de tous grâce aux nouvelles fonctionnalités parfois oubliées de CSS3 !

6. Mise-à-jour:

- Changement des selecteurs, auto-nesting de la grille.


RE: La plus simple grille SCSS. - Ter Rowan - 03-01-2014

hello
merci !
j'ai appris flex et role que je ne connaissais pas mais après réflexion..

j'ai quelques questions qui peuvent être des critiques aussi à voir, je ne suis pas spécialiste (n'y vois en aucun cas une agression, je suis content d'avoir appris deux trucs déjà)

pourquoi utiliser des rôles que tu appelles row et column. Si ce sont bien des lignes et des colonnes, autant utiliser des <table>. Role doit traduire humainement quelque chose, là il me semble, tu t'en sers comme de pseudo classes d’affichage (donc sans sens humain) pourquoi ne pas utiliser des classes directement ?

une remarque sur le « Attention la somme des span doit valoir 12 »
Ce n’est pas le cas de ton code, il faut juste que chaque span ait une valeur comprise entre 1 et 12 (car ta boucle for s’arrête à 12) mais on pourrait très bien avoir trois div avec 12 12 et 1 comme span. C’est là un point fort de flex par rapport aux autres grilles : on n’a pas à réfléchir au calcul du découpage, c’est le navigateur qui s’en occupe en fonction des pondérations (flex) de chaque élément


RE: La plus simple grille SCSS. - Xenos - 03-01-2014

Table/thead/tbody/tfoot/tr/td/th sont des balises html sémantiques, et ne sont à utiliser que si les données sont tabulaires (des données dépendantes de deux paramètres, des matrices, etc...)

Parfois, comme ici, on aimerait une apparence de "tableau" sans que les données soient véritablement tabulaires, et en ce cas, l'utilisation d'un attribut (ici, @role) est à privilégier, sinon un lecteur d'écran ou un robot d'indexation considèrerait que le site est un tableau géant, alors qu'en pratique, il s'agit juste d'une méthode de présentation.

Mais je suis d'accord: j'aurai également choisi une @class puisqu'il s'agit de présentation, et non pas créé un nouvel attribut @role (d'autant que cela rend la page non-conforme à html5, les attributs persos devant être précédés d'un "data-" il me semble, donc, @data-role serait à utiliser).

Et idem pour l'attribut span:
  • Si c'est la structure de la page → balise html (table)
  • Si c'est des données sémantiques → Texte dans la balise (textNode) ou attribut @data-*
  • Si c'est de la présentation → attribut @class
  • Si c'est pour identifier l'objet de façon unique → attribut @id

Et, oui, faire des @class="row span-11", c'est lourd voir moche, mais c'est le plus propre. D'ailleurs, dans un tel cas, "span" est un peu trop vague à mon gout...

Sinon, flex est vraiment terrible en CSS3 Smile


RE: La plus simple grille SCSS. - Ter Rowan - 03-01-2014

(03-01-2014, 06:16 PM)Xenos a écrit : Table/thead/tbody/tfoot/tr/td/th sont des balises html sémantiques, et ne sont à utiliser que si les données sont tabulaires (des données dépendantes de deux paramètres, des matrices, etc...)

Parfois, comme ici, on aimerait une apparence de "tableau" sans que les données soient véritablement tabulaires, et en ce cas, l'utilisation d'un attribut (ici, @role) est à privilégier, sinon un lecteur d'écran ou un robot d'indexation considèrerait que le site est un tableau géant, alors qu'en pratique, il s'agit juste d'une méthode de présentation.

Mais je suis d'accord: j'aurai également choisi une @class puisqu'il s'agit de présentation, et non pas créé un nouvel attribut @role (d'autant que cela rend la page non-conforme à html5, les attributs persos devant être précédés d'un "data-" il me semble, donc, @data-role serait à utiliser).

attention, je dis cela car role veut dire quelque chose d'après ARIA, ca indique au "lecteur" ce que représente la balise

et c est là où je dis que ca revient à faire des tables :

au lie de dire balise table,balise ligne, balise colonne etc... on dit au "lecteur" cette div est une ligne, cette div est une colonne, etc...

pour cela que je propose d'utiliser des classes, car effectivement il n y a pas de sens à parler de table (avec les bonnes balises ou avec les roles)


RE: La plus simple grille SCSS - niahoo - 04-01-2014

Personnellement je préfère une meilleure approche quand on utilise un compilateur CSS : L'article est en anglais, il parle uniquement de Bootstrap mais les concepts sont valide dès lors qu'on utilise un tel compilateur : Please stop embedding Bootstrap classes in your HTML!

Cela permet d'avoir une approche responsive.


RE: La plus simple grille SCSS - t.bodeux - 05-01-2014

Coucou, pour ce qui est de la taille qui vaut 12, Simplement car les tailles du fichier CSS s'arrête la Smile !
Pour ce qui est de l'utilisation de @role, c'est simplement car je préfère cette notation que d'utiliser @class qui est réservé pour ce qui est de la présentation, C'est une question d'habitude de notation Smile


RE: La plus simple grille SCSS - niahoo - 05-01-2014

Je ne comprends pas vraiment en quoi la largeur et la disposition des éléments n'est pas de la présentation ...


RE: La plus simple grille SCSS - Ter Rowan - 05-01-2014

(05-01-2014, 07:57 PM)t.bodeux a écrit : Coucou, pour ce qui est de la taille qui vaut 12, Simplement car les tailles du fichier CSS s'arrête la Smile !
j'entends bien, simplement il n y a rien qui impose que la somme soit de 12 (ie je peux faire 11, je peux faire 3+3+4 voire 3+6+7+3 ca marchera aussi) il faut juste corriger le commentaire


pour le @role de deux choses l'une (enfin, à mon sens)

soit c'est uniquement visuel, et dans ce cas ce n'est pas un @role mais un @class (cf réponse de niahoo)
soit c'est une organisation de la donnée et tu veux l'expliquer aux outils d'assistance, alors autant utiliser les balises concernées (@table et suite)

je ne vois pas ce que ca pourrait être d'autres (vu l'utilisation, ici un "bootstrap" d'affichage, et vu les noms des rôles columns et rows)


RE: La plus simple grille SCSS - t.bodeux - 05-01-2014

Je suis daccord avec ce que vous avancez, on pourrait changer cela en @grid-role ou autre mais je n'aime aps avoir du code html qui ressemble a dur <div class="header fixed row column full span-6"> Je trouve plus equivoque un <div class="header fixed full" grid-role="row column" column-size="6">

Ca apporte plus de clarté à mon sens Smile


RE: La plus simple grille SCSS - t.bodeux - 06-01-2014

J'en profite pour en faire une petite mise-à jour sémantique et fonctionnelle Smile

Le margin des éléments de grille imbriquée sont automatiquement ajusté Smile