Por que no código seguir a altura do div
é maior que a altura do img
? Há uma lacuna abaixo da imagem, mas não parece ser um preenchimento / margem.
Qual é a diferença ou espaço extra abaixo da imagem?
#wrapper {
border: 1px solid red;
width:200px;
}
img {
width:200px;
}
<div id="wrapper">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
Respostas:
Por padrão, uma imagem é renderizada em linha, como uma letra, para que fique na mesma linha em que a, b, ce ed.
Há espaço abaixo dessa linha para os descendentes encontrados em letras como g, j, peq.
Você pode:
vertical-align
imagem para posicioná-la em outro lugar (por exemplo, omiddle
) oudisplay
modo para que não fique embutido.A imagem incluída é de domínio público e é originária do Wikimedia Commons
fonte
line-height
. Definirline-height
a dimensão desejada também superaria o espaço em branco indesejado.Outra opção sugerida aqui é definir o estilo da imagem como
style="display: block;"
fonte
inline-block
se você ainda deseja que seja exibido em linha, como as imagens normalmente fazem.inline-block
parece não estar funcionando.Conserto rápido:
Para remover o espaço abaixo da imagem , você pode:
vertical-align: bottom;
vertical-align: top;
ouvertical-align: middle;
display:block;
Veja o código a seguir para uma demonstração ao vivo:
Mostrar snippet de código
Explicação: por que há uma lacuna na imagem?
A lacuna ou espaço extra sob a imagem não é um bug ou problema, é o comportamento padrão. A causa principal é que as imagens são elementos substituídos ( consulte Elementos substituídos pelo MDN ). Isso permite que eles "ajam como imagem" e tenham suas próprias dimensões intrínsecas, relação de aspecto ...
Os navegadores calculam suas propriedades de exibição,
inline
mas fornecem um comportamento especial que os aproxima.inline-block
elementos (como você pode alinhar verticais los, dar uma altura, margem superior / inferior e estofamento, transforma ...).Isso também significa que:
Como os navegadores, por padrão, calculam a propriedade de alinhamento vertical para a linha de base, esse é o comportamento padrão. A imagem a seguir mostra onde a linha de base está localizada no texto:
( Fonte da imagem )
Os elementos alinhados da linha de base precisam manter espaço para os descendentes que se estendem abaixo da linha de base (como
j, p, g ...
), como você pode ver na imagem acima. Nesta configuração, a parte inferior da imagem está alinhada na linha de base, como você pode ver neste exemplo:É por isso que o comportamento padrão da
<img>
tag cria uma lacuna na parte inferior do contêiner e por que alterar a propriedade vertical-align ou a propriedade display remove-a como na seguinte demonstração:fonte
line-height:0;
, mas eu não considero isso como uma boa solução em comparação com a alteração das-align vertical ou exibição propriedadesfont-size:0
: eles definem o tamanho da fonte para o tamanho mínimo nas configurações do usuário.middle
text-top
sub
super
posição na imagem não está certa.Também é possível anular a altura da linha dos pais:
Todas as correções: http://jsfiddle.net/FaPFv/
fonte
Tudo que você precisa fazer é atribuir esta propriedade:
As imagens por padrão possuem esta propriedade:
fonte
Você pode usar vários métodos para esse problema, como
Usando
line-height
Usando
display: flex
Usando
display:
block
,table
,flex
einherit
fonte
line-height
hack muito desleixado , ou pelo menos deixe claro, por que é a pior "solução" de todas: no momento em que alguém coloca texto ao lado da imagem (especialmente multilinhas pré-formatadas com tags BR), elas vão encontrar-se em uma situação pior do que começaram.Eu usei
line-height:0
e funciona bem para mim.fonte
<BR>
) ao lado da imagem, eles terão uma bagunça mal posicionada, sobreposta / pendente.Achei que funciona muito bem usando display: block; na imagem e alinhamento vertical: top; no texto.
ou você pode editar o código em JS FIDDLE
fonte
Acabei de adicionar
float:left
ao div e funcionoufonte
float:left
faz com quedisplay:block