Hacks
Listagem horizontal onde os itens de lista vão ficar sempre com tamanho igual (se baseando na altura do maior dos itens): utilizando somente HTML e CSS.
Seria uma listagem no modelo da Americanas.com e Submarino – Porém quando verifiquei o código desses sites vi que não era o ideal, pois utilizam um monte de ULs separadas para cada linha: sendo que deveria ser somente 1.
Pontos positivos – Lista com Display Inline-block
- Todos itens da linha se adaptam ao tamanho do maior;
- Sem float: sem preoupações com clear, contemfloat, etc;
- Possível listar tudo utilizando somente uma UL;
Pontos negativos – Suporte
Veja o exemplo de como vai ficar: Listagem horizontal com itens de mesma altura.
Código HTML
Somente uma listagem UL com items LI contendo uma imagem e um parágrafo.
<!-- abre listagem -->
<ul>
<li>
<img src="imagens/listagem-item1.jpg" alt="Quadro em aquarela 1" />
<p>Quadro em Aquarela 60x60px. Pode ser comprado em até <strong>6x no cartão</strong> ou à vista com desconto de <strong>50%</strong> - por Kasper Jeppesen, 2010</p>
</li>
<li>
<img src="imagens/listagem-item2.jpg" alt="Quadro em aquarela 2" />
<p>Esse item é uma obra de arte fantástica em Aquarela 60x60px - por Kasper Jeppesen, 2010</p>
</li>
<li>
<img src="imagens/listagem-item3.jpg" alt="Quadro em aquarela 3" />
<p>Obra em Aquarela</p>
</li>
</ul>
<!-- fecha listagem -->
E o CSS:
#limites ul { list-style: none; letter-spacing: -3px;}
#limites ul li { display: inline-block; width: 100px; margin: 10px 0; padding: 20px; border-top: 1px #fff solid; text-align: center; vertical-align: top; letter-spacing: normal; zoom: 1; }
#limites ul li p { text-align: left; }
- Letter-spacing com valor negativo na UL, pois o display insere automaticamente alguns pixels de margem entre os elementos. Esse valor é zerado novamente no LI (normal).
- Todos itens se alinham ao topo
- Paddings com a borda simulam a união dos elementos
Se for testar nos IEs até agora, vai encontrar um BUG como esse:

Quebra de layout nos IEs
O quadro vermelho indica a quebra, pois esses navegadores não suportam o DISPLAY inline-block corretamente.
Não se preocupe – para concertar isso é só usar um hack para o IE6:
* html #limites ul li { display: inline; }
E um ajuste para o IE7 – em um CSS separado (se não lembra como fazer, é bom dar uma lida em Conditional comments para Internet Explorer:
#limites ul li { display: inline; }
Pronto.
Temos uma lista semanticamente correta onde cada linha se adapta ao conteúdo do maior elemento.
Em desuso. Esse código está ultrapassado em nosso padrão, então evitamos usá-lo.
Fugindo um pouco de soluções específicas para o IE6 (já estava ficando cansativo!) vamos mostrar como fazer um hack específico para o navegador Safari e Google Chrome.
Sim, nós sabemos que usar hacks é “feio”, mas estamos aqui para apresentar soluções e, caso essa seja sua última opção, use!
Como os dois browsers utilizam a mesma engine de renderização, a Webkit, este hack acaba servindo para os dois navegadores:
body:nth-of-type(1) elemento { propriedade: valor; }
—–
* Update: Post atualizado, pois o hack antigo era interpretado pelo o IE7 também. Este novo método funciona somente para os navegadores Google Chrome e Safari.
* Update: Solução nos comentários, alguns usuários comentaram a mesma solução, conforme a necessidade verifique esses comentários, pois raramente fazemos ajuste apenas no chrome.
Em desuso. Esse código está ultrapassado em nosso padrão, então evitamos usá-lo.
Já que estamos entrando no mundo “obscuro” dos hacks, iremos comentar sobre o caso específico do IE6, o qual temos que passar tantas vezes!
Ao adicionar esta linha em seu CSS, ela será interpretada somente pelo IE6:
* html { propriedade: valor; }
Particularmente preferimos adotar essa prática ao invés de um conditional comment para o IE6, para evitar de termos diversos CSS específicos para cada navegador. Portanto só usamos o CSS para IE7 caso seja extremamente necessário.
Além do mais, este hack é válido ao contrário de outras opções que encontramos em outros exemplos.
* Update: Classe no html. Como usamos html5, colocamos na tag html por conditional comments uma classe relativa ao navegador Internet Explorer.
Uma boa maneira de fugirmos dos hacks é usar os conditional comments.
Por padrão, utilizamos este para o Internet Explorer 7, para evitarmos utilizar hack específico para este navegador:
<!--[if IE 7]><link rel="stylesheet" type="text/css" href="css/estilo_ie7.css" media="screen" /><![endif]-->
Se quisermos fazer um CSS específico para o IE6, basta trocar o conditional comment:
<!--[if IE 6]><link rel="stylesheet" type="text/css" href="css/estilo_ie7.css" media="screen" /><![endif]-->
Caso queira algum outro tipo específico, segue abaixo uma listagem de várias possibilidades:
<!--[if IE]>
De acordo com o conditional comment, este código é para Internet Explorer
<![endif]-->
<!--[if IE 5]>
De acordo com o conditional comment, este código é para Internet Explorer 5
<![endif]-->
<!--[if IE 5.0]>
De acordo com o conditional comment, este código é para Internet Explorer 5.0
<![endif]-->
<!--[if IE 5.5]>
De acordo com o conditional comment, este código é para Internet Explorer 5.5
<![endif]-->
<!--[if IE 6]>
De acordo com o conditional comment, este código é para Internet Explorer 6
<![endif]-->
<!--[if IE 7]>
De acordo com o conditional comment, este código é para Internet Explorer 7
<![endif]-->
<!--[if gte IE 5]>
De acordo com o conditional comment, este código é para Internet Explorer 5 e mais novos
<![endif]-->
<!--[if lt IE 6]>
De acordo com o conditional comment, este código é para Internet Explorer mais antigo que 6
<![endif]-->
<!--[if lte IE 5.5]>
De acordo com o conditional comment, este código é para Internet Explorer mais antigo ou igual a 5.5
<![endif]-->
<!--[if gt IE 6]>
De acordo com o conditional comment, este código é para Internet Explorer mais novo que 6
<![endif]-->
Uma das diversas limitações apresentadas pelo IE6 está relacionada ao uso de pseudo-classes. Uma delas é a “:hover” que só pode ser usada em links.
Porém, em alguns casos, precisamos dela para fazer determinados efeitos ou funcionalidades do site, como menus dropdown.
Para poder aplicar a pseudo-classe “:hover”, “:active” ou “:focus” em qualquer elemento no IE6, você deve:
– Baixar o arquivo .htc neste link;
– Inserir o código abaixo em seu CSS, utilizando o caminho do arquivo .htc relativo ao HTML:
body { behavior: url(css/csshover2.htc); } /* inclui efeito :hover, :active e :focus para Internet Explorer 6 */
Sabemos que o Internet Explorer 6 tem limitações em diversas propriedades do CSS 2.
Supondo que a largura mínima seja 333px, use a regra abaixo:
* html elemento { width: expression( document.body.clientWidth < 334 ? "333px" : "auto" ); } /* seta a min-width para o IE */
Agora, se a largura máxima seja 777px, use:
* html elemento { width: expression( document.body.clientWidth > 776 ? "777px" : "auto" ); }/* seta a max-width para o IE */