Acabei de topar com esta postagem antiga e, embora tenha certeza de que user01 já encontrou a resposta há muito tempo, descobri que as respostas atuais não funcionam muito bem. Depois de brincar um pouco usando as informações fornecidas pelos outros, encontrei uma solução que funcionava no IE, Firefox e Chrome. Em CSS:
html, body {
height:100%;}
html {
display: table;
margin:auto;}
body {
display: table-cell;
vertical-align: middle;}
Isso é quase idêntico à resposta de abernier, mas descobri que incluir a largura quebraria a centralização, assim como omitiria a margem automática. Espero que qualquer outra pessoa que tropeçar neste tópico considere minha resposta útil.
Observação: omita html, body { height: 100%; }centralizar apenas horizontalmente.
Boa resposta. Só estou pensando (como não tenho muita experiência com HTML), é necessário definir a altura para 100%?
pôr do sol 8
7
@JackHumphries A altura só é necessária se você quiser alinhar o centro da página nos eixos vertical e horizontal. Se horizontal for tudo o que você deseja, omita a altura.
Esta é uma resposta tão simples, mas a maneira mais limpa e eficiente de centralizar a tag do corpo no meio da página.
justinhartman
1
Embora seja curto, também não funciona no IE, Edge Legacy, Edge, Chrome ou Firefox. O problema é que a margem automática só funciona quando a largura do elemento é menor que a do pai. Como o padrão de 'corpo' é 100%, não há espaço nas bordas para inserir margens automaticamente. Você pode usar body { margin:0 auto; max-width: 700px; }e, em seguida, seu corpo terá até 700px e permitirá acondicionamento em dispositivos menores.
user3347790
16
EDITAR
A partir de hoje com o flexbox, você poderia
body {
display:flex; flex-direction:column; justify-content:center;
min-height:100vh;}
RESPOSTA ANTERIOR
html, body {height:100%;}
html {display:table; width:100%;}
body {display:table-cell; text-align:center; vertical-align:middle;}
Qual DOCTYPE permite o styleatributo da htmlentidade?
ceving
1
@ceving: não tenho certeza de entender ... significa que não é CSS válido?
abernier
11
Se eu tenho uma coisa que adoro compartilhar com relação ao CSS, é MINHA MANEIRA FAVE DE CENTRAR AS COISAS EM AMBOS OS EIXOS !!!
Vantagens deste método :
Compatibilidade total com navegadores que as pessoas realmente usam
Nenhuma mesa necessária
Altamente reutilizável para centralizar qualquer outro elemento dentro de seu pai
Acomoda pais e filhos com dimensões dinâmicas (em mudança)!
Sempre faço isso usando 2 classes: uma para especificar o elemento pai, cujo conteúdo será centralizado ( .centered-wrapper), e a segunda para especificar qual filho do pai está centrado ( .centered-content). Esta segunda classe é útil no caso em que o pai tem vários filhos, mas apenas 1 precisa ser centralizado). Nesse caso, bodyserá o .centered-wrapper, e um divserá interno .centered-content.
A ideia para centrar agora será fazer .centered-contentum inline-block. Isso facilitará facilmente a centralização horizontal text-align: center;e também permite a centralização vertical, como você verá.
Isso lhe dá 2 classes realmente reutilizáveis para centralizar qualquer filho dentro de qualquer pai! Basta adicionar as classes .centered-wrappere .centered-content.
Então, o que há com esse :beforeelemento? Isso facilita vertical-align: middle;e é necessário porque o alinhamento vertical não é relativo à altura do pai - o alinhamento vertical é relativo à altura do irmão mais alto !!! . Portanto, ao garantir que existe um irmão cuja altura é a altura do pai (100% altura, 0 largura para torná-lo invisível), sabemos que o alinhamento vertical será em relação à altura do pai.
Uma última coisa: você precisa garantir que suas tags htmle bodytenham o tamanho da janela para que centralizá-las seja o mesmo que centralizar no navegador!
html, body {
width:100%;
height:100%;
padding:0;
margin:0;}
qual é o propósito de 0pxno final, ao invés de auto?
Don Cheadle
8
Eu uso o flexbox ligado html. Para um efeito agradável, você pode combinar o cromo do navegador de modo a enquadrar seu conteúdo em tamanhos de tela maiores que o máximo da página. Acho que #eeeeeecombina muito bem. Você pode adicionar uma sombra de caixa para um bom efeito de flutuação.
html{
display: flex;
flex-flow: row nowrap;
justify-content: center;
align-content: center;
align-items: center;
height:100%;
margin:0;
padding:0;
background:#eeeeee;}
body {
margin:0;
flex:01auto;
align-self:auto;/*recommend 1920 / 1080 max based on usage stats, use 100% to that point*/
width:100%
max-width:900px;
height:100%;
max-height:600px;
background:#fafafa;-webkit-box-shadow:0px0px96px0px rgba(0,0,0,0.75);-moz-box-shadow:0px0px96px0px rgba(0,0,0,0.75);
box-shadow:0px0px96px0px rgba(0,0,0,0.75);}
Boa resposta moderna. Apenas alguns comentários. (a) O prefixo do fornecedor para box-shadowé provavelmente redundante, pois os navegadores que flextambém oferecem suporte box-shadow. (b) Há muito CSS que embeleza sua resposta, mas torna as partes importantes difíceis de distinguir. Obrigado
Manngo
Muito (b), no comentário de @Manngo acima.
cjauvin
Boa resposta. Moderno. Mas poderia ter sido mais simples com o mesmo conteúdo.
Respostas:
Acabei de topar com esta postagem antiga e, embora tenha certeza de que user01 já encontrou a resposta há muito tempo, descobri que as respostas atuais não funcionam muito bem. Depois de brincar um pouco usando as informações fornecidas pelos outros, encontrei uma solução que funcionava no IE, Firefox e Chrome. Em CSS:
Isso é quase idêntico à resposta de abernier, mas descobri que incluir a largura quebraria a centralização, assim como omitiria a margem automática. Espero que qualquer outra pessoa que tropeçar neste tópico considere minha resposta útil.
Observação: omita
html, body { height: 100%; }
centralizar apenas horizontalmente.fonte
Podes tentar:
fonte
body { margin:0 auto; max-width: 700px; }
e, em seguida, seu corpo terá até 700px e permitirá acondicionamento em dispositivos menores.EDITAR
A partir de hoje com o flexbox, você poderia
RESPOSTA ANTERIOR
fonte
style
atributo dahtml
entidade?Se eu tenho uma coisa que adoro compartilhar com relação ao CSS, é MINHA MANEIRA FAVE DE CENTRAR AS COISAS EM AMBOS OS EIXOS !!!
Vantagens deste método :
Sempre faço isso usando 2 classes: uma para especificar o elemento pai, cujo conteúdo será centralizado (
.centered-wrapper
), e a segunda para especificar qual filho do pai está centrado (.centered-content
). Esta segunda classe é útil no caso em que o pai tem vários filhos, mas apenas 1 precisa ser centralizado). Nesse caso,body
será o.centered-wrapper
, e umdiv
será interno.centered-content
.A ideia para centrar agora será fazer
.centered-content
uminline-block
. Isso facilitará facilmente a centralização horizontaltext-align: center;
e também permite a centralização vertical, como você verá.Isso lhe dá 2 classes realmente reutilizáveis para centralizar qualquer filho dentro de qualquer pai! Basta adicionar as classes
.centered-wrapper
e.centered-content
.Então, o que há com esse
:before
elemento? Isso facilitavertical-align: middle;
e é necessário porque o alinhamento vertical não é relativo à altura do pai - o alinhamento vertical é relativo à altura do irmão mais alto !!! . Portanto, ao garantir que existe um irmão cuja altura é a altura do pai (100% altura, 0 largura para torná-lo invisível), sabemos que o alinhamento vertical será em relação à altura do pai.Uma última coisa: você precisa garantir que suas tags
html
ebody
tenham o tamanho da janela para que centralizá-las seja o mesmo que centralizar no navegador!Fiddle: https://jsfiddle.net/gershy/g121g72a/
fonte
http://bluerobot.com/web/css/center1.html
fonte
0px
no final, ao invés deauto
?Eu uso o flexbox ligado
html
. Para um efeito agradável, você pode combinar o cromo do navegador de modo a enquadrar seu conteúdo em tamanhos de tela maiores que o máximo da página. Acho que#eeeeee
combina muito bem. Você pode adicionar uma sombra de caixa para um bom efeito de flutuação.imagem / dados cortesia StatCounter
fonte
box-shadow
é provavelmente redundante, pois os navegadores queflex
também oferecem suportebox-shadow
. (b) Há muito CSS que embeleza sua resposta, mas torna as partes importantes difíceis de distinguir. ObrigadoApenas aplique este estilo antes de aplicar qualquer CSS. Você pode alterar a largura de acordo com sua necessidade.
fonte
Apenas escreva
fonte
Tente isto
fonte