Est-il possible pour la flexion des éléments à aligner étroitement les éléments au-dessus d'eux?
C'est, en effet, la mise en page Pinterest. Cependant, les solutions trouvées en ligne sont enveloppés dans des colonnes, ce qui signifie que le conteneur, par inadvertance, se développe horizontalement. C'est pas la mise en page Pinterest, et il ne fonctionne pas bien avec chargées dynamiquement le contenu.
Ce que je veux faire est d'avoir un tas d'images de largeur fixe et asymétrique hauteur, disposées à l'horizontale, mais l'emballage dans une nouvelle ligne lorsque les limites de la largeur fixe conteneur sont remplies:
Peut flexbox cela, ou dois-je avoir recours à un JS solution comme la Maçonnerie?
Il n'est pas clair ce que l'ordre de vos éléments et il est tout à fait important. Pourriez-vous ajouter des numéros à eux?
Je pensais à ce sujet, mais il pourrait peut-être limiter les réponses possibles. Je sais que les trois premiers serait de 1, 2, 3 de gauche à droite, mais je ne m'en soucie pas vraiment si 4 est placé au-dessous de 1, 2 ou 3. (Si la position verticale est le critère, il devrait être inférieur à 3; si c'est le placement à l'horizontale, il doit être inférieur à 1.) Quelque chose se passe!
Pas de flexbox est pas la bonne solution pour cette mise en page, vous devez utiliser la maçonnerie ou dans le pire des cas css colonnes, qui est similaire à ma réponse à cette question, de sorte qu'il peut vous aider stackoverflow.com/questions/34417059/...
stackoverflow.com/questions/8470070/...
Un peu en retard à la fête, voici le
Je pensais à ce sujet, mais il pourrait peut-être limiter les réponses possibles. Je sais que les trois premiers serait de 1, 2, 3 de gauche à droite, mais je ne m'en soucie pas vraiment si 4 est placé au-dessous de 1, 2 ou 3. (Si la position verticale est le critère, il devrait être inférieur à 3; si c'est le placement à l'horizontale, il doit être inférieur à 1.) Quelque chose se passe!
Pas de flexbox est pas la bonne solution pour cette mise en page, vous devez utiliser la maçonnerie ou dans le pire des cas css colonnes, qui est similaire à ma réponse à cette question, de sorte qu'il peut vous aider stackoverflow.com/questions/34417059/...
stackoverflow.com/questions/8470070/...
Un peu en retard à la fête, voici le
answer to a similar question
par Evan Sharp, auteur de l'Pinterest script et co-fondateur de Pinterest, en expliquant la logique.OriginalL'auteur Guybrush Threepwood | 2015-12-27
Vous devez vous connecter pour publier un commentaire.
Flexbox est un "1-dimensions", un système de mise en page: Il peut aligner les éléments le long des lignes horizontales OU verticales.
Un vrai système de grille est "en 2 dimensions": Il peut aligner les éléments le long des lignes horizontales ET verticales. En d'autres termes, les cellules peuvent s'étendre sur des colonnes et des lignes, qui flexbox ne peut pas faire.
C'est pourquoi flexbox a une capacité limitée pour la construction de grilles. C'est aussi une raison pour laquelle le W3C a développé un autre CSS3 technologie, de la Grille de Mise en page (voir ci-dessous).
Dans un conteneur flex avec
flex-flow: row wrap
, flex éléments doivent envelopper à nouveau lignes.Cela signifie que un flex élément ne peut pas envelopper en vertu d'un autre article dans la même ligne.
Avis ci-dessus comment div #3 enveloppements ci-dessous div #1, la création d'une nouvelle ligne. Il ne peut pas envelopper sous div #2.
Par conséquent, lorsque les éléments ne sont pas le plus haut de la ligne, espace blanc reste, la création disgracieuses lacunes.
crédit image: Jefree Sujit
column wrap
SolutionSi vous passez à
flex-flow: column wrap
, flex éléments de la pile à la verticale et d'un grille-comme la mise en page est plus réalisable. Cependant, une colonne de direction conteneur a trois problèmes potentiels dès le départ:Comme un résultat, une colonne de direction conteneur peut ne pas être réalisable dans de nombreux cas.
D'Autres Solutions
Ajouter des conteneurs
Dans les deux premières images ci-dessus, considérez d'emballage des articles 2 et 3 dans un récipient séparé. Ce conteneur peut être un frère ou une sœur à l'article 1. Fait.
Voici un exemple détaillé: Calculatrice clavier avec flexbox
Un seul point négatif à souligner: Si vous êtes désireux d'utiliser le
order
propriété ré-organiser votre mise en page (comme dans les media queries), cette méthode peut éliminer cette option.Desandro Maçonnerie
Comment créer un Site qui Fonctionne Comme Pinterest
CSS de la Grille de Mise en page du Module de Niveau 1
De la grille de Mise en page exemple: CSS-seulement de maçonnerie mise en page, mais avec des éléments commandés à l'horizontale
OriginalL'auteur Michael_B
Ce que vous voulez peut être réalisé dans des
3de 2 manières, CSS sage:1.
flexbox:2. CSS colonnes
(cette solution a le très soignée avantage de
de la colonne span
- très pratique pour les titres). L'inconvénient est de commandes d'articles dans les colonnes (première colonne contient le premier tiers de l'articles et ainsi de suite...). J'ai fait un jsFiddle pour cela.3. Maçonnerie plugin
positionnement absolu après le calcul de rendu d'élément de tailles, via JavaScript (maçonnerie plugin).
Vous avez raison à propos de #1. Je n'étais pas capable de le faire fonctionner à l'aide de flex. Pas sûr de ce que tu veux dire par "mauvaise prise en charge du navigateur". Pouvez-vous m'indiquer un certain nombre, s'il vous plaît? Je pense que #2 a des problèmes pour moins de 5% des utilisateurs. Corrigez-moi si je me trompe.
Si vous regardez l'Utilisation Relative des statistiques, le système de réseau n'est pas prise en charge pour un grand nombre d'utilisateurs, donc c'est probablement pas prêt à la production de encore. C'est une excellente solution si, merci pour ça. caniuse.com/#search=grid
Fascinante. Pouvez-vous repérer les différences entre grille et colonnes?
lol, c'était du sarcasme? En tout cas, vous avez raison.
OriginalL'auteur Andrei Gheorghiu