Flex-zone: Aligner la dernière ligne de la grille
J'ai un simple flex-zone de mise en page avec un conteneur comme:
.grid {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
}
Maintenant, je veux les éléments de la dernière ligne à être aligné avec les autres. justify-content: space-between;
doit être utilisé car la largeur et la hauteur de la grille peut être ajusté.
Actuellement, il ressemble à
Ici, je veux de l'élément en bas à droite pour être dans la "colonne du milieu". Quelle est la façon la plus simple de le réaliser? Voici un petit jsfiddle qui montre ce comportement.
CSS:
.exposegrid {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
}
.exposetab {
width: 100px;
height: 66px;
background-color: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(0, 0, 0, 0.4);
border-radius: 5px;
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
margin-bottom: 10px;
}
HTML:
<div class="exposegrid">
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
</div>
- Dupliquer: stackoverflow.com/questions/16377972/...
- De vérifier ma solution ici, je pense qu'il fonctionne nice sans hack, juste maths: stackoverflow.com/questions/18744164/...
- Sinon, l'on pourrait utiliser la plus récente grille css du module - qui n'ont pas ce problème
- Ciblage flex éléments sur la dernière ligne
- J'ai ajouté un générique JS solution pour les cas où la largeur de l'enfant est variable, rendant ainsi le nombre d'éléments sur la ligne variable.
- utiliser align-contenu: flex-start; au lieu de justifier-contenu: l'espace entre les deux; il sera également distribue l'espace de façon uniforme. plus de détails dans la réponse: stackoverflow.com/questions/18744164/...
Vous devez vous connecter pour publier un commentaire.
Ajouter un
::after
qui autofills l'espace. Pas besoin de polluer votre code HTML. Voici une codepen montrant: http://codepen.io/DanAndreasson/pen/ZQXLXjjustify-content: space-between;
de.grid
et supprimé.grid:after
et il fonctionne de la même façon. Maintenant, si vous avez essayé quelque chose de comme ceci il rompt totalement. Avis de la largeur pour chaque ensemble de 4 ne pas ajouter jusqu'à 100%. Dans le OP fiddle les largeurs sont mis en px de sorte que votre solution de ne fonctionne pas cette situation.flex
de la valeur à un nombre élevé d'e.g1000
au lieu deauto
.space-between
. Cependant, lorsque j'ai mis leflex-basis
de.grid:after
à la même dimensionnement que les autres éléments de la grille (par point d'arrêt, écrasant par défaut ci-dessus/module de la base de code), la dernière ligne à étaler correctement. Semble fonctionner sur Safari, iOS, Firefox, Chrome (besoin de tester IE) et ma plus grande taille de la ligne est de 3 sur mon initiale de mise en œuvre.justify-content: center
?height: 1px
justify-content: space-between
. Cela fonctionne très bien pour moi si je donne le:after
la même largeur de tous les éléments de la grille comme la valeur de flex de base, et ne pas utiliser flex-auto comme ceci:&:after { content: ''; @include mf-tabletPortrait { flex-basis: 48%; } @include mf-tabletLandscape { flex-basis: calc(33% - 30px); } } }
{ content: "";flex: 0 0 32%;max-width: 480px;}
et j'ai changé le max-width avec media query changements pour que la grille était parfait à toutes les largeurs.space-between
haging de la ligne de justification. Lisse comme de la grille CSS mais ne fait pas de gâchis de la grille produit dans IE. J'ai toujours se dérouler commentaires et lu jusqu'à la fin TELLEMENT. Tout le temps il y, viennent les pierres précieuses comme celui-ci. Des acclamations. 🙂display: grid; gap: 20px; padding-top: 10px; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
Une technique serait d'insérer un certain nombre d'éléments supplémentaires (autant que le nombre max d'éléments jamais vous attendre à avoir dans une rangée), remis à zéro à la hauteur. L'espace est toujours divisé, mais superflu lignes effondrement de rien:
http://codepen.io/dalgard/pen/Dbnus
CSS:
HTML:
Dans l'avenir, ce qui peut être atteint grâce à l'utilisation de plusieurs
::après(n)
.::after(17)
?::after
ne semble pas être défini avec la syntaxe.::after
n'est jamais allé au-delà de inconséquents. Il est fait mention de quelque chose qui est proche, mais pas tout à fait ce que j'ai écrit ci-dessus, dans cette partie: w3.org/TR/css3-content/#inserting0:after
et une certaine marge est beaucoup mieux, plus vite et moins de code!Que d'autres affiches ont mentionné - il n'y a aucun moyen propre pour aligner à gauche de la dernière ligne avec flexbox (à moins que par la spécialisation actuelle)
Cependant, pour ce que ça vaut: Avec le Grille CSS de Mise en page du Module c'est étonnamment facile à produire:
Fondamentalement, le code se résume à ceci:
1) Faire de l'élément conteneur d'une grille contenant
2) Définir la grille avec auto colonnes de largeur de 100px. (Notez l'utilisation de auto-remplissage (comme revêtue de la
auto-fit
- qui (pour 1 ligne de mise en page) s'effondre vide de pistes à 0 causant les éléments à développer pour prendre le reste de l'espace. Cela aurait pour conséquence une justifier "l'espace entre" mise en page lorsque la grille a une seule ligne qui dans notre cas n'est pas ce que nous voulons. (découvrez cette démo pour voir la différence entre eux)).3) Définir les lacunes et les gouttières pour la grille de lignes et de colonnes - là, parce que vous voulez un "espace entre" mise en page - l'écart sera effectivement un écart minimum, car il va grandir en tant que de besoin.
4) Similaire à flexbox.
CSS:
HTML:
Codepen Démo (Redimensionner pour voir l'effet)
auto-fit
, il y avait un bug dans Chrome 57-60 (et les navigateurs basés sur le moteur, comme Samsung Internet 6.0) parce que la spécification a été un peu ambigu à l'époque. Maintenant, la spécification a été clarifiée et les nouvelles versions de google Chrome rendreauto-fit
correctement, mais les navigateurs avec de vieux moteur sont encore en usage, il vous faut donc être prudent avec cette valeur.:after
pseudo-élément peut conduire à des résultats indésirables dans les cas limites.Sans supplément de balisage, tout en ajoutant
::after
a fonctionné pour moi en spécifiant la largeur de la colonne.Avec le HTML comme ceci:
flex-basis: 10em
au lieu de largeur.Vous ne pouvez pas. Flexbox est pas un système de grille. Il n'a pas la langue des constructions à faire ce que vous demandez, au moins pas si vous êtes en utilisant
justify-content: space-between
. Le plus proche que vous pouvez obtenir avec Flexbox est d'utiliser la colonne de l'orientation, ce qui nécessite la définition explicite de la hauteur:http://cssdeck.com/labs/pvsn6t4z (note: les préfixes non inclus)
Cependant, il serait plus simple de n'utiliser que des colonnes, qui a un meilleur support et ne nécessite pas de réglage à une hauteur spécifique:
http://cssdeck.com/labs/dwq3x6vr (note: les préfixes non inclus)
Une solution possible est d'utiliser
justify-content: flex-start;
sur le.grid
conteneur, les restrictions de taille sur ses enfants, et les marges sur les approprié éléments enfants, selon le nombre de colonnes désiré.Pour un 3-colonne de la grille, le CSS de base devrait ressembler à ceci:
C'est une autre solution imparfaite, mais il fonctionne.
http://codepen.io/tuxsudo/pen/VYERQJ
Oui.! Nous pouvons, mais avec quelques requêtes de média & Maximum de colonnes sont prédéfinis.
Suis ici à l'aide de 4 colonnes. Vérifier mon code:
CSS:
HTML:
NOTE
1) Pas besoin d'en créer un enfant div. Il peut être n'importe quel autre tag 'img' r ce que vous voulez..
2) Si vous voulez plus de colonnes de régler les questions des médias et de maximum pas.des colonnes.
Si vous voulez une grille avec un peu d'espace entre les éléments et les éléments de départ sans aucun espace, ce simple solution fonctionne:
Si vous voulez la première 5px espace puis il suffit de supprimer la marge négative 🙂 Simple.
https://jsfiddle.net/b97ewrno/2/
La accepté de répondre, alors que bon, il provoque il n'y ait pas d'espace entre les éléments de la deuxième ligne..
Je sais qu'il y a beaucoup de réponses ici, mais.. la façon La plus simple de le faire est avec un
grid
au lieu deflex
etgrid template columns
avecrepeat
etauto fills
, où vous devez définir le nombre de pixels que vous avez donné à chaque élément,100px
de votre extrait de code.CSS:
HTML:
Si vous souhaitez aligner le dernier élément de la grille, utilisez le code suivant:
Grille récipient
Élément de la grille
Le truc est de mettre le max-width de l'élément égal au maximum de la largeur de la .carte réseau:après.
Démonstration en direct sur Codepen
Il est possible d'utiliser de "flex-start" et d'ajouter les marges manuellement. Cela nécessite un peu de math-piratage mais il est certainement facile de le faire et de le rendre facile à utiliser avec un préprocesseur CSS aime MOINS.
Voir, par exemple, MOINS de mixin:
Et puis il peut facilement être utilisé pour afficher une présentation de la grille souple:
Voici un exemple de
http://codepen.io/anon/pen/YyLqVB?editors=110
Cette version est la meilleure façon pour les blocs avec une largeur fixe:
http://codepen.io/7iomka/pen/oxxeNE
Dans d'autres cas - version de dalgard
http://codepen.io/dalgard/pen/Dbnus
CSS:
HTML:
Il y a un moyen sans flexbox, bien que vous devrez remplir les conditions suivantes. 1) Le conteneur a rembourrage. 2) les Articles sont de la même taille et que vous savez exactement combien vous voulez par ligne.
Le plus petit rembourrage sur le côté droit du conteneur permet le rembourrage supplémentaire à droite de chaque élément de la liste. En supposant que les autres éléments dans le même parent que les objets de la liste sont rembourrées avec de 0 à 5%, il doit être au même niveau avec eux. Vous pouvez également ajuster les pourcentages pour autant de marge que vous souhaitez ou de l'utilisation calculer px valeurs.
Bien sûr, vous pouvez faire la même chose sans le rembourrage sur le récipient à l'aide nth-child (IE 9+) pour supprimer la marge sur chaque troisième case.
À l'aide de flexbox et quelques requêtes de média, j'ai fait ce petit travail autour de: http://codepen.io/una/pen/yNEGjv (son très orthodoxe mais qui fonctionne):
J'ai fait un SCSS mixin pour elle.
C'est le codepen lien: http://codepen.io/diana_aceves/pen/KVGNZg
Vous avez juste à régler les éléments de la largeur en pourcentage et en nombre de colonnes.
J'espère que cela peut vous aider.
Voici un autre couple de scss mixin.
Ces mixin supposons que vous n'allez pas utiliser js plugins comme Isotopique (ils ne respectent pas le balisage html ordre, ainsi gâcher, avec css nième règles).
Aussi, vous serez en mesure de profiter pleinement d'entre eux en particulier si vous êtes à la rédaction de votre réceptif des points d'arrêt dans un premier mobile manière. Idéalement, vous allez utiliser flexbox_grid() sur le petit point d'arrêt et flexbox_cell() sur les points d'arrêt suivants. flexbox_cell() se charge de la réinitialisation déjà programmés les marges ne sont plus utilisés sur les gros points d'arrêt.
Et par la façon dont, aussi longtemps que vous avez correctement configuré votre conteneur des propriétés flex, vous pouvez également utiliser uniquement flexbox_cell() sur les articles, si vous en avez besoin.
Voici le code:
Utilisation:
Évidemment, c'est à vous de finalement mis en conteneur de remplissage/la marge/la largeur et de la cellule du bas des marges et la comme.
Espère que cela aide!
C'est assez hacky, mais cela fonctionne pour moi. Je cherche à réaliser un espacement uniforme/marges.
http://codepen.io/rustydev/pen/f7c8920e0beb0ba9a904da7ebd9970ae/
float: left
Semble que personne n'a proposé le flex-grow solution sur le dernier élément.
L'idée est d'avoir votre dernière flex élément à prendre toute la place qu'il peut à l'aide de flex-grow: 1.
Remarque: Cette solution n'est pas parfaite, surtout si vous avez centré sur les éléments à l'intérieur de votre flex éléments, car elle portera sur la possibilité d'énormes dernière flex élément.
C'est une combinaison d'un grand nombre de réponses, mais c'est exactement ce que j'étais en avoir besoin-qui est, en alignant le dernier enfant dans un conteneur flex vers la gauche tout en maintenant l'espace entre le comportement (dans ce cas, c'est une disposition en trois colonnes).
Voici le balisage:
flex-grow: 0.9
au lieu deflex-basis
fonctionne pour n'importe quel nombre de colonnes. Testé dans un tas de navigateurs modernes - à l'œuvre dans tous, mais le remplissage est cassée dans IE (mais travaillant dans Edge0Vous pouvez le faire simplement avec un flex de départ et max-width.
https://codepen.io/moladukes/pen/NvzBrQ
En supposant que:
Définir une marge à gauche sur chaque élément, sauf le 1er, 5ème et 9ème élément et ainsi de suite. Si la marge de gauche est 10px puis chaque ligne aura 30px marge distribués parmi les 4 éléments. Le pourcentage de la largeur de point est calculé comme suit:
C'est un bon palliatif pour les questions concernant la dernière rangée de flexbox.
CSS:
HTML:
Si vous connaissez la largeur des espaces entre les éléments de la ligne et le nombre d'éléments dans une rangée, ce serait le travail:
Oh la la, je crois que j'ai trouvé une bonne solution avec un minimum de CSS et pas de JS. Check it out:
CSS:
HTML:
La clé ici est de se rappeler que ce que l'on cherche à atteindre est exactement ce que
text-align: justify
ne!Les éléments vides dans le code HTML sont là pour faire de la dernière ligne de l'affichage parfaitement sans en changer l'apparence, mais pourraient ne pas être nécessaires compte tenu de ce que vous essayez d'atteindre. Pour un équilibre parfait dans chaque situation, vous avez besoin d'au moins x-4 éléments vides, x étant le nombre d'éléments à afficher, ou n-2, n étant le nombre de colonnes que vous souhaitez afficher.
vous voulez aligner
utilisation
align-content: flex-start;
au lieu dejustify-content: space-between;
ce tire les éléments de la dernière ligne à gauche , et distribue également l'espace de façon uniforme,
https://codepen.io/anon/pen/aQggBW?editors=1100
danAnderson solution n'est PAS DYNAMIQUE .PÉRIODE!!
lors de la largeur de l'objet passe de 25 à 28 dan anderson échoue espace entre les images
danAnderson: https://codepen.io/anon/pen/ZwYPmB?editors=1100
dynamique: https://codepen.io/anon/pen/aQggBW?editors=1100
c'est ce que j'ai essayé de dire . dans est hacky.....
J'ai été en mesure de le faire avec
justify-content: space-between
sur le conteneur