display: inline-flex
ne fait pas afficher les éléments flexibles en ligne. Il rend l' affichage du conteneur flexible en ligne. C'est la seule différence entre display: inline-flex
et display: flex
. Une comparaison similaire peut être faite entre display: inline-block
et display: block
, et à peu près n'importe quel autre type d'affichage ayant un équivalent en ligne . 1
Il n'y a absolument aucune différence dans l'effet sur les articles flexibles; la disposition flexible est identique, que le conteneur flexible soit au niveau du bloc ou au niveau en ligne. En particulier, les éléments flex eux-mêmes se comportent toujours comme des boîtes de niveau bloc (bien qu'ils aient certaines propriétés de blocs en ligne). Vous ne pouvez pas afficher les éléments flexibles en ligne; sinon, vous n'avez pas de mise en page flexible.
On ne sait pas exactement ce que vous entendez par "aligner verticalement" ou pourquoi exactement vous voulez afficher le contenu en ligne, mais je soupçonne que flexbox n'est pas le bon outil pour tout ce que vous essayez d'accomplir. Il y a de fortes chances que ce que vous cherchez soit simplement une ancienne mise en page en ligne ( display: inline
et / ou display: inline-block
), pour laquelle flexbox n'est pas un remplacement; flexbox n'est pas la solution de mise en page universelle que tout le monde prétend qu'elle est (je dis cela parce que l'idée fausse est probablement la raison pour laquelle vous envisagez la flexbox en premier lieu).
1 Les différences entre la disposition des blocs et la disposition en ligne n'entrent pas dans le cadre de cette question, mais celle qui se démarque le plus est la largeur automatique: les boîtes au niveau du bloc s'étirent horizontalement pour remplir leur bloc contenant, tandis que les boîtes au niveau en ligne se rétrécissent pour s'adapter à leur Contenu. En fait, c'est pour cette seule raison que vous n'utiliserez presque jamais display: inline-flex
sauf si vous avez une très bonne raison d'afficher votre conteneur flexible en ligne.
inline-flex
etflex
: jsfiddle.net/mgr0en3q/1 Violon original par @ fish-graphics et @astridxD'accord, je sais que cela peut être un peu déroutant au début, mais
display
parle de l'élément parent, donc signifie quand on dit:,display: flex;
c'est à propos de l'élément et quand on ditdisplay:inline-flex;
, c'est aussi faire l'élément lui-mêmeinline
...C'est comme faire une
div
ligne ou un bloc , exécutez l'extrait ci-dessous et vous pouvez voir commentdisplay flex
se décompose à la ligne suivante:Créez également rapidement l'image ci-dessous pour montrer la différence en un coup d'œil:
la source
flex
et lesinline-flex
deux appliquent une disposition flexible aux enfants du conteneur. Le conteneur avecdisplay:flex
se comporte comme un élément de niveau bloc lui-même, tandis quedisplay:inline-flex
le conteneur se comporte comme un élément en ligne.la source
La différence entre "flex" et "inline-flex"
Réponse courte:
L'un est en ligne et l'autre répond essentiellement comme un élément de bloc (mais a certaines de ses propres différences).
Réponse plus longue:
Inline-Flex - La version en ligne de flex permet à l'élément, et à ses enfants, d'avoir des propriétés flex tout en restant dans le flux régulier du document / de la page Web. Fondamentalement, vous pouvez placer deux conteneurs flexibles en ligne dans la même ligne, si les largeurs étaient suffisamment petites, sans aucun style excessif pour leur permettre d'exister dans la même ligne. C'est assez similaire à "inline-block".
Flex - Le conteneur et ses enfants ont des propriétés flex mais le conteneur réserve la ligne, car elle est retirée du flux normal du document. Il répond comme un élément de bloc, en termes de flux de documents. Deux conteneurs flexbox ne pourraient pas exister sur la même ligne sans style excessif.
Le problème que vous rencontrez peut-être
En raison des éléments que vous avez répertoriés dans votre exemple, bien que je suppose, je pense que vous souhaitez utiliser flex pour afficher les éléments répertoriés de manière régulière, mais continuer à voir les éléments côte à côte.
La raison pour laquelle vous rencontrez probablement des problèmes est que flex et inline-flex ont la propriété par défaut "flex-direction" définie sur "row". Cela affichera les enfants côte à côte. Changer cette propriété en "colonne" permettra à vos éléments d'empiler et de réserver un espace (largeur) égal à la largeur de son parent.
Voici quelques exemples pour montrer comment fonctionne flex vs inline-flex et aussi une démo rapide du fonctionnement des éléments inline vs block ...
Violon
Violon
Violon
Violon
Violon
Violon
Aussi, un excellent document de référence: Un guide complet de Flexbox - astuces CSS
la source
Affichage: flex applique la disposition flex aux éléments flex ou aux enfants du conteneur uniquement. Ainsi, le conteneur lui-même reste un élément de niveau bloc et occupe ainsi toute la largeur de l'écran.
Ainsi, chaque conteneur flexible se déplace vers une nouvelle ligne à l'écran.
Affichage: inline-flex applique une disposition flexible aux éléments flexibles ou aux enfants ainsi qu'au conteneur lui-même. En conséquence, le conteneur se comporte comme un élément flexible en ligne comme le font les enfants et prend donc la largeur requise par ses articles / enfants uniquement et non la largeur totale de l'écran.
Cela provoque deux ou plusieurs conteneurs flex l'un après l'autre, affichés en tant que flex en ligne, s'alignent côte à côte sur l'écran jusqu'à ce que toute la largeur de l'écran soit prise.
la source
Vous avez besoin d'un peu plus d'informations pour que le navigateur sache ce que vous voulez. Par exemple, les enfants du conteneur doivent savoir "comment" fléchir.
Fiddle mis à jour
J'ai ajouté
#wrapper > * { flex: 1; margin: auto; }
à votre CSS et changéinline-flex
enflex
, et vous pouvez voir comment les éléments s'espacent maintenant uniformément sur la page.la source
Ouvrir en pleine page pour une meilleure compréhension
la source