Quelqu'un peut-il me montrer la différence entre align-items
et align-content
?
Quelqu'un peut-il me montrer la différence entre align-items
et align-content
?
Réponses:
La align-items
propriété de flex-box aligne les éléments à l'intérieur d'un conteneur flexible le long de l'axe transversal, tout comme le justify-content
fait le long de l'axe principal. (Pour la valeur par défaut, flex-direction: row
l'axe transversal correspond à la verticale et l'axe principal correspond à l'horizontale. Les flex-direction: column
deux sont interchangés respectivement).
Voici un exemple de l' align-items:center
apparence:
Mais align-content
c'est pour les boîtes flexibles multi-lignes. Cela n'a aucun effet lorsque les éléments sont sur une seule ligne. Il aligne toute la structure en fonction de sa valeur. Voici un exemple pour align-content: space-around;
:
Et voici comment align-content: space-around;
avec les align-items:center
looks:
Notez que la 3ème case et toutes les autres cases de la première ligne deviennent verticalement centrées sur cette ligne.
Voici quelques liens codepen pour jouer avec:
http://codepen.io/asim-coder/pen/MKQWbb
http://codepen.io/asim-coder/pen/WrMNWR
Voici un stylo super cool qui montre et vous permet de jouer avec presque tout dans la flexbox.
align-*
propriétés peuvent également déplacer les éléments flexibles horizontalement. Cela dépend du flex-direction
. stackoverflow.com/q/32551291/3597276
Je trouve l'exemple http://flexboxfroggy.com/ très utile.
Cela vous prendra 10-20 minutes et au niveau 21, vous trouverez la réponse à votre question. Il a mentionné:
align-content détermine l'espacement entre les lignes, tandis que align-items détermine comment les éléments dans leur ensemble sont alignés dans le conteneur. Lorsqu'il n'y a qu'une seule ligne, align-content n'a aucun effet
Tout d'abord, align-items
concerne les éléments d'une seule ligne. Ainsi, pour une seule ligne d'éléments sur l'axe principal , align-items
alignera ces éléments les uns par rapport aux autres et cela commencera par une nouvelle perspective de la ligne suivante.
Maintenant, align-content
n'interfère pas avec les éléments d'une ligne mais avec les lignes elles-mêmes . Par conséquent, align-content
essaiera d'aligner les lignes les unes par rapport aux autres et de fléchir le conteneur.
Vérifiez ce violon: https://jsfiddle.net/htym5zkn/8/
J'ai eu la même confusion. Après quelques bricolages basés sur bon nombre des réponses ci-dessus, je peux enfin voir les différences. À mon humble avis, la distinction est mieux démontrée avec un conteneur flexible qui remplit les deux conditions suivantes:
min-height: 60rem
) et peut donc devenir trop grand pour son contenuLa condition 1 m'aide à comprendre ce que content
signifie par rapport à son conteneur parent. Lorsque le contenu affleure le conteneur, nous ne pourrons pas voir les effets de positionnement en provenance align-content
. Ce n'est que lorsque nous avons un espace supplémentaire le long de l'axe transversal que nous commençons à voir son effet: il aligne le contenu par rapport aux limites du conteneur parent.
La condition 2 m'aide à visualiser les effets de align-items
: elle aligne les éléments les uns par rapport aux autres.
Voici un exemple de code. Les matières premières proviennent du didacticiel CSS Grid de Wes Bos (21. Flexbox vs. CSS Grid)
<div class="flex-container">
<div class="item">Short</div>
<div class="item">Longerrrrrrrrrrrrrr</div>
<div class="item">💩</div>
<div class="item" id="tall">This is Many Words</div>
<div class="item">Lorem, ipsum.</div>
<div class="item">10</div>
<div class="item">Snickers</div>
<div class="item">Wes Is Cool</div>
<div class="item">Short</div>
</div>
.flex-container {
display: flex;
/*dictates a min-height*/
min-height: 60rem;
flex-flow: row wrap;
border: 5px solid white;
justify-content: center;
align-items: center;
align-content: flex-start;
}
#tall {
/*intentionally made tall*/
min-height: 30rem;
}
.item {
margin: 10px;
max-height: 10rem;
}
Exemple 1 : rétrécissons la fenêtre d'affichage de sorte que le contenu affleure le conteneur. C'est quand align-content: flex-start;
n'a aucun effet puisque tout le bloc de contenu est bien ajusté à l'intérieur du conteneur (pas de place supplémentaire pour le repositionnement!)
Notez également la 2e rangée - voyez comment les éléments sont alignés au centre entre eux.
Exemple 2 : à mesure que nous élargissons la fenêtre, nous n'avons plus suffisamment de contenu pour remplir le conteneur entier. Maintenant, nous commençons à voir les effets de align-content: flex-start;
--it aligne le contenu par rapport au bord supérieur du conteneur.
Ces exemples sont basés sur flexbox, mais les mêmes principes s'appliquent à la grille CSS. J'espère que cela t'aides :)
Eh bien, je les ai examinés sur mon navigateur.
align-content
peut changer une hauteur de ligne pour la direction des rangées ou de la largeur de la colonne lorsque la valeur de ce tronçon est, ou ajouter de l' espace vide entre ou autour des lignes de space-between
, space-around
, flex-start
, flex-end values
.
align-items
peut modifier la hauteur ou la position des éléments à l'intérieur de la zone de la ligne. Lorsque les éléments ne sont pas encapsulés, ils n'ont qu'une seule ligne dont la zone est toujours étendue à la zone de la boîte flexible (même si les éléments débordent) et align-content
n'a aucun effet sur une seule ligne. Cela n'a donc aucun effet sur les éléments qui ne sont pas enveloppés et ne align-items
peut changer la position des éléments ou les étirer que lorsqu'ils sont tous sur une seule ligne.
Cependant, s'ils sont encapsulés, vous avez plusieurs lignes et éléments à l'intérieur de chaque ligne. Et si tous les éléments de chaque ligne ont la même hauteur (pour la direction de la ligne), la hauteur de cette ligne sera égale à la hauteur de ces éléments et vous ne verrez aucun effet en modifiant la align-items
valeur.
Donc, si vous souhaitez affecter les éléments align-items
lorsque vos éléments sont enveloppés et ont la même hauteur (pour la direction de la ligne), vous devez d'abord utiliser la align-content
valeur d'étirement afin d'élargir la zone des lignes.
align-content
align-content
contrôle le positionnement transversal (c'est-à-dire la direction verticale si l' flex-direction
est row
) et horizontal si l' flex-direction
est column
) de plusieurs lignes les unes par rapport aux autres.
(Pensez aux lignes d'un paragraphe étalé verticalement, empilé vers le haut, empilé vers le bas. C'est sous un flex-direction
paradigme de ligne).
align-items
align-items
contrôle l'axe transversal d'une ligne individuelle d'éléments flexibles.
(Imaginez comment une ligne individuelle d'un paragraphe est alignée, si elle contient du texte normal et du texte plus grand comme des équations mathématiques. Dans ce cas, sera-t-il le bas, le haut ou le centre de chaque type de texte dans une ligne qui être aligné?)
Ce que j'ai appris de chaque réponse et en visitant le blog est
quel est l'axe transversal et l'axe principal
flex-direction: row
flex-direction: column
Maintenant align-content et align-items
align-content est pour la ligne, cela fonctionne si le conteneur a (plus d'une ligne) Propriétés de align-content
.container {
align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
}
align-items correspond aux éléments de la ligne Propriétés de align-items
.container {
align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
}
Pour plus de référence, visitez flex
selon ce que j'ai compris d' ici :
lorsque vous utilisez align-item ou justification-item, vous ajustez "le contenu à l'intérieur d'un élément de la grille le long de l'axe des colonnes ou de la ligne respectivement.
Mais: si vous utilisez align-content ou justification-content, vous définissez la position d'une grille le long de l'axe des colonnes ou de l'axe des lignes. cela se produit lorsque vous avez une grille dans un conteneur plus grand et que la largeur ou la hauteur sont inflexibles (en utilisant px).