Development #45369
[Bloc de champs] Matérialiser visuellement un bloc de champs en FO
0%
Description
Lorsque le bloc de champs est configuré avec la possibilité pour l'usager d'ajouter des blocs, cela pourrait rendre plus compréhensible ce qui est ajouté lorsque l'usager clique sur "ajouter", ou ce qui est supprimé (si #45368), en matérialisant le bloc (un contour, une couleur de fond, etc.).
Fichiers
Révisions associées
style: include clearfix on blocks zebra rows & unify remove/zebra (via #45369)
Historique
Mis à jour par Mikaël Ates (de retour le 29 avril) il y a presque 4 ans
- Sujet changé de [Bloc de champs] Matérialiser visuellement un bloc de champs à [Bloc de champs] Matérialiser visuellement un bloc de champs en FO
Mis à jour par Frédéric Péters il y a environ 3 ans
- Fichier 0001-scss-add-style-to-have-alternate-row-backgrounds-in-.patch 0001-scss-add-style-to-have-alternate-row-backgrounds-in-.patch ajouté
- Fichier zebra.png zebra.png ajouté
- Fichier blocks-validation-page.png blocks-validation-page.png ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Honnêtement pas tout à fait satisfait parce que compliqué pour diverses raisons, l'alternance basée sur la position dans le DOM alors qu'un premier élément d'affichage d'erreur peut apparaitre et demander l'inversion des sélecteurs, puis comme il n'y a pas vraiment d'espace à côté des bords de champs, ce que je contourne en utilisasnt outline qui vient avec ses propres problèmes (particulièrement il s'applique dans toutes les directions, pas moyen de l'avoir uniquement sur gauche/droite).
Reste que ça donne l'impression de fonctionner mais si ThomasJ veut y regarder, pour cette version ou une suivante, super.
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a environ 3 ans
Pas simple en effet.
Réflexion globale :
- Le code serait simplifié si sémantiquement les `.BlockSubWidget` sont des `fieldset` avec `legend`. Et on y gagne aussi en a11y.
Retours sur le code actuel
- Si le dernier bloc `widget-submit.list-add` est toujours présent, l'utilisation de `:nth_last-child` permet de partir du bas plutôt que du haut, ce qui t'évite de t'embêter avec la présence ou non d'un bloc `.error`
- J'ai pas compris l'intérêt du `position: relative` sur `.BlockSubWidget`
- la clearfix pourrait être intéressant dans tous les cas sur `.BlockSubWidget`, je le mettrais pas défaut.
- le background des odd devrait plutôt être non opaque (comme `background-color: rgba(0, 0, 0, 0.065);` l.688 pour les .responsive-tableWidget). Ça permet de s'adapter plus facilement aux themes qui n'ont pas un fond blanc.
- le outline n'a pas la même couleur que le background
- si tu veux juste ajouter un espace à gauche. Tu peux remplacer le outline par une combinaison `margin-left: -1em; padding: 1em;`
- pour le border sur la page de validation, j'appliquerais par défaut et simplement avec un selecteur voisin `+`, ça évite l'utilisation d'un `:not(:last-child)`.
.form-validation { .BlockSubWidget + .BlockSubWidget { border-top: 1px solid #ddd; } }
Et si tu utilises un background avec opacité réduite (point 4), ou même mieux, un fieldset avec legend, tu pourrais même t'en passer je pense.
Mis à jour par Frédéric Péters il y a environ 3 ans
la clearfix pourrait être intéressant dans tous les cas sur `.BlockSubWidget`, je le mettrais pas défaut.
Il y a le cas de blocs champs qu'on veut côte à côte, par exemple pour faire un champ "plusieurs fichiers".
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a environ 3 ans
Posséder un .clearfix permet juste au bloc de retrouver sa hauteur s'il possède des float, il peut toujours être un float lui-même.
Exemple: https://codepen.io/Sacripant/pen/VwmpbeV
Je ne vois pas de problème dans le cas de 2 blocs de champs cote à côte.
Mis à jour par Frédéric Péters il y a environ 3 ans
- Fichier Capture d’écran de 2021-02-15 16-30-40.png Capture d’écran de 2021-02-15 16-30-40.png ajouté
- Fichier Capture d’écran de 2021-02-15 16-30-35.png Capture d’écran de 2021-02-15 16-30-35.png ajouté
- Fichier 0001-scss-add-style-to-have-alternate-row-backgrounds-in-.patch 0001-scss-add-style-to-have-alternate-row-backgrounds-in-.patch ajouté
Le code serait simplifié si sémantiquement les `.BlockSubWidget` sont des `fieldset` avec `legend`. Et on y gagne aussi en a11y.
Ça remonterait trop haut vers quixote, je laisse ça de côté sans même poser de question.
Si le dernier bloc `widget-submit.list-add` est toujours présent, l'utilisation de `:nth_last-child` permet de partir du bas plutôt que du haut, ce qui t'évite de t'embêter avec la présence ou non d'un bloc `.error`
Il n'est pas nécessairement toujours présent (par exemple il n'est pas présent sur la page de validation).
le background des odd devrait plutôt être non opaque (comme `background-color: rgba(0, 0, 0, 0.065);` l.688 pour les .responsive-tableWidget). Ça permet de s'adapter plus facilement aux themes qui n'ont pas un fond blanc.
Ok.
le outline n'a pas la même couleur que le background
En effet, je ne voyais même pas la différence...
si tu veux juste ajouter un espace à gauche. Tu peux remplacer le outline par une combinaison `margin-left: -1em; padding: 1em;`
Avoir du padding fait que soudainement des marges se mettent à entrer en jeu et déplacer les choses davantage encore; ça ne se voit pas ici parce que la marge est neutralisée via div.widget:last-child { margin-bottom: 0 } mais ça apparait quand le dernier élément devient le bouton de suppression de ligne. Je ne sais pas faire le sélecteur "pas :last-child mais juste le dernier div.widget", ça existe ?
pour le border sur la page de validation, j'appliquerais par défaut et simplement avec un selecteur voisin `+`, ça évite l'utilisation d'un `:not(:last-child)`.
ok.
Je ne vois pas de problème dans le cas de 2 blocs de champs cote à côte.
Tu peux faire ton codepen avec le vrai code ? Parce que je n'invente pas; cf captures.
Après je peux aussi tout à fait me dire que de toute façon l'alternance de couleur est de toute façon à utiliser uniquement sur des lignes full, et ignorer ça.
Patch attaché avec tous les commentaires ici mais pour avancer ensuite sur le bouton "supprimer" il faudrait résoudre le « Je ne sais pas faire le sélecteur "pas :last-child mais juste le dernier div.widget", ça existe ? ». (sinon retourner sur outline).
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a environ 3 ans
Ça remonterait trop haut vers quixote, je laisse ça de côté sans même poser de question.
Ok, c'est triste.
Tu peux faire ton codepen avec le vrai code ? Parce que je n'invente pas; cf captures.
Inutile, je n'avais pas anticipé que c'est le .widget qui possède .grid-* et non pas son parent .BlockSubWidget. En gros, tu cherches à positionner des blocs de champs côte à côte en plaçant une class .grid-* sur le seul widget qu'il possède. C'est tordu, mais en effet, ça marche (à la seule condition que le bloc de champ ne possède qu'un seul widget).
Non, je ne connais pas de selecteur de ce genre. Et il serait inefficace si la dernière ligne du bloc était composé de 2 widgets en grid.Patch attaché avec tous les commentaires ici mais pour avancer ensuite sur le bouton "supprimer" il faudrait résoudre le « Je ne sais pas faire le sélecteur "pas :last-child mais juste le dernier div.widget", ça existe ? ». (sinon retourner sur outline).
Alors je te fais une nouvelle proposition :
- laisser le margin bottom sur les widgets;
- Ajouter visuellement une bordure en left et top à l'aide d'un box-shadow
.BlockSubWidget:first-child ~ .BlockSubWidget:nth-child(even) { background: hsla(0, 0%, 0%, 0.05); box-shadow: -0.5em -0.5em 0 .5em hsla(0, 0%, 0%, 0.05); }
Mis à jour par Frédéric Péters il y a environ 3 ans
- Fichier Screenshot_2021-02-16 Clapotis-les-Canards - Auquo - multi strings(1).png Screenshot_2021-02-16 Clapotis-les-Canards - Auquo - multi strings(1).png ajouté
- Fichier Screenshot_2021-02-16 Clapotis-les-Canards - Auquo - multi strings.png Screenshot_2021-02-16 Clapotis-les-Canards - Auquo - multi strings.png ajouté
- Fichier 0001-scss-add-style-to-have-alternate-row-backgrounds-in-.patch 0001-scss-add-style-to-have-alternate-row-backgrounds-in-.patch ajouté
Voilà parti et simplifié là-dessus, ça donne il me semble ok, même la petite embardée sur la gauche sur la page de validation on peut se dire que c'est un effet de style volontaire.
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a environ 3 ans
- Statut changé de Solution proposée à Solution validée
J'ai retesté ma proposition du box-shadow d'hier et en fait elle n'est pas mieux que ta solution initiale en outline.
Un outline fonctionne même mieux en mobile (là on est ras l'input sur la gauche).
Je te laisse décider. Je valide.
Dernier truc, est-ce qu'on laisse cette class pk-* dans bulk ou on la déplace dans library avec les autres class pk-* ?
Mis à jour par Frédéric Péters il y a environ 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit b5dac6b5059c51a9182ecf3e3307029eeb0decc9 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri Dec 18 15:47:56 2020 +0100 scss: add style to have alternate row backgrounds in fields blocks (#45369)
Mis à jour par Frédéric Péters il y a environ 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Frédéric Péters il y a environ 3 ans
Dans les différentes réécritures finalement le clearfix a été zappé alors qu'il est bien nécessaire; je viens de le pousser et je me fixe sur ce que j'écrivais : "tout à fait me dire que de toute façon l'alternance de couleur est de toute façon à utiliser uniquement sur des lignes full, et ignorer ça."
backoffice: add class to have alternate backgrounds in fields blocks (#45369)