28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous,

Je suis confrontée à une problématique pour laquelle j'ai peu d'espoir qu'il existe une solution, mais sait-on jamais.
J'ai une série de plusieurs blocs (ce nombre de blocs variera selon mes pages), mettons 7 pour mon exemple. Ces blocs ont tous la même largeur. Largeur qui varie selon la taille de l'écran. Avec les media-queries, au-dessus d'une certaine largeur mes blocs sont à 25% (donc 4 par ligne), puis je les passe à 50% entre deux largeur (donc 2 par ligne), puis 100% en-dessous d'une certaine largeur (1 par ligne, principalement sous smartphone). Jusque là, tout va bien !
Chacun de ces blocs possède une bordure grise. Du coup, comme la quantité de contenu de ces blocs varie, on voit bien que la hauteur des blocs n'est pas la même, et c'est un peu brouillon. Pour pallier à ça, j'avais utilisé la propriété table-cell. Ainsi tous mes blocs, peu importe le contenu, font la même hauteur, et on a des blocs de hauteur uniforme.
Tout le monde suit ?
Et c'est là que ça coince, parce que du coup, en forçant mes blocs à réagir comme un tableau, ils restent tous sur la même ligne, peu importe la taille de l'écran. J'en ai donc 7 par ligne quoiqu'il arrive.
Je n'arrive donc pas à trouver la solution qu'il faut pour avoir à la fois des blocs à hauteur uniforme, et des blocs qui réagissent de manière responsive, en passant à la ligne selon la taille de l'écran.

J'ai préféré expliqué le topo plutôt que de mettre du code, mais si vous préférez un exemple concret, je vous ferai ça.

Précision : ce contenu sera dans un editeur de texte de l'admin, et donc accessible au client pour qu'il puisse modifier les textes. Je veux donc rester au maximum sur du CSS et non du javascript.

Un grand merci d'avance !
Bonsoir.

Le mieux, je pense, est que vous utilisiez Flexbox... Les hauteurs de chaque ligne seront différentes.

Smiley smile
Merci à tous les deux pour votre temps. Je me suis donc très très mal exprimée Smiley smile

Alors j'ai rapidement fait une démo en html/css (oui css imbriqué, juste pour la démo) : http://www.ijinan.org/tests/test.html

Il y a les trois cas que je rencontre, et aucun ne convient. Visuellement, c'est le second cas que je cherche à obtenir, mais il nécessite que j'indique une hauteur précise, alors que la hauteur ne sera jamais fixe.

Je vous laisse me dire si c'est plus clair ainsi.
Modérateur
Bonjour,

c'est un cas d'école de flex:


ul {
  display: flex;
  flex-flow: row wrap;
}


devrait faire ton bonheur ! Smiley smile
Meilleure solution
Bonjour.

Humm... si j'ai bien suivi, vous voudriez que les hauteurs des différentes lignes créées par Flexbox soient identiques...
https://codepen.io/Zelena/pen/jwWyOL

Ce n'est possible qu'avec Gridlayout, je pense. Vous pouvez vous "amuser" avec en utilisant @supports...

Smiley smile
Bonjour à tous,

La solution de Kustolovic a parfaitement fonctionné ! Je n'en reviens pas qu'en rajoutant seulement ces deux petits lignes, ça résout tout ! Un immense merci ! Je ne connaissais pas bien les propriété flex, je vais m'y pencher plus sérieusement, ça a l'air très utile pour des choses toute simple.

En tout cas mon problème est résolu, encore merci !