Comment puis-je aligner deux blocs en ligne de sorte que l'un soit à gauche et l'autre à droite sur la même ligne? Pourquoi est-ce si difficile? Y a-t-il quelque chose comme \ hfill de LaTeX qui peut consommer l'espace entre eux pour y parvenir?
Je ne veux pas utiliser de flotteurs car avec des blocs en ligne, je peux aligner les lignes de base. Et lorsque la fenêtre est trop petite pour les deux, avec des blocs en ligne, je peux simplement changer l'alignement du texte au centre et ils seront centrés l'un sur l'autre. Le positionnement relatif (parent) + absolu (élément) pose les mêmes problèmes que les flottants.
Le HTML5:
<header>
<h1>Title</h1>
<nav>
<a>A Link</a>
<a>Another Link</a>
<a>A Third Link</a>
</nav>
</header>
Le CSS:
header {
//text-align: center; // will set in js when the nav overflows (i think)
}
h1 {
display: inline-block;
margin-top: 0.321em;
}
nav {
display: inline-block;
vertical-align: baseline;
}
Ils sont juste l'un à côté de l'autre, mais je veux qu'ils soient à nav
droite.
position: absolute
etinline-block
Réponses:
Edit: 3 ans se sont écoulés depuis que j'ai répondu à cette question et je suppose qu'une solution plus moderne est nécessaire, bien que l'actuelle fasse l'affaire :)
1. Flexbox
C'est de loin le plus court et le plus flexible. Appliquez-
display: flex;
vous au conteneur parent et ajustez le placement de ses enfantsjustify-content: space-between;
comme ceci:Peut être vu en ligne ici - http://jsfiddle.net/skip405/NfeVh/1073/
Notez cependant que le support de flexbox est IE10 et plus récent. Si vous devez prendre en charge IE 9 ou une version antérieure, utilisez la solution suivante:
2.Vous pouvez utiliser la
text-align: justify
technique ici.L'exemple de travail peut être vu ici: http://jsfiddle.net/skip405/NfeVh/4/ . Ce code fonctionne à partir d'IE7 et au-dessus
Si les éléments de bloc en ligne en HTML ne sont pas séparés par un espace, cette solution ne fonctionnera pas - voir l'exemple http://jsfiddle.net/NfeVh/1408/ . Cela peut être un cas lorsque vous insérez du contenu avec Javascript.
Si nous ne nous soucions pas d'IE7, omettez simplement les propriétés star-hack. L'exemple de travail utilisant votre balisage est ici - http://jsfiddle.net/skip405/NfeVh/5/ . J'ai juste ajouté la
header:after
partie et justifié le contenu.Afin de résoudre le problème de l'espace supplémentaire inséré avec le
after
pseudo-élément, on peut faire une astuce en définissant lefont-size
à 0 pour l'élément parent et en le réinitialisant à 14px pour les éléments enfants. L'exemple de travail de cette astuce peut être vu ici: http://jsfiddle.net/skip405/NfeVh/326/la source
font-size
est plutôt indésirable. Je propose une solution différente. Notez que le.header:after
décorateur ajoute une ligne de hauteur égale àfont-size
. Heureusement, nous savons combien cela représente. C'est exactement ça1em
! Alors, des marges négatives à la rescousse! Ce violon montre comment .Profitant de la réponse de @ skip405, j'ai fait un mixin Sass pour cela:
Il accepte 3 paramètres. Le conteneur, les éléments gauche et droit. Par exemple, pour répondre à la question, vous pouvez l'utiliser comme ceci:
la source
Si vous ne souhaitez pas utiliser de flotteurs, vous devrez envelopper votre nav:
... et ajoutez des css plus spécifiques:
Vous devrez peut-être faire un peu plus, mais c'est un début.
la source
Si vous utilisez déjà JavaScript pour centrer des éléments lorsque l'écran est trop petit (selon votre commentaire pour votre en-tête), pourquoi ne pas simplement annuler les flottants / marges avec JavaScript pendant que vous y êtes et utiliser les flottants et les marges normalement.
Vous pouvez même utiliser des requêtes multimédias CSS pour réduire la quantité de JavaScript que vous utilisez.
la source
Je pense qu'une solution possible à cela est d'utiliser
display: table
:JSFiddle: http://jsfiddle.net/yxxrnn7j/1/
la source
De nouvelles façons d'aligner correctement les éléments:
Grille :
Démo
Bootstrap 4. Alignez à droite :
Démo
la source
Affichage au milieu à gauche et à droite de leurs parents. Si vous avez plus de 3 éléments, utilisez nth-child () pour eux.
Exemple HTML:
Exemple CSS:
la source
donnez-lui float: right et le h1 float: left et mettez un élément avec clear: both après eux.
la source
Pour les deux éléments, utilisez
l'utilisation de l'élément 'nav'
la source