Eu tenho um div com duas imagens e um h1
. Todos eles precisam estar alinhados verticalmente dentro da div, próximos um do outro.
Uma das imagens precisa ser absolute
posicionada dentro da div.
Qual é o CSS necessário para que isso funcione em todos os navegadores comuns?
<div id="header">
<img src=".." ></img>
<h1>testing...</h1>
<img src="..."></img>
</div>
html
css
vertical-alignment
Abdu
fonte
fonte
Respostas:
Uau, esse problema é popular. É baseado em um mal-entendido no
vertical-align
propriedade. Este excelente artigo explica:Entendimento
vertical-align
, ou "Como (não) centralizar verticalmente o conteúdo", de Gavin Kistner.“Como centralizar no CSS” é uma ótima ferramenta da web que ajuda a encontrar os atributos de centralização do CSS necessários para diferentes situações.
Em poucas palavras (e para evitar a podridão do link) :
vertical-align: middle
. No entanto, o "contexto" não é toda a altura do contêiner pai, é a altura da linha de texto em que estão. Exemplo de jsfiddleabsolute
e especificar a suaheight
,margin-top
etop
posição. exemplo jsfiddleline-height
para preencher sua altura. Este método é bastante versátil na minha experiência. exemplo jsfiddlefonte
vertical-align: middle
) é que você precisa especificar uma altura fixa. Não é muito possível para Web Design Responsivo .inline-block
etable-cell
. Se você estiver tendo problemas com isso, tente ajustarline-height
o elemento do contêiner (isto é, contexto), pois ele é usado nosvertical-align
cálculos da caixa de linha.Agora que o suporte ao flexbox está aumentando, esse CSS aplicado ao elemento que contenha centralizaria verticalmente o item contido:
Use a versão prefixada se você também precisar direcionar o Explorer 10 e navegadores Android antigos (<4.4):
fonte
align-items
seçãoEu usei esse código muito simples:
HTML:
CSS:
Obviamente, se você usa um
.class
ou um#id
, o resultado não será alterado.fonte
Funcionou para mim:
fonte
margin : 0 auto
, ele não funcionará por causa da funçãodisplay: table-cell
fonte
justify-content: center
corrigiu minha falta de centralização horizontalUma técnica de um amigo meu:
HTML:
CSS:
DEMO aqui
fonte
Para posicionar elementos de bloco no centro (funciona no IE9 e acima), é necessário um invólucro
div
:fonte
Alinhado como ? Partes superiores das imagens alinhadas com a parte superior do texto?
Absolutamente posicionado em relação ao DIV? Talvez você possa esboçar o que está procurando ...?
A fd descreveu as etapas para o posicionamento absoluto, além de ajustar a exibição do
H1
elemento para que as imagens apareçam alinhadas com ele. Para isso, vou acrescentar que você pode alinhar as imagens usando overtical-align
estilo:... isso colocaria o cabeçalho e as imagens juntos, com as bordas superiores alinhadas. Existem outras opções de alinhamento; veja a documentação . Também é recomendável descartar o DIV e mover as imagens dentro do
H1
elemento - isso fornece valor semântico ao contêiner e elimina a necessidade de ajustar a exibição doH1
:fonte
Use esta fórmula e funcionará sempre sem rachaduras:
fonte
Quase todos os métodos precisam especificar a altura, mas geralmente não temos alturas.
Então, aqui está um truque CSS3 de 3 linhas que não exige saber a altura.
É suportado até no IE9.
com seus prefixos de fornecedor:
Fonte: http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/
fonte
De duas maneiras, você pode alinhar elementos vertical e horizontalmente
1. Bootstrap 4.3.X
para alinhamento vertical:
d-flex align-items-center
para alinhamento horizontal:
d-flex justify-content-center
2. CSS3
fonte
Meu truque é colocar dentro da div uma tabela com 1 linha e 1 coluna, definir 100% da largura e altura e a propriedade vertical-align: middle.
Fiddle: http://jsfiddle.net/joan16v/sbqjnn9q/
fonte
# 3 maneiras de fazer div filho central em um div pai
Método de transformação / conversão
Demo
fonte
Usando CSS no centro vertical, é possível deixar os contêineres externos agirem como uma tabela e o conteúdo como uma célula da tabela. Nesse formato, seus objetos permanecerão centralizados. :)
Aninhei vários objetos no JSFiddle por exemplo, mas a ideia principal é a seguinte:
HTML
CSS
O exemplo de vários objetos:
HTML
CSS
Resultado
https://jsfiddle.net/martjemeyer/ybs032uc/1/
fonte
Por padrão, h1 é um elemento do bloco e será renderizado na linha após a primeira img e fará com que a segunda img apareça na linha após o bloco.
Para impedir que isso ocorra, você pode definir o h1 para ter um comportamento de fluxo embutido:
Quanto ao posicionamento absoluto do img dentro da div , você precisa definir a div que contém para ter um "tamanho conhecido" antes que isso funcione corretamente. Na minha experiência, você também precisa alterar o atributo position do padrão - position: relative funciona para mim:
Se você conseguir fazer isso funcionar, tente remover progressivamente os atributos de altura, largura e posição do div.header para obter os atributos mínimos necessários para obter o efeito desejado.
ATUALIZAR:
Aqui está um exemplo completo que funciona no Firefox 3:
fonte
Podemos usar um cálculo de função CSS para calcular o tamanho do elemento e, em seguida, posicionar o elemento filho de acordo.
Exemplo de HTML:
E CSS:
Demonstração criada aqui: https://jsfiddle.net/xnjq1t22/
Esta solução funciona bem com recursos responsivos
div
height
ewidth
também.Nota: A função calc não é testada quanto à compatibilidade com navegadores antigos.
fonte
Hoje, encontrei uma nova solução alternativa para alinhar verticalmente várias linhas de texto em uma div usando CSS3 (e também estou usando o sistema de grade de bootstrap v3 para embelezar a interface do usuário), que é a seguinte:
De acordo com meu entendimento, o pai imediato do elemento que contém o texto deve ter alguma altura. Espero que ajude você também. Obrigado!
fonte
Minha nova maneira favorita de fazer isso é com uma grade CSS:
fonte
Basta usar uma tabela de uma célula dentro da div! Basta definir a altura da célula e da tabela e com até 100% e você pode usar o alinhamento vertical.
Uma tabela de uma célula dentro da div lida com o alinhamento vertical e é compatível com versões anteriores da Idade da Pedra!
fonte
Uso a seguinte solução (sem posicionamento e sem altura de linha) há mais de um ano, que também funciona com o IE 7 e 8.
fonte
Esta é minha solução pessoal para um elemento i dentro de uma div
Exemplo JSFiddle
HTML
CSS
fonte
Para mim, funcionou desta maneira:
O elemento "a" convertido em um botão, usando as classes Bootstrap, e agora está centralizado verticalmente dentro de uma "div" externa.
fonte
fonte
Só isso:
Uma tabela de uma célula dentro da div lida com o alinhamento vertical e é compatível com versões anteriores da Idade da Pedra!
fonte
fonte
Aqui está apenas outra abordagem (responsiva):
http://jsfiddle.net/herrfischerhamburg/JcVxz/
fonte
Eu sou um cara do .NET que acabou de entrar em programação na web. Eu não usei CSS (bem, um pouco). Usei um pouco de JavaScript para realizar a centralização vertical junto com a função .css do jQuery.
Estou apenas postando tudo do meu teste. Provavelmente não é muito elegante, mas funciona até agora.
fonte
...
ou CSS
Cobertura do navegador
fonte
table-cell
, o que dávertical-align: middle;
certo. Melhor ainda, ele funciona sem a necessidade de uma div de wrapper / buffer aninhado e funciona para texto e imagens (ou ambas), e você não precisa alterar as propriedades da posição.