Como você pode alinhar uma imagem dentro de uma contenção div
?
Exemplo
No meu exemplo, preciso centralizar verticalmente o <img>
no <div>
com class ="frame
":
<div class="frame" style="height: 25px;">
<img src="http://jsfiddle.net/img/logo.png" />
</div>
.frame
A altura da imagem é fixa e a altura da imagem é desconhecida. Posso adicionar novos elementos .frame
se essa for a única solução. Estou tentando fazer isso no Internet Explorer 7 e posterior, WebKit, Gecko.
Veja o jsfiddle aqui .
.frame {
height: 25px; /* Equals maximum image height */
line-height: 25px;
width: 160px;
border: 1px solid red;
text-align: center;
margin: 1em 0;
}
img {
background: #3A6F9A;
vertical-align: middle;
max-height: 25px;
max-width: 160px;
}
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=15 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=13 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=11 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=9 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=7 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=5 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=3 />
</div>
css
image
vertical-alignment
Arnaud Le Blanc
fonte
fonte
Respostas:
A única maneira (e a melhor entre navegadores) que conheço é usar um
inline-block
auxiliar comheight: 100%
evertical-align: middle
nos dois elementos.Portanto, existe uma solução: http://jsfiddle.net/kizu/4RPFa/4570/
Mostrar snippet de código
Ou, se você não deseja ter um elemento extra nos navegadores modernos e não se importa em usar expressões do Internet Explorer, pode usar um pseudoelemento e adicioná-lo ao Internet Explorer usando uma Expressão conveniente, que é executada apenas uma vez por elemento , para que não haja problemas de desempenho:
A solução com
:before
eexpression()
para o Internet Explorer: http://jsfiddle.net/kizu/4RPFa/4571/Mostrar snippet de código
Como funciona:
Quando você tem dois
inline-block
elementos próximos um do outro, pode alinhar um ao outro, paravertical-align: middle
obter algo assim:Quando você tem um bloco com altura fixa (em
px
,em
ou outra unidade absoluta), você pode definir a altura de blocos internos em%
.inline-block
comheight: 100%
um bloco de altura fixa alinharia outroinline-block
elemento nele (<img/>
no seu caso) verticalmente perto dele.fonte
.frame
e.frame:before
. Uma solução proposta aqui é adicionarmargin-left: -4px
a.frame
. Espero que isto ajude.<img src=""/>
NÃO está dentro do<span></span>
auxiliar que foi adicionado. Está lá fora. Eu quase puxei cada mecha do meu cabelo por não perceber isso.Isso pode ser útil:
fonte
position:fixed;
A solução de matejkramny é um bom começo, mas imagens grandes têm uma proporção errada.
Aqui está o meu garfo:
Demo: https://jsbin.com/lidebapomi/edit?html,css,output
HTML:
CSS:
fonte
top: 0;
. Isso resulta em apenasbottom: 0;
ser aplicado verticalmente.Uma solução de três linhas:
Isso se aplica a qualquer coisa.
A partir daqui .
fonte
position: absolute;
porque precisa de uma largura fluida.Uma solução CSS pura :
Coisas importantes
fonte
Para uma solução mais moderna, e se não houver necessidade de oferecer suporte a navegadores herdados, faça o seguinte:
Aqui está uma caneta: http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e2460664a0fa3f3e
fonte
align-self
para itens individuaisalign-self
é que os itens flex aumentam a altura do contêiner pai.Dessa forma, você pode centralizar uma imagem verticalmente ( demo ):
fonte
font-size: 0
paradiv
. Para contêineres muito grandes, você pode perdê-lo, mas se o seudiv
é 100px e o img é 80px, será alguns pixels menor.Além disso, você pode usar o Flexbox para obter o resultado correto:
fonte
Existe uma solução super fácil com o flexbox!
fonte
Você pode tentar definir o CSS do PI como
display: table-cell; vertical-align: middle;
fonte
PI
"?Você pode tentar o código abaixo:
fonte
Solução de imagem de fundo
Eu removi o elemento image completamente e o defini como plano de fundo da div com uma classe de
.frame
http://jsfiddle.net/URVKa/2/
Isso pelo menos funciona bem no Internet Explorer 8, Firefox 6 e Chrome 13.
Eu verifiquei, e esta solução não funcionará para reduzir imagens maiores que 25 pixels de altura. Existe uma propriedade chamada
background-size
que define o tamanho do elemento, mas é o CSS 3 que entra em conflito com os requisitos do Internet Explorer 7.Aconselho você a refazer as prioridades e o design do navegador para obter os melhores navegadores disponíveis ou obter algum código do servidor para redimensionar as imagens, se você quiser usar esta solução.
fonte
Imagine que você tem
E css:
fonte
Você poderia fazer isso:
Demo
http://jsfiddle.net/DZ8vW/1
CSS
Javascript
fonte
http://jsfiddle.net/MBs64/
A propriedade key é
display: table-cell;
para.frame
.Div.frame
é exibido como alinhado com isso, então você precisa envolvê-lo em um elemento de bloco.Isso funciona no Firefox, Opera, Chrome, Safari e Internet Explorer 8 (e posterior).
ATUALIZAR
Para o Internet Explorer 7, precisamos adicionar uma expressão CSS:
fonte
Minha solução: http://jsfiddle.net/XNAj6/2/
fonte
Isso funciona para navegadores modernos (2016 no momento da edição), como mostrado nesta demonstração no codepen
É muito importante que você atribua uma classe às imagens ou use a herança para direcionar as imagens que você precisa centralizar. Neste exemplo, usamos
.frame img {}
para que apenas as imagens agrupadas por uma div com uma classe de.frame
sejam direcionadas.fonte
Experimente esta solução com CSS puro http://jsfiddle.net/sandeep/4RPFa/72/
Talvez seja o principal problema com o seu HTML. Você não está usando aspas quando define c
lass
&image height
no seu HTML.CSS:
Quando trabalho com a
img
tag, ela deixa 3 pixels a 2 pixels de espaçotop
. Agora eu diminuoline-height
e está funcionando.CSS:
A
line-height
propriedade é renderizada de maneira diferente em diferentes navegadores. Portanto, temos que definir diferentesline-height
navegadores de propriedades.Veja este exemplo: http://jsfiddle.net/sandeep/4be8t/11/
Confira este exemplo sobre
line-height
diferentes navegadores: diferenças de altura de entrada no Firefox e Chromefonte
Não tenho certeza sobre o Internet Explorer, mas no Firefox e Chrome, se você tiver um
img
em umdiv
contêiner, o seguinte conteúdo CSS deverá funcionar. Pelo menos para mim funciona bem:fonte
display:table-cell;
não aceita% como largurasSolução usando uma tabela e células de tabela
Às vezes, deve ser resolvido exibindo como tabela / célula de tabela. Por exemplo, uma tela de título rápida. É uma maneira recomendada pelo W3 também. Eu recomendo que você verifique este link chamado Centralizando um bloco ou imagem do W3C.org.
As dicas usadas aqui são:
Pessoalmente, discordo do uso de ajudantes para esse fim.
fonte
Uma maneira fácil que funciona para mim:
Funciona muito bem para o Google Chrome. Experimente este em outro navegador.
fonte
Para centralizar uma imagem dentro de um contêiner (poderia ser um logotipo) além de um texto como este:
Basicamente, você quebra a imagem
fonte
Se você pode viver com margens do tamanho de pixels, basta adicionar
font-size: 1px;
ao.frame
. Mas lembre-se de que agora no.frame
1em = 1px, o que significa que você também precisa definir a margem em pixels.http://jsfiddle.net/feeela/4RPFa/96/
Agora não está mais centrado no Opera…
fonte
Eu tive o mesmo problema. Isso funciona para mim:
fonte
Você pode usar isto:
fonte
Usando
table
etable-cell
method fazem o trabalho, especialmente porque você também direciona alguns navegadores antigos, eu crio um snippet para você, que você pode executá-lo e verificar o resultado:fonte
Eu tenho brincado com o uso de preenchimento para alinhamento central. Você precisará definir o tamanho do contêiner externo de nível superior, mas o contêiner interno deve ser redimensionado e é possível definir o preenchimento com diferentes valores percentuais.
jsfiddle
fonte
A melhor solução é que
fonte
Use este:
E você pode variar
font-size
.fonte
Deseja alinhar uma imagem que possui um texto / título e ambos estão dentro de uma div?
Veja no JSfiddle ou no Run Code Snippet.
Apenas certifique-se de ter um ID ou uma classe em todos os seus elementos (div, img, title, etc.).
Para mim, funciona esta solução em todos os navegadores (para dispositivos móveis, você deve adaptar seu código com: @media).
fonte