Preciso colocar um div
(com position:absolute;
) elemento no centro da minha janela. Mas estou tendo problemas para fazer isso, porque a largura é desconhecida .
Eu tentei isso. Mas ele precisa ser ajustado, pois a largura é responsiva.
.center {
left: 50%;
bottom:5px;
}
Alguma ideia?
Respostas:
fonte
position: fixed
e se a altura for desconhecida da sobreposição, as barras de rolagem da sobreposição precisarão ser implementadas<html>
. Mas o<html>
elemento não tem umheight
especificado, portanto ocupa a altura de todo o conteúdo do documento, o que não é nada porque o único conteúdo está absolutamente posicionado (retirado do fluxo de conteúdo). Adicionarheight: 100%
ao<html>
elemento faz a diferença para isso.Isso funciona para mim:
fonte
width
deve ser definido como um valor específico para que isso funcione.auto
e100%
não centralizará o elemento.display: block;
é uma obrigação.position: absolute;
NÃO é uma obrigação. Todos os valores irão funcionar. O elemento paiposition
deve ser definido como algo diferente destatic
. Definirleft
eright
para0
é desnecessário.margin-left: auto; margin-right: auto;
fará o trabalho.Solução responsiva
Aqui está uma boa solução para design responsivo ou dimensões desconhecidas em geral, se você não precisar oferecer suporte ao IE8 e inferior.
Mostrar snippet de código
Aqui está um JS Fiddle
A pista é que isso
left: 50%
é relativo aos pais enquanto otranslate
transformação é relativa aos elementos largura / altura.Dessa forma, você tem um elemento perfeitamente centralizado, com uma largura flexível no filho e no pai. Bônus: isso funciona mesmo se a criança for maior que o pai.
Você também pode centralizá-lo verticalmente com isso (e, novamente, a largura e a altura do pai e do filho podem ser totalmente flexíveis (e / ou desconhecidas)):
Lembre-se de que também pode ser necessário
transform
prefixar o fornecedor. Por exemplo-webkit-transform: translate(-50%,-50%);
fonte
webkit-
prefixo, como sugeri.transform: translate
parece tornarposition: fixed
inutilizável em crianças. A resposta aceita funciona melhor neste caso.Realmente bom post .. Só queria adicionar se alguém quiser fazê-lo com tag div única, então aqui a saída:
Tomando
width
como900px
.Nesse caso, deve-se conhecer o
width
antemão.fonte
"because the width is unknown"
... isso não responder à perguntaAbsolute Center
HTML:
CSS:
Demo: http://jsbin.com/rexuk/2/
Testado no Google Chrome, Firefox e IE8
Espero que isto ajude :)
fonte
este trabalho para vertical e horizontal
e se você deseja tornar o elemento central do pai, defina a posição do pai em relação
editar:
para o centro vertical, alinhe a altura definida ao seu elemento. graças a @Raul
se você deseja tornar o elemento central do pai, defina a posição do pai como relativa
fonte
Procurando uma solução, obtive respostas acima e poderia tornar o conteúdo centrado na resposta de Matthias Weiler, mas usando o alinhamento de texto.
Trabalhou com chrome e Firefox.
fonte
Se você também precisar centralizar horizontal e verticalmente:
fonte
** SOLUÇÃO RESPONSIVA **
Assumindo o elemento na div, é outra div ...
esta solução funciona bem
o contêiner pode ter qualquer tamanho (deve ser relativo à posição)
O elemento ( div ) também pode ser de qualquer tamanho (deve ser menor que o contêiner )
O resultado será semelhante a este. Execute o trecho de código
Eu achei muito útil
fonte
Esta é uma mistura de outras respostas, que funcionaram para nós:
fonte
Entendo que esta pergunta já tem algumas respostas, mas nunca encontrei uma solução que funcionasse em quase todas as classes que também faz sentido e é elegante, então aqui está minha opinião depois de ajustar um monte:
O que isso está dizendo é fornecer a
top: 50%
e aleft: 50%
e depois transformar (criar espaço) no eixo X / Y para o-50%
valor, em um sentido "crie um espaço de espelho".Dessa forma, isso cria um espaço igual em todos os 4 pontos de uma div, que é sempre uma caixa (tem 4 lados).
Isso vai:
fonte
translate(-50%,-50%);
?Funciona em qualquer largura desconhecida aleatória do elemento posicionado absoluto que você deseja ter no centro do elemento do contêiner.
Demo
fonte
O Flex pode ser usado para centralizar div absoluto posicionado.
Mostrar snippet de código
fonte
display: -webkit-flex;
?Tanto quanto eu sei, isso é impossível de alcançar para uma largura desconhecida.
Você pode - se isso funcionar no seu cenário - posicionar absolutamente um elemento invisível com 100% de largura e altura e ter o elemento centralizado usando a margem: auto e possivelmente alinhamento vertical. Caso contrário, você precisará de Javascript para fazer isso.
fonte
Gostaria de adicionar à resposta de @ bobince:
Melhorado: /// isso faz com que a barra de rolagem horizontal não apareça com elementos grandes na div centralizada.
fonte
Heres um plugin jQuery útil para fazer isso. Encontrado aqui . Eu não acho que é possível apenas com CSS
fonte
versão sass / compass da Solução Responsiva acima:
fonte
transform: translate(-50%, -50%)
torna o texto e todo o outro conteúdo embaçados no OS X usando navegadores da Webkit. keithclark.co.uk/articles/gpu-text-rendering-in-webkit-webkit-font-smoothing: antialiased;
que eu colhi no artigo que você postou btw!Meu método de centralização preferido:
JSFiddle aqui
fonte
Isso funcionou para mim:
fonte
Eu sei que já dei uma resposta, e minha resposta anterior, juntamente com outras dadas, funciona muito bem. Mas eu usei isso no passado e funciona melhor em determinados navegadores e em determinadas situações. Então eu pensei em dar essa resposta também. Não "editei" minha resposta anterior e a adicionei porque sinto que essa é uma resposta totalmente separada e as duas que forneci não são relacionadas.
HTML:
CSS:
fonte
fonte
HTML
CSS
http://jsfiddle.net/f51rptfy/
fonte
Esta solução funciona se o elemento tiver
width
eheight
fonte
a solução desta questão não funcionou para o meu caso. Estou fazendo uma legenda para algumas imagens e resolvi usando isso
fonte
HTML:
CSS:
Este e mais exemplos aqui
fonte
Este é um truque que eu descobri para fazer um DIV flutuar exatamente no centro de uma página. Muito feio, é claro, mas funciona em todos
Pontos e traços
Limpador
Uau, que cinco anos voaram, não foi?
fonte
fonte
Você pode colocar a imagem em uma div, adicionar um ID de div e fazer com que o CSS dessa div tenha um
text-align:center
HTML:
CSS:
fonte
fonte
Uma abordagem simples que funcionou para mim centralizar horizontalmente um bloco de largura desconhecida:
Uma propriedade de alinhamento de texto pode ser adicionada ao conjunto de regras #block para alinhar seu conteúdo independentemente do alinhamento do bloco.
Isso funcionou nas versões recentes do Firefox, Chrome, IE, Edge e Safari.
fonte