Eu tenho o código a seguir que configura um contêiner que tem uma altura que muda com a largura quando o navegador é redimensionado (para manter uma proporção quadrada).
HTML
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<IMG HERE>
</div>
</div>
CSS
.responsive-container {
position: relative;
width: 100%;
border: 1px solid black;
}
.dummy {
padding-top: 100%; /* forces 1:1 aspect ratio */
}
.img-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
Como alinhar verticalmente o IMG dentro do contêiner? Todas as minhas imagens têm alturas variáveis e o contêiner não pode ter uma altura fixa / altura da linha porque é responsiva ... Por favor, ajude!
html
css
responsive-design
vertical-alignment
user1794295
fonte
fonte
Respostas:
Aqui está uma técnica para alinhar elementos embutidos dentro de um pai , horizontal e verticalmente ao mesmo tempo:
Alinhamento vertical
1) Nesta abordagem, criamos um
inline-block
(pseudo-) elemento como o primeiro (ou último) filho do pai e definimos suaheight
propriedade100%
para assumir toda a altura do pai .2) Além disso, a adição
vertical-align: middle
mantém os elementos embutidos (-bloco) no meio do espaço da linha. Então, adicionamos essa declaração CSS ao primeiro filho e ao nosso elemento (a imagem ).3) Finalmente, para remover o caractere de espaço em branco entre os elementos embutidos (-bloco) , poderíamos definir o tamanho da fonte do pai como zero por
font-size: 0;
.Nota: usei a técnica de substituição de imagem de Nicolas Gallagher a seguir.
Quais são os benefícios?
Não há necessidade de especificar explicitamente as dimensões do elemento de imagem.
Podemos facilmente usar essa abordagem para alinhar um
<div>
elemento verticalmente também; que pode ter um conteúdo dinâmico (altura e / ou largura). Mas observe que você deve redefinir afont-size
propriedade dodiv
para exibir o texto interno. Demo Online .A saída
Container Responsivo
Esta seção não responderá à pergunta, pois o OP já sabe como criar um contêiner responsivo. No entanto, vou explicar como isso funciona.
Para fazer a altura de um elemento de contêiner mudar com sua largura (respeitando a proporção), poderíamos usar um valor percentual para a
padding
propriedade superior / inferior .Um valor percentual no preenchimento / margens superior / inferior é relativo à largura do bloco que o contém.
Por exemplo:
Aqui está a demonstração online . Comente as linhas da parte inferior e redimensione o painel para ver o efeito.
Além disso, poderíamos aplicar a
padding
propriedade a um filho fictício ou:before
/:after
pseudoelemento para obter o mesmo resultado. Mas observe que, nesse caso, o valor percentual ativadopadding
é relativo à largura do.responsive-container
próprio.Demo # 1 .
Demo # 2 (usando
:after
pseudo-elemento)Adicionando o conteúdo
O uso da
padding-top
propriedade causa um enorme espaço na parte superior ou inferior do conteúdo, dentro do contêiner .Para corrigir isso, temos que envolva o conteúdo por um elemento de invólucro, remover esse elemento de documento fluxo normal usando posicionamento absoluto e, finalmente, expandir o invólucro (bu usando
top
,right
,bottom
eleft
propriedades) para preencher todo o espaço de seu pai, o recipiente .Aqui vamos nós:
Aqui está a demonstração online .
Reunindo todos
Aqui está a demonstração de trabalho .
Obviamente, você pode evitar o uso de
::before
pseudoelemento para compatibilidade do navegador e criar um elemento como o primeiro filho do.img-container
:DEMO ATUALIZADO .
Usando
max-*
propriedadesPara manter a imagem dentro da caixa em largura menor, você pode definir
max-height
emax-width
propriedade na imagem:Aqui está a demo atualizada .
fonte
font-size: 0;
!Com o flexbox, isso é fácil:
FIDDLE
Basta adicionar o seguinte ao contêiner de imagem:
fonte
-webkit-
prefixo, ou tentar uma biblioteca como prefixfree.js :)Use este css, pois você já possui a marcação:
Aqui está um JsBin funcional: http://jsbin.com/ihilUnI/1/edit
Essa solução funciona apenas para imagens quadradas (porque um valor percentual da margem superior depende da largura do contêiner, não da altura). Para imagens de tamanho aleatório, você pode fazer o seguinte:
Solução de trabalho JsBin: http://jsbin.com/ihilUnI/2/edit
fonte
Você pode centralizar uma imagem, horizontal e verticalmente, usando
margin: auto
um posicionamento absoluto. Além disso:fonte
Tente este
fonte
.img-container
está absolutamente posicionado - isso é necessário para manter a proporção quadrada / altura dinâmica.Aqui está uma técnica que permite centralizar QUALQUER conteúdo na vertical e na horizontal!
Basicamente, você só precisa de dois contêineres e verifique se seus elementos atendem aos seguintes critérios.
O recipiente externo:
display: table;
O recipiente interno:
display: table-cell;
vertical-align: middle;
text-align: center;
A caixa de conteúdo:
display: inline-block;
Se você usar esta técnica, basta adicionar sua imagem (junto com qualquer outro conteúdo que você deseja que ela seja acompanhada) à caixa de conteúdo.
Demo:
Veja também este violino !
fonte
Me deparei com este segmento em busca de uma solução que:
Testando algumas das soluções postadas acima, não encontrei uma que atendesse a todos esses critérios; por isso, montei essa simples que pode ser útil para outras pessoas que precisam fazer o mesmo:
Exemplo de trabalho no JSFiddle
fonte
Experimentar
Html
CSS
fonte
Código HTML
<div class="image-container"> <img src=""/> </div>
código css
fonte
Faça outra div e adicione 'dummy' e 'img-container' dentro da div
Faça HTML e CSS como segue
Em vez de 100% para o 'contêiner responsivo', você pode dar a altura que deseja.,
fonte