Por que não vai vertical-align: middle
funcionar? E ainda,vertical-align: top
faz o trabalho.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
Por que não vai vertical-align: middle
funcionar? E ainda,vertical-align: top
faz o trabalho.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
vertical-align
Respostas:
Na verdade, neste caso, é bastante simples: aplique o alinhamento vertical à imagem. Como está tudo em uma linha, é realmente a imagem que você deseja alinhar, não o texto.
Testado em FF3.
Agora você pode usar o flexbox para esse tipo de layout.
fonte
span
tamanho da fonte. Veja minha resposta .width:16px;height:16px
), você pode ver a imagem será muito baixa ...Aqui estão algumas técnicas simples para alinhamento vertical:
Alinhamento vertical de uma linha: meio
Essa é fácil: defina a altura da linha do elemento de texto igual à do contêiner
Alinhamento vertical de linhas múltiplas: inferior
Posicione absolutamente uma div interna em relação ao seu contêiner
Alinhamento vertical de linhas múltiplas: meio
Se você deve suportar versões antigas do IE <= 7
Para que isso funcione corretamente, você precisará hackear um pouco o CSS. Felizmente, existe um bug do IE que funciona a nosso favor. Definindo
top:50%
no contêiner etop:-50%
na div interna, você pode obter o mesmo resultado. Podemos combinar os dois usando outro recurso que o IE não suporta: seletores avançados de CSS.Altura variável do contêiner alinhamento vertical: meio
Esta solução requer um navegador um pouco mais moderno que as outras soluções, pois utiliza a
transform: translateY
propriedade. ( http://caniuse.com/#feat=transforms2d )A aplicação das 3 linhas de CSS a seguir em um elemento centralizará verticalmente em seu pai, independentemente da altura do elemento pai:
fonte
display:table
edisplay:table-cell
funcionam muito bem, exceto, é claro, no IE7 e abaixo. Depois de arrancar o cabelo por várias horas, decidi que realmente não precisava lidar com ninguém que ainda usasse o IE7-.display:table
possui algumas limitações em vários navegadores (no IE11max-height
não funciona se o elemento estiver dentro de uma célula da tabela), portanto, em alguns casos extremos, não é uma boa ideia alinhar verticalmente usando células da tabela.Mude o seu
div
para um contêiner flexível:Agora, existem dois métodos para centralizar os alinhamentos para todo o conteúdo:
Método 1:
DEMO
Método 2:
DEMO
Experimente diferentes valores de largura e altura
img
e diferentes tamanhos de fonte nospan
e você verá que eles sempre permanecem no meio do contêiner.fonte
justify-content: center;
e, para espaçamento (sem usar tags <br/>), você também pode inserir apadding: 1em;
. Ótima atualização para nós, desenvolvedores modernos de navegadores.Você deve aplicar
vertical-align: middle
a ambos os elementos para que ele seja centralizado perfeitamente.A resposta aceita centraliza o ícone em torno da metade da altura x do texto próximo a ele (conforme definido nas especificações do CSS ). O que pode ser bom o suficiente, mas pode parecer um pouco estranho, se o texto tiver ascendentes ou descendentes destacando-se na parte superior ou inferior:
À esquerda, o texto não está alinhado, à direita, como mostrado acima. Uma demonstração ao vivo pode ser encontrada neste artigo sobre alinhamento vertical .
Alguém falou sobre por que
vertical-align: top
funciona no cenário? A imagem na pergunta é provavelmente mais alta que o texto e, portanto, define a borda superior da caixa de linha.vertical-align: top
no elemento span, basta posicioná-lo na parte superior da caixa de linha.A principal diferença de comportamento entre
vertical-align: middle
etop
é que o primeiro move elementos em relação à linha de base da caixa (que é colocada sempre que necessário para cumprir todos os alinhamentos verticais e, portanto, parece bastante imprevisível ) e a segunda em relação aos limites externos da caixa de linha (que é mais tangível).fonte
A técnica usada na resposta aceita funciona apenas para texto de linha única ( demo ), mas não para texto de várias linhas ( demo) ) - conforme observado lá.
Se alguém precisar centralizar verticalmente o texto com várias linhas em uma imagem, aqui estão algumas maneiras (Métodos 1 e 2 inspirados neste artigo de CSS-Tricks )
Método # 1: Tabelas CSS ( FIDDLE ) (IE8 + ( caniuse ))
CSS:
Método # 2: Pseudo-elemento no contêiner ( FIDDLE ) (IE8 +)
CSS:
Método # 3: Flexbox ( FIDDLE ) ( caniuse )
CSS (o violão acima contém prefixos de fornecedores):
fonte
Este código funciona no IE e no FF:
fonte
Porque você precisa definir
line-height
a altura da div para que isso funcionefonte
Basicamente, você terá que descer para CSS3.
fonte
Para o registro, os "comandos" de alinhamento não devem funcionar em um SPAN, porque é uma tag em linha , não um nível de bloco marca no . Coisas como alinhamento, margem, preenchimento, etc. não funcionarão em uma tag in-line porque o objetivo da inline não é interromper o fluxo de texto.
O CSS divide as tags HTML em dois grupos: em linha e em nível de bloco. Pesquise "bloco css vs inline" e um ótimo artigo será exibido ...
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
(Compreender os princípios básicos do CSS é a chave para que ele não seja tão irritante)
fonte
text-align
evertical-align
(com a excepção da sua aplicação emtd
elementos para fins legadas) são especificamente destinados parainline
einline-block
elementos (span
,img
, etc.).Use
line-height:30px
para a extensão para que o texto fique alinhado com a imagem:fonte
Outra coisa que você pode fazer é definir o texto
line-height
para o tamanho das imagens dentro do<div>
. Em seguida, defina as imagens paravertical-align: middle;
Essa é seriamente a maneira mais fácil.
fonte
Ainda não vi uma solução
margin
em nenhuma dessas respostas, então aqui está a minha solução para esse problema.Esta solução só funciona se você souber a largura da sua imagem.
O HTML
O CSS
fonte
Eu geralmente uso 3px no lugar de
top
. Ao aumentar / diminuir esse valor, a imagem pode ser alterada para a altura necessária.fonte
Escreva essas propriedades de extensão
Use
display:inline-block;
When you usevertical-align
property. Essas são propriedades associadasfonte
Você pode definir a imagem como
inline element
usando adisplay
propriedadefonte
Em um botão no jQuery mobile, por exemplo, você pode ajustá-lo um pouco aplicando este estilo à imagem:
fonte
Solução multilinha:
http://jsfiddle.net/zH58L/6/
Funciona em todos os navegadores e ie9 +
fonte
Pode ser confuso, eu concordo. Tente utilizar os recursos da tabela. Eu uso esse truque simples de CSS para posicionar os modais no centro da página. Possui amplo suporte ao navegador:
e parte CSS:
Observe que é necessário estilizar e ajustar o tamanho da imagem e do contêiner da tabela para que funcione conforme desejado. Aproveitar.
fonte
Primeiramente, o CSS embutido não é recomendado, ele realmente atrapalha o seu HTML.
Para alinhar imagem e amplitude, você pode simplesmente fazê-lo
vertical-align:middle
.fonte
Não sei por que ele não o renderiza no navegador de navegação, mas normalmente uso um trecho como esse ao tentar exibir um cabeçalho com uma imagem e um texto centralizado, espero que ajude!
https://output.jsbin.com/jeqorahupo
fonte
Você provavelmente quer isso:
Como outros sugeriram, tente
vertical-align
a imagem:CSS não é chato. Você simplesmente não lê a documentação . ; P
fonte