¿Cómo puedo alinear dos bloques en línea para que uno quede a la izquierda y el otro a la derecha en la misma línea? ¿Por qué es tan difícil? ¿Hay algo como \ hfill de LaTeX que pueda consumir el espacio entre ellos para lograr esto?
No quiero usar flotadores porque con bloques en línea puedo alinear las líneas base. Y cuando la ventana es demasiado pequeña para ambos, con los bloques en línea puedo simplemente cambiar la alineación del texto al centro y se centrarán uno encima del otro. El posicionamiento relativo (padre) + absoluto (elemento) tiene los mismos problemas que los flotantes.
El HTML5:
<header>
<h1>Title</h1>
<nav>
<a>A Link</a>
<a>Another Link</a>
<a>A Third Link</a>
</nav>
</header>
El 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;
}
Están uno al lado del otro, pero quiero el nav
de la derecha.
position: absolute
yinline-block
Respuestas:
Editar: Han pasado 3 años desde que respondí esta pregunta y supongo que se necesita una solución más moderna, aunque la actual hace la cosa :)
1. Caja flexible
Es, con mucho, el más corto y flexible. Aplicar
display: flex;
al contenedor principal y ajustar la ubicación de sus hijosjustify-content: space-between;
así:Se puede ver en línea aquí: http://jsfiddle.net/skip405/NfeVh/1073/
Sin embargo, tenga en cuenta que el soporte de flexbox es IE10 y más reciente. Si necesita admitir IE 9 o una versión anterior, use la siguiente solución:
2. Puedes usar la
text-align: justify
técnica aquí.El ejemplo de trabajo se puede ver aquí: http://jsfiddle.net/skip405/NfeVh/4/ . Este código funciona desde IE7 y superior
Si los elementos de bloque en línea en HTML no están separados con espacio, esta solución no funcionará; consulte el ejemplo http://jsfiddle.net/NfeVh/1408/ . Este podría ser un caso cuando inserta contenido con Javascript.
Si no nos importa IE7, simplemente omita las propiedades de star-hack. El ejemplo de trabajo que usa su marcado está aquí: http://jsfiddle.net/skip405/NfeVh/5/ . Solo agregué la
header:after
parte y justifiqué el contenido.Para resolver el problema del espacio extra que se inserta con el
after
pseudoelemento, se puede hacer un truco para establecer el valorfont-size
en 0 para el elemento principal y restablecerlo a 14px para los elementos secundarios. El ejemplo de trabajo de este truco se puede ver aquí: http://jsfiddle.net/skip405/NfeVh/326/fuente
font-size
es bastante indeseable. Propongo una solución diferente. Tenga en cuenta que el.header:after
decorador agrega una línea de altura igual afont-size
. Afortunadamente sabemos cuánto es eso. ¡Es exactamente1em
! Entonces, ¡ márgenes negativos al rescate! Este violín muestra cómo .Aprovechando la respuesta de @ skip405, hice un mixin de Sass para ello:
Acepta 3 parámetros. El contenedor, el elemento izquierdo y el derecho. Por ejemplo, para ajustar la pregunta, podría usarla así:
fuente
Si no desea utilizar flotadores, tendrá que ajustar su navegador:
... y agregue algunos CSS más específicos:
Es posible que deba hacer un poco más, pero eso es un comienzo.
fuente
Si ya está usando JavaScript para centrar cosas cuando la pantalla es demasiado pequeña (según su comentario para su encabezado), ¿por qué no deshace los flotadores / márgenes con JavaScript mientras lo hace y usa los flotadores y márgenes normalmente.
Incluso podría usar consultas de medios CSS para reducir la cantidad de JavaScript que está usando.
fuente
Creo que una posible solución a esto es usar
display: table
:JSFiddle: http://jsfiddle.net/yxxrnn7j/1/
fuente
Nuevas formas de alinear los elementos correctamente:
Cuadrícula :
Manifestación
Bootstrap 4. Alinear a la derecha :
Manifestación
fuente
Visualización de los padres a la izquierda, en el centro y a la derecha. Si tiene más de 3 elementos, use nth-child () para ellos.
Muestra HTML:
Muestra de CSS:
fuente
dale float: right y h1 float: left y pon un elemento con clear: both después de ellos.
fuente
Para ambos elementos use
el para el uso del elemento 'nav'
fuente