28113 sujets

CSS et mise en forme, CSS3

Bonjour,

Sur un autre topic, en marge de la critique de mon site, Parsimonhi m'a posé un petit défi à relever. Celui-ci est très intéressant, mais comme il était en marge du topic je le poste ici pour qu'il soit un sujet à part entière :
parsimonhi a écrit :
Voici donc un problème général (qui peut avoir un intérêt pour pas mal de gens) : l'affichage de résultats d'une compétition à élimination directe.

En voici un exemple : http://jeudego.org/_php/affiche_asian_TV_Cup.php

Il y a aussi ce genre de "tableaux" de résultats sur les sites sportifs bien évidemment (en particulier ceux qui traitent du tennis). Mais la qualité est très aléatoire, d'où un intérêt supplémentaire à bien traiter ce problème.

Cela peut aussi servir en généalogie.

Pour en revenir au lien que j'ai donné, dans chaque case, on a le nom des joueurs et un numéro, mais tu peux oublier ce qu'il y a dans les cases (on pourrait y ajouter un drapeau de pays, une photo, etc.). La taille de chaque "case" est inconnue à priori. Il suffit que la solution fonctionne avec des "cases" contenant ce que tu veux. Par contre, il faut faire apparaitre une ligne qui relie certaines "cases", matérialisant un arbre. Cerise sur le gâteau, l'utilisation de canvas pour tracer l'arbre n'est pas souhaitée.

Il peut y avoir des blancs (c'est à dire que l'arbre n'est pas complet, des joueurs sont exemptés, en particulier au début de la compétition).

Dans la solution, il faudrait prévoir un bandeau pour le haut (le menu de gauche et le bas de page, on peut les oublier). Ce n'est pas le plus dur.

Pour le html, tu peux partir soit sur celui du lien que j'ai donné en exemple (tu ne gardes que le contenu bien entendu, des <div> donc) soit sur l'idée d'une liste avec des ul et des li, éventuellement sur plusieurs niveaux d'imbrication (si ça peut t'arranger).

Et il faut bien évidemment que ce soit lisible sur un téléphone ! Smiley cligne

Est-ce que ça te va, comme exemple ?


Donc ma solution (elle n'est pas parfaite et peut encore être améliorée) : CodePen, Organizational Chart.

Avantages :
- full css (comme exigé dans le problème)
- elle part d'un ensemble de listes (non imbriquées, c'était plus simple à intégrer, et aussi plus clair pour l'utilisateur je pense)
- le graph est donc sémantique
- et donc aussi : pas de soupe de div (c'était mon objectif perso)
- très facile d'utilisation, on entoure toutes les listes avec une classe et hop : on a le graphique
- elle respecte la demande des items de largeur indéfinies (et on met ce que l'on veut dedans)
- tous les items doivent être présents, mais s'ils ne sont pas renseignés ils n'apparaitrons pas sans pour autant désorganiser le graphique

Inconvénients (tous liés à la difficulté de maîtrise des barres horizontales obtenues de par les pseudo-éléments) :
- elle n'est responsive que jusqu'à un certain point (au-delà on pourrait passer en liste simple ?)
- la grille fonctionne que pour un graph "quart de finale" pour l'instant alors que sur le principe elle pourrait aller beaucoup plus loin (toujours à cause des barres horizontales qui seraient pourtant faciles à contrôler avec des div en plus)
- de même le graph est sensible au contexte (disposera-t-il ou non d'une largeur 100% ?)
Voilà pour l'instant en l'état actuel de ma réflexion...
Modifié par Olivier C (28 Feb 2016 - 08:24)
Modérateur
Bonjour,
Olivier C a écrit :
Donc ma solution (elle n'est pas parfaite et peut encore être améliorée) : CodePen, Organizational Chart.
C'est pas mal du tout. Il faudrait cependant améliorer le cas où les cases sont étroites : j'ai essayé de remplacer le nom des pays par un code pays sur 2 ou 3 lettres (dans le but d'avoir une affichage qui tienne sur de petites largeurs de fenêtres), et dans ce cas, les lignes ne sont plus jointives. (toujours dans le but d'avoir une affichage sur fenêtre étroite, certains remplacent le contenu des cases par un numéro, et en bas de page, on fait une liste en indiquant à quoi se réfèrent ces numéros : pour ce genre d'arbre aussi, il est intéressant de faire fonctionner l'ensemble avec des cases étroites).
Raphael a écrit :
Ce genre de visuels existe déjà sur Codepen :
- http://codepen.io/jbeason/pen/Wbaedb
- http://codepen.io/aronduby/pen/qliuj
- etc.
Merci pour les liens. Effectivement, il y a de quoi décortiquer. Je crois que je ne vais pas avoir assez de ce dimanche pour analyser tout ça ! Smiley smile
Olivier C a écrit :
Certes, mais c'est pour le fun. Ma dernière version améliorée et qui fonctionne jusqu'en 16ème de finale : CodePen
Joli !

Amicalement,
Raphael a écrit :
Ce genre de visuels existe déjà sur Codepen :
- http://codepen.io/jbeason/pen/Wbaedb
- http://codepen.io/aronduby/pen/qliuj
- etc.

@Raphael. Je suis allé voir ces deux exemples plus en détail : aucun d'entre eux ne respecte les critères proposés par Parsimonhi. Soit il n'y a pas d'ancres (donc, forcément, c'est plus facile), soit il y a de la divite aigüe (donc on oublie la facilité d'utilisation par une personne lambda) avec des classes "en veux-tu en voilà"... D'emblée mon objectif était de tirer partit de flexbox, et en particulier de justify-content space-around, pour le positionnement, ensuite il ne restait plus qu'à exploiter les pseudo-éléments pour faire des traits...

@parsimonhi : Certains se détendent en jouant au sudoku (où plus spécifiquement ici au jeu de Go !), moi j'aime me prendre la tête avec du CSS... Je vais encore améliorer le graph, juste pour le fun.
Modifié par Olivier C (28 Feb 2016 - 10:41)
Modérateur
Bonjour,

C'est bien, tout ça. Et avec un seul tout petit calc(100%+1em). Si tu pouvais t'en passer de celui-là aussi, ce serait encore mieux, par exemple en le remplaçant par (j'ai peut-être pas tout vu cependant) :
margin-left:1em;
left: 100%;


Si tu continues comme ça, tu vas finir par pouvoir proposer ta solution à lequipe.fr Smiley cligne

Amicalement,
Modifié par parsimonhi (28 Feb 2016 - 15:52)
parsimonhi a écrit :
Si tu pouvais t'en passer de celui-là aussi, ce serait encore mieux...

J'ai modifié le code en le remplaçant par :
right: -1em;

Et en ajoutant un box-sizing border-box sur les pseudo-éléments :
CodePen

[Edit] Aller : encore une micro optimisation pour la route (un graph plus aéré, j'y ai pensé ce matin) et c'est dans la boite : CodePen
Modifié par Olivier C (29 Feb 2016 - 07:54)
Modérateur
Bonjour,

J'ai picoré dans tes différentes solutions quelques idées et j'ai mis à jour http://jeudego.org/_php/affiche_asian_TV_Cup.php (la feuille de style contenant ce qu'il faut est asian_TV_Cup.css).

Je n'ai pas mis de flex (bien que je trouve l'idée excellente) pour deux raisons :
1) je préfère un rendu où les différentes colonnes viennent se chevaucher progressivement quand on réduit la largeur de la fenêtre (plutôt que d'avoir des points de rupture) et je n'ai pas réussi à produire le même effet avec du flex. Mais c'est vraiment un point de détail car j'ai par ailleurs déjà des points de rupture notamment pour cacher le menu.
2) le flex ne marche pas sur mon vieil iphone. Or là, c'est plus ennuyeux car j'ai besoin que ça marche sur cette machine (j'ai à la place utilisé des position:absolute, bien moins élégants que ta solution, mais qui dans mon cas donne un résultat acceptable). Je n'avais pas mis cette contrainte dans la question initiale volontairement. Supporter les anciens navigateurs n'est pas un objectif dans le cadre de l'exercice (à chacun de se débrouiller s'il le souhaite).

Le look est quasi identique a ce que j'avais avant, mais précédemment, ça débordait quand j'utilisais mon iphone à cause de la présence de nombreux calc(). Grâce à toi, j'ai quasi réussi à m'en passer (il n'en reste qu'un dont l'effet est de plus mineur).

Merci de t'être intéressé au sujet.

Amicalement,