Centrer les éléments flexibles dans un conteneur lorsqu'ils sont entourés d'autres éléments flexibles
P粉042455250
2023-08-25 14:40:25
<p>J'ai une flexbox (voir l'extrait de code ci-dessous à titre d'exemple). </p>
<p>Je souhaite le configurer de manière à ce que dans tous les cas, <code><h2></code> soit au centre de la <strong>flex-box</strong> circulera autour de lui, en fonction de leur balisage. </p>
<p>Je recherche essentiellement le code CSS <code>align-self</code>, mais pour l'axe principal, pas pour l'axe horizontal (ce qui pourrait aider à expliquer ce que je demande). </p>
<p>J'ai également appliqué <code>margin: auto;</code> à mon <code><h2></code> que j'ai appris après avoir lu cet article (une excellente page, mais elle reste me laisse avec mes questions suivantes - sauf que je ne comprends pas tout). </p>
<p>Voici le code que j'obtiens : </p>
<p>
<pre class="snippet-code-css lang-css Prettyprint-override"><code>.container {
aligner les éléments : centre ;
bordure : 1px rouge uni ;
affichage : flexible ;
justifier-contenu : centre ;
largeur : 100 % ;
}
h2 {
marge : auto ;
]</code></pre>
<pre class="snippet-code-html lang-html Prettyprint-override"><code><div class="container">
<h2>Je suis un h2</h2>
<span>Je suis span 1</span>
<span>Je suis span 2</span>
<span>Je mesure 3</span>
</div>
<div class="conteneur">
<span>Je suis span 1</span>
<span>Je suis span 2</span>
<span>Je mesure 3</span>
<h2>Je suis un h2</h2>
<span>Je mesure 4</span>
<span>Je mesure 5</span>
<span>Je mesure 6</span>
</div>
<div class="conteneur">
<span>Je suis span 1</span>
<span>Je suis span 2</span>
<h2>Je suis un h2</h2>
<span>Je mesure 3</span>
</div></code></pre>
</p>
<blockquote>
<p>Pour reformuler complètement ma question : je souhaite savoir comment centrer <code><h2></code> sur ma page afin que, peu importe les autres<code><span></ où code>, <code><h2></code> sera toujours au <strong>point mort</strong> </p>
</blockquote>
<p>P.S. : Je suis prêt à utiliser JavaScript et jQuery, mais je préfère une manière purement CSS de procéder. </p>
<heure/>
<p>Après la réponse de Michael Benjamin :</p>
<p>Sa réponse m'a fait réfléchir. Bien que je n'aie pas encore trouvé de moyen de le faire, je pense que ce qui suit est un pas dans la bonne direction : </p>
<p><strong>HTML</strong></p>
<pre class="brush:php;toolbar:false;"><div class="conteneur">
<div>
<span>Je suis span 1</span>
<span>Je suis span 2</span>
<span>Je mesure 3</span>
</div>
<h2>Je suis un h2</h2>
<div>
<span>Je mesure 4</span>
<span>Je mesure 5</span>
<span>Je mesure 6</span>
</div>
</div></pre>
<p><strong>CSS</strong></p>
<pre class="brush:php;toolbar:false;">.container div {
flex : 1 1 auto ;
alignement du texte : centre ;
}
h2 {
flexion : 0 0 automatique ;
marge : auto ;
}</pré>
<p>
<pre class="snippet-code-css lang-css Prettyprint-override"><code>.container {
aligner les éléments : centre ;
bordure : 1px rouge uni ;
affichage : flexible ;
justifier-contenu : centre ;
largeur : 100 % ;
}
.conteneur div {
flex : 1 1 auto ;
alignement du texte : centre ;
}
h2 {
flexion : 0 0 automatique ;
marge : auto ;
}</code></pre>
<pre class="snippet-code-html lang-html Prettyprint-override"><code><div class="container">
<div>
</div>
<h2>Je suis un h2</h2>
<div>
<span>Je suis span 1</span>
<span>Je suis span 2</span>
<span>Je mesure 3</span>
</div>
</div>
<div class="conteneur">
<div>
<span>Je suis span 1</span>
<span>Je suis span 2</span>
<span>Je mesure 3</span>
</div>
<h2>Je suis un h2</h2>
<div>
<span>Je mesure 4</span>
<span>Je mesure 5</span>
<span>Je mesure 6</span>
</div>
</div>
<div class="conteneur">
<div>
<span>Je suis span 1</span>
<span>Je suis span 2</span>
</div>
<h2>Je suis un h2</h2>
<div>
<span>Je mesure 3</span>
</div>
</div></code></pre>
</p>
<p>Fondamentalement, la théorie est que même si le nombre total de <code><span></code> est connu, il y a trois éléments au total : <code><div>< ;h2> <div></code></p>
<blockquote>
<p>Comme vous pouvez le voir dans l'extrait de code ci-dessus, j'ai essayé (<code>flex: 0 0 auto</code> et <code>flex: 1 1 auto</code> etc.) de laisser Cela fonctionne mais n'a pas encore fonctionné. Quelqu'un peut-il me dire si c'est un pas dans la bonne direction et comment transformer cela en un produit réel ? </p>
</blockquote></p>
Une solution consiste à ajouter des étendues vides des deux côtés, puis à définir l'étendue et h2 sur une valeur de flexion comme celle-ci :
Assurez-vous donc que l’espace des deux côtés est égal. Le seul problème est alors que vous devez décider quelle largeur vous voulez que h2 prenne.
Les propriétés d'alignement flexible fonctionnent en allouant l'espace disponible dans le conteneur.
Ainsi, lorsqu'un élément Flex partage de l'espace avec d'autres éléments, il n'existe pas de moyen en une seule étape de le centrer à moins que la longueur totale des éléments frères des deux côtés soit égale.
Dans le deuxième exemple,
h2
两侧的跨度总长度相等。因此,h2
est complètement au centre du conteneur.