And After - Design e Tecnologia por sua conta

Solução do problema min-height min-width no IE

Solução do problema min-height min-width no IE

BomEste texto foi classificado como Bom
Em Programação, Internet
Por Guilherme Serrano
18 de Agosto de 2007

Pequeno tutorial para a resolução do problema com Internet Explorar na interpretação do min-height e min-width através de um pequeno hack no CSS.

RSS Acompanhe o And After por Feeds RSS!


Antes de começar, vamos ver as funções das propriedades que serão usadas nesse tutorial:

height
define a altura de um elemento

min-height
define a altura mínima para um objeto

O mesmo se aplica a width, porém para a largura e não para a altura.


Problema

Porém o IE, que gosta e complicar a vida dos desenvolvedores, interpreta essas propriedades de forma um pouco diferente:

height é interpretado como altura mínima
min-height é ignorado

Talvez alguém tenha percebido um pequeno erro que existia na home do And After, quando uma publicação aparecia na capa com um resumo muito curto, a publicação que vinha logo após se "amontoava" na de cima. Isso acontecia somente no Internet Explorer por não respeitar a altura mínima da div onde o resumo e a imagem se encontram.

CSS que dava problema no IE

.divresumo {
min-height:150px;
}

No Firefox isso é o suficiente, pois se o conteúdo dentro da div for maior que 150px ela automaticamente terá sua altura aumentada, já que a propriedade height não foi setada. Poderia ser setada como
.divresumo {
min-height:150px;
height: auto;
}

Porém, no IE acontecia o erro já citado.


Solução

Para solucionar este problema no IE seria necessário colocar height:

.divresumo {
height:150px;
}

Aí ele interpretaria como min-height, porém no FF a div ficaria limitada a 150px de altura. Um hack que quebra o comando no IE é feito, deixando que apenas outros navegadores interpretem de forma correta, veja só:

.divresumo {
min-height:150px;
height:150px
}

html>body .divresumo {
height: auto;
}

O primeiro bloco é lido por todos os navegadores, setando min-height e height para 150px.

Para permitir que a div tenha mais de 150px também em outro navegadores adicionamos o hack em vermelho, que não será interpretado pelo IE. Assim para os outros navegadores height volta a ter o valor auto.

Pronto, agora a propriedade height:150 fica como resultado final apenas no IE, enquanto nos outros ela assume o valor auto.

Espero que seja útil e tenha ficado bem explicadinho aí...

O que você achou do texto?

  • Muito ruim
  • Ruim
  • Regular
  • Bom
  • Muito bom
Sua opinião é o que faz a comunidade funcionar, colabore para isso!

Tags: desenvolvimento, css, padroes, webstandards, hack, internet-explorer, firefox

Enviar para um amigo
Você pode comentar, assinar o feed, conhecer mais sobre o autor e ajudar a divulgar este artigo em sua ferramenta favorita através dos botões abaixo.
  • Rec6
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Eu curti
O Autor

[@]
[www]

Graduando em design estou desenvolvendo meu TCC sobre usabilidade - focando no And After! ;)

Viciado design e web, adoro desenvolvimento, design, mashups, usabilidade, o universo e tudo mais.

Status
Karma: 11173
Opiniões: 30

Mais deste autor
Comentários

LeoReis
[www] 15/11/2007 05:05:00

Legal o post...
Mas acho que tenho uma solução melhor!
Esse hack pode deixar teu CSS inválido pela W3C...
A solução é simples:

.divresumo {
min-height:150px;
height:150px;
height:auto !important;
}

Pronto, CSS limpo, sem hacks e funcionando em todos os navegadores xD
Apenas acrecentei uma opção chamada "!important"
Ela significa que você está mandando o navegador dar maior importância para a opção "auto" de height

Espero ter ajudado =)

LeoReis



[Responder este comentário]

Luiz Gustavo (BH)
[www] 4/6/2008 19:39:00

Forma correta no Internet Explorer:

[código]
<html>
<style type="text/css">
.larguramaxima {
width: 100%;
min-width: 500px;
}
</style>
<![if IE]>
<style>
.larguramaxima {
width: expression(document.body.clientWidth < 500? "500" : "100%");
}
</style>
<![endif]>
<body>
<div class="larguramaxima"> texto...</div>
</body>
</html>
[final do código]

Ou seja, caso o navegador seja Internet Explorer, a classe será substituída com expressão em javascript reconhecida pelo internet explorer... Caso não seja IE, utilizará "min-width"... No exemplo que coloquei, a tag <div> ocupará 100% da página, com mínimo de 500px.
vc pode estabelecer um valor mínimo e máximo:
.larguramaxima {
width: expression(document.body.clientWidth > 800? "800px" :
document.body.clientWidth < 500? "500px" :
"auto");
}

Neste exemplo estabeleci um mínimo de 500px e máximo de 800px..

Espero ter ajudado.
Abraços a todos.

[Responder este comentário]
Deixe seu comentário!

Nome (requerido)

E-mail (requerido - não será divulgado)

URL

Quanto é 4 + 2?




Assinar o Feed RSS Assinar por e-mail
Login
Últimos aprovados
Eu Compraria! Produtos legais para geeks e designers. O Desenvolvedor Comprar Câmera Digital