Como posso alinhar dois blocos embutidos de modo que um fique à esquerda e o outro à direita na mesma linha? Por que isso é tão difícil? Existe algo como o \ hfill do LaTeX que pode consumir o espaço entre eles para conseguir isso?
Não quero usar flutuadores porque com blocos embutidos posso alinhar as linhas de base. E quando a janela é muito pequena para ambos, com blocos embutidos, posso apenas alterar o alinhamento do texto para o centro e eles serão centralizados um sobre o outro. O posicionamento relativo (pai) + absoluto (elemento) tem os mesmos problemas que os flutuadores.
O HTML5:
<header>
<h1>Title</h1>
<nav>
<a>A Link</a>
<a>Another Link</a>
<a>A Third Link</a>
</nav>
</header>
O 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ão bem próximos um do outro, mas eu quero do nav
lado direito.
position: absolute
einline-block
Respostas:
Edit: 3 anos se passaram desde que eu respondi a esta pergunta e eu acho que uma solução mais moderna é necessária, embora a atual faça a coisa :)
1. Flexbox
É de longe o mais curto e flexível. Aplique
display: flex;
ao contêiner pai e ajuste o posicionamento de seus filhos dajustify-content: space-between;
seguinte maneira:Pode ser visto online aqui - http://jsfiddle.net/skip405/NfeVh/1073/
Observe, entretanto, que o suporte a flexbox é o IE10 e mais recente. Se você precisar oferecer suporte ao IE 9 ou mais antigo, use a seguinte solução:
2. Você pode usar a
text-align: justify
técnica aqui.O exemplo de trabalho pode ser visto aqui: http://jsfiddle.net/skip405/NfeVh/4/ . Este código funciona a partir do IE7 e superior
Se os elementos do bloco embutido em HTML não forem separados por espaço, esta solução não funcionará - veja o exemplo http://jsfiddle.net/NfeVh/1408/ . Este pode ser o caso quando você insere conteúdo com Javascript.
Se não nos importamos com o IE7, simplesmente omita as propriedades star-hack. O exemplo de trabalho usando sua marcação está aqui - http://jsfiddle.net/skip405/NfeVh/5/ . Eu apenas adicionei a
header:after
parte e justifiquei o conteúdo.Para resolver o problema do espaço extra que é inserido com o
after
pseudoelemento, pode-se fazer um truque para definir ofont-size
como 0 para o elemento pai e redefini-lo para, digamos, 14 px para os elementos filhos. O exemplo prático desse truque pode ser visto aqui: http://jsfiddle.net/skip405/NfeVh/326/fonte
font-size
é bastante indesejável. Eu proponho uma solução diferente. Observe que o.header:after
decorador adiciona uma linha de altura igual afont-size
. Felizmente, sabemos quanto isso é. É exatamente isso1em
! Portanto, margens negativas para o resgate! Este violino mostra como .Aproveitando a resposta de @ skip405, fiz um mixin Sass para ele:
Aceita 3 parâmetros. O contêiner, o elemento esquerdo e o direito. Por exemplo, para responder à pergunta, você poderia usá-lo assim:
fonte
Se você não quiser usar flutuadores, terá que embrulhar seu nav:
... e adicione alguns css mais específicos:
Você pode precisar fazer um pouco mais, mas isso é um começo.
fonte
Se você já está usando JavaScript para centralizar coisas quando a tela é muito pequena (de acordo com seu comentário para o cabeçalho), por que não apenas desfazer flutuações / margens com JavaScript enquanto você está nisso e usar flutuações e margens normalmente.
Você pode até usar consultas de mídia CSS para reduzir a quantidade de JavaScript que está usando.
fonte
Acho que uma solução possível para isso é usar
display: table
:JSFiddle: http://jsfiddle.net/yxxrnn7j/1/
fonte
Novas maneiras de alinhar os itens da maneira certa:
Grade :
Demo
Bootstrap 4. Alinhar à direita :
Demo
fonte
Exibindo meio esquerdo e direito de seus pais. Se você tiver mais de 3 elementos, use nth-child () para eles.
Amostra de HTML:
Amostra CSS:
fonte
dê a ele float: right e h1 float: left e coloque um elemento com clear: ambos após eles.
fonte
Para ambos os elementos, use
o para o uso do elemento 'nav'
fonte