Projet

Général

Profil

Development #45369

[Bloc de champs] Matérialiser visuellement un bloc de champs en FO

Ajouté par Mikaël Ates (de retour le 29 avril) il y a presque 4 ans. Mis à jour il y a environ 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
22 juillet 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Révision b7141845 (diff)
Ajouté par Frédéric Péters il y a environ 3 ans

backoffice: add class to have alternate backgrounds in fields blocks (#45369)

Révision d6c36f8a (diff)
Ajouté par Frédéric Péters il y a environ 3 ans

style: include clearfix on blocks zebra rows & unify remove/zebra (via #45369)

Historique

#1

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
#2

Mis à jour par Frédéric Péters il y a environ 3 ans

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.

#3

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

  1. 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`
  2. J'ai pas compris l'intérêt du `position: relative` sur `.BlockSubWidget`
  3. la clearfix pourrait être intéressant dans tous les cas sur `.BlockSubWidget`, je le mettrais pas défaut.
  4. 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.
  5. le outline n'a pas la même couleur que le background
  6. si tu veux juste ajouter un espace à gauche. Tu peux remplacer le outline par une combinaison `margin-left: -1em; padding: 1em;`
  7. 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.

#4

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".

#5

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.

#6

Mis à jour par Frédéric Péters il y a environ 3 ans

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).

#7

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).

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).

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.
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);
}
#9

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-* ?

#10

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)
#11

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
#12

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."

Formats disponibles : Atom PDF