Imaginez la disposition suivante, où les points représentent l'espace entre les cases:
[Left box]......[Center box]......[Right box]
Lorsque je retire la bonne boîte, j'aime que la boîte centrale soit toujours au centre, comme ceci:
[Left box]......[Center box].................
Il en va de même si je supprimais la case de gauche.
................[Center box].................
Désormais, lorsque le contenu de la zone centrale s'allonge, il occupera autant d'espace disponible que nécessaire tout en restant centré. La boîte de gauche et de droite ne rétrécira jamais et donc quand il n'y a plus d'espace, le overflow:hidden
et text-overflow: ellipsis
entrera en vigueur pour casser le contenu;
[Left box][Center boxxxxxxxxxxxxx][Right box]
Tout ce qui précède est ma situation idéale, mais je ne sais pas comment accomplir cet effet. Parce que quand je crée une structure flex comme ça:
.parent {
display : flex; // flex box
justify-content : space-between; // horizontal alignment
align-content : center; // vertical alignment
}
Si les cases gauche et droite avaient exactement la même taille, j'obtiens l'effet désiré. Cependant, lorsque l'un des deux est d'une taille différente, la boîte centrée n'est plus vraiment centrée.
Y a-t-il quelqu'un qui peut m'aider?
Mettre à jour
Ce justify-self
serait bien, ce serait idéal:
.leftBox {
justify-self : flex-start;
}
.rightBox {
justify-self : flex-end;
}
flexbox
est censé fonctionner. Vous pourriez essayer une autre méthodologie.justify-self
plus tôt dans la journée, vous pourriez donc trouver cela intéressant: stackoverflow.com/questions/32551291/…Réponses:
Voici une méthode utilisant flexbox pour centrer l'élément du milieu, quelle que soit la largeur des frères et sœurs.
Principales caractéristiques:
Utilisez des conteneurs flexibles imbriqués et des
auto
marges:Voici comment ça fonctionne:
.container
) de niveau supérieur est un conteneur flex..box
) est maintenant un élément flexible..box
élément est donnéflex: 1
afin de répartir équitablement l'espace du conteneur ( plus de détails ).justify-content: center
.span
élément est un élément flex centré.auto
marges flexibles pour décaler les côtés extérieurs vers laspan
gauche et vers la droite.Vous pouvez également renoncer
justify-content
et utiliserauto
exclusivement les marges.Mais
justify-content
peut fonctionner ici car lesauto
marges ont toujours la priorité.la source
width
d'être spécifiéwhite-space: nowrap
était la dernière pièce du puzzle pour empêcher le texte de s'habiller lorsque la zone devient trop petite.flex: 1
sur le premier et le dernier. Cela les fait croître de manière égale pour remplir l'espace disponible laissé par celui du milieu.Cependant, si le premier ou le dernier élément a un contenu large, cet élément flexible augmentera également en raison de la nouvelle
min-width: auto
valeur initiale.Remarque Chrome ne semble pas l'implémenter correctement. Cependant, vous pouvez définir
min-width
sur-webkit-max-content
ou-webkit-min-content
et cela fonctionnera également.Ce n'est que dans ce cas que l'élément central sera poussé hors du centre.
la source
Au lieu d'utiliser flexbox par défaut, l'utilisation de la grille le résout en 2 lignes de CSS sans balisage supplémentaire à l'intérieur des enfants de niveau supérieur.
HTML:
CSS:
Flexbox bascule mais ne devrait pas être la solution à tout. Dans ce cas, la grille est clairement l'option la plus propre.
Même fait un codepen pour votre plaisir de test: https://codepen.io/anon/pen/mooQOV
la source
flex
pour tout. Ma seule objection est que l'alignement vertical devient plus facile en utilisant flex (align-items: center
) au cas où vos éléments sont de différentes hauteurs et doivent être alignésVous pouvez faire ceci comme ceci:
la source
Voici une réponse qui utilise la grille au lieu de la flexbox. Cette solution ne nécessite pas d'éléments petits-enfants supplémentaires dans le HTML comme le fait la réponse acceptée. Et cela fonctionne correctement même lorsque le contenu d'un côté est suffisamment long pour déborder vers le centre, contrairement à la réponse de la grille de 2019.
La seule chose que cette solution ne fait pas est d'afficher des points de suspension ou de masquer le contenu supplémentaire dans la zone centrale, comme décrit dans la question.
la source
Voici une autre façon de le faire, en utilisant
display: flex
chez les parents et les enfants:la source
vous pouvez également utiliser cette méthode simple pour atteindre l'alignement central exact de l'élément central:
codepen: https://codepen.io/ErAz7/pen/mdeBKLG
la source