Tableless - Desenvolvimento inteligente com Padrões Web

15/09/2006
Artigos

Coisas úteis que não funcionam no IE #1 – seletor inteligente

Sempre digo uma frase nos meus cursos, que qualquer dia desses vai virar lenda. Enquanto estou explicando alguma técnica, seletor ou alguma outra propriedade extremamente útil para os alunos, no final da explicação, vem a frase: Só que isso não …

Por


Sempre digo uma frase nos meus cursos, que qualquer dia desses vai virar lenda. Enquanto estou explicando alguma técnica, seletor ou alguma outra propriedade extremamente útil para os alunos, no final da explicação, vem a frase: Só que isso não funciona no IE.

Os alunos sempre estão com aquelas caras de maravilhados e vendo um milhão de problemas resolvidos quando mostro alguma propriedade ou técnica de CSS miraculosa. Mas sempre essas caras são substituídas por expressões de, como eu poderia dizer, desgosto, ao mencionar a frase acima.

O IE 6 não é um browser ruim. Ele só é um browser velho, antigo.

O intuito deste post – e de vários outros, tomara – é tentar mostrar algumas propriedades e técnicas que por algum motivo, não funcionam no IE. Não vou dar soluções… mesmo porque muitas delas não terão solução pelo simples fato de que simplesmente o IE não tem suporte a determinada situação. Mas que isso sirva de aprendizado a todos, e que possa ser útil para resolver problemas em browsers que tem um pouco mais de qualidade no suporte aos padrões.

Seletor Inteligente

Hoje, usamos uma parte muito restrita da teoria dos seletores de CSS2. Você fica fadado a usar apenas seletor agrupado (p, div, h1 – por exemplo) e seletor encadeado. E com essas duas formas, você consegue se virar.
Acontece que há algumas situações que você não consegue obter total controle sem ter que definir um tipo de identificação aos objetos.
Por exemplo:

1
2
3
<input type="text" />
<input type="text" />
<input type="submit" value="enviar" />

Note o código acima.
Suponha que você gostaria aumentar apenas os formulários de texto, colocar uma largura de 300px, por exemplo. Como você faria?
Simplesmente colocaria uma classe ou id em cada um dos formulários de texto e então aumentaria. Não é?

1
2
3
<input type="text" class="input-texto" />
<input type="text" class="input-texto" />
<input type="submit" value="enviar" class="input-botao" />

Há uma maneira – que você já sabe que não funciona no IE – de fazer isso sem a necessidade de sujar tanto o código com ID e CLASS.
Note o código css:

1
2
3
<input type="text" />
<input type="text" />
<input type="submit" value="enviar" />

E agora o CSS:

1
input[type="text"] {width:300px;}

Este seletor seleciona os objetos INPUT que tenham o atributo TYPE com o valor TEXT. Ou seja, ele irá ser herdado apenas para os campos de texto. Todos os outros tipos de campos não serão afetados. Assim você consegue selecionar apenas um grupo de elementos que tenham um certo atributo.
Este tipo de seletor não fica preso a apenas campos de formulário. Você pode usar para selecionar qualquer outro objeto do HTML.

Se o IE entendesse este seletor…

Por Diego Eis

Diego Eis criou o Tableless para disseminar os padrões web no Brasil. Como consultor já treinou equipes de empresas como Nokia, Globo.com, Yahoo! e iG. É palestrante e empreendedor.

http://twitter.com/diegoeis/

Veja os outros posts de

  • http://sigasw.com.br Felipe Diesel

    Olá,

    Legal essa série de posts, e se depender do IE vai se estender muito.

    Só tem um erro de digitação:

    por

  • http://rodrigoaramburu.br22.com Rodrigo Aramburu

    Qual achance disso ser funcionar no IE7?

  • Luciana Pimentel

    Pois é, pra quem está aprendendo, sempre é frustrante esses problemas com o IE, mas enfim …
    Muito legal o post !
    Parabéns pela iniciativa ! :)

  • http://www.pinceladasdaweb.com.br Pedro Rogério

    Muito legal!!!!

  • Rodrigo Freitas

    Este tipo de post é interessante porque aqui onde trabalho eu tenho uma luta ardua para mostrar aos dois designers e mais uma webdesigner (que esta começando a faculdade agora) que o IE não é um browser padrão, mas é o mais usado (ainda).
    Mostrar para eles este post pode me ajudar e muito a abrir as mentes deles.

  • http://www.thalisvalle.com Thalis valle

    Nada de novo.

  • Leonardo A. Souza

    Gostei da idéia da série, mas vc poderia falar se a funcionalidade descrita funcionaria ou não no IE7 :)

  • http://mundofw.net/forum Exper Aguiar

    @Leonardo

    se vc lesse veria que não

    @Diego

    Note o código css:

    E agora o CSS:

    input[type="text"] {width:300px;}

    ahn… tem um erro de digitação ai nao?

    gostei, pena e o ie nao renderiza isso… ¬¬

  • http://crashtester.blogsome.com Jess

    Diego coloca o doce na boca de todos, deixa encostar na lingua, puxa com tudo antes da mordida fatal e diz: “Nananinanão”

    Preferia não saber que isso existe :’( os sites produzidos aqui na empresa tem 98% de visitas do IE =(

  • http://elmicox.blogspot.com Micox

    A idéia do post é boa, acho que só pecou no exemplo.

    Ao invés de usar classe nos inputs text, é muito mais fácil mudar a tag do botão para a tag button. :)

    (mas se bem que o problema continuará com relação a radios e checkboxes)

  • http://dgmike.wordpress.com Michael

    Fala não…
    Eu fiquei muito bravo com o IE quando vi essa propriedade e fui testar. O opera e o Fx funcionaram normalmente, mas o IE… putz, sem comentários.
    Agora, gostei desta “defesa”: “O IE não é um browser ruim, só ultrapassado.” ISto é verdade. A gente geralmente começa navegando nele, e é nele que a gente aprende sobre voltar, favoritos e tudo mais….

  • http://www.eugeniogrigolon.com/ Eugenio Grigolon

    … nossas vidas seriam muito mais fáceis.

    #4, concordo… :-@

  • http://www.southbmx.com.br Maicon Junches

    Poxa, tem tanta coisa legal que CSS faz mas não roda no IE, isso quebra. Me desanima de veradade :(

    Bom seu post, abração ai!

  • http://project47.viscountbox.com Carlos Eduardo

    Enfrentei este problema no meu site… O jeito foi colocar uma classe pro input mesmo.

    Fazer o que…

  • http://www.thinkphp.co.uk Marcelo Andrade

    Não existe alguma forma de prover este suporte ao IE6 com arquivos .htc, por exemplo?

  • Tarcísio Sassara

    Gostei do Post!

    Conhecia este seletor, porem, nunca usei e não sabia se era compativel com o IE, agora sei (que não é.) :-)

    O que mais me chamou a atenção, é a possibilidade de tornar o codigo mais limpo.

    No geral achei muito bom o post, se fosse eu, com o mesmo conhecimento do autor, teria compartilhado a informação.

    Abraço!

  • Daniel Luz

    Marcelo, existe sim. Há inclusive uma biblioteca em javascript que se aproveita dos recursos avançados (mas muitas vezes exclusivos) do IE para tentar corrigir suas próprias falhas. Ela se chama IE7 (http://dean.edwards.name/IE7/), por ser uma pseudo-atualização para o browser (e na época que foi criada ninguém sonhava que a Microsoft um dia voltaria a desenvolver seu browser).
    Ironicamente, seu suporte a CSS em vários aspectos é superior ao do próprio IE 7 que será lançado!

    E sim, o IE 7 terá suporte a este seletor. Não só ao de igualdade, mas a alguns novos do CSS3 também: prefixo (input[type^="subm"], desculpem o exemplo tosco), sufixo (input[type$="bmit"]) e substring (input[type*="ubmi"]), fora outros que não são relacionados a atributos.

    Uma lista bem completa do que já foi feito (e não deve mais mudar muito…) está aqui: http://blogs.msdn.com/ie/archive/2006/08/22/712830.aspx ;)

  • http://www.jaderubini.wordpress.com Jader Rubini

    Muito bom o post, bela iniciativa.

    Só não concordo quando você dizque “o IE não é ruim, só é ultrapassado”

    Ele não é ruim, até que você experimente um Firefox ou Opera da vida… Não precisa nem ser desenvolvedor pra notar a diferença. Há muitas funcionalidades (realmente úteis!) nos outros navegadores que os usuários de IE nem sonham que existem.
    Um dia desses eu fui obrigado a dar gargalhadas de um amigo meu que ficou maravilhado com a “inovação” do IE7 quanto à navegação em abas.

    Portanto, na minha opinião, o correto seria: “O IE não só é ruim, mas também ultrapassado”

  • Felipe

    alguém já conseguiu colocar css na tag optiongroup e fazer funcionar no IE? Eu ainda não. #-O

  • http://www.microcamprecife.com.br billy blay

    parabens pelo post,

    será q o IE vai ter algo de novo??
    será q ele vai seguir normas do w3c??
    será q ele vamos ter q projetar para IE5, IE6 e o famigerado IE7?
    “ja basta a quantidade de browser q nós temos p nos preocupar.”
    e penso agora e meus IEhacks p onde vao?

    terminando, uma ultima pergunta

    será q ele será um browser, ou outra telinha cheia de frescuras q nao funcionam?

  • http://www.cesumar.br Marcelo Moreschi
  • http://www.garcez-rosa.net Ricieri Garcez Rosa

    Uma solução elegante como a do CSS ainda não tem como funcionar em todos navegadores utilizados no mercado, mais para quase tudo se dá um jeitinho com “DOM”. Pra quem ainda não sabe será muito útil, espero.

    [code]

    //pega todos elementos "input" no documento
    var els=document.getElementsByTagName('input')

    for (i=0; i
    [/code]

    [css]
    .minhaclasseRadio { seletores_aqui }
    .minhaclasseCheck { seletores_aqui }
    .minhaclasseText { seletores_aqui }
    .minhaclasseButton { seletores_aqui }
    .minhaclasseSubmit { seletores_aqui }
    [/css]

  • http://www.garcez-rosa.net Ricieri Garcez Rosa

    Uma solução elegante como a do CSS ainda não tem como funcionar em todos navegadores utilizados no mercado, mais para quase tudo se dá um jeitinho com “DOM”. Pra quem ainda não sabe será muito útil, espero.

    [code]
    //pega todos elementos “input” no documento
    var els=document.getElementsByTagName('input')
    for (i=0; i

  • http://www.garcez-rosa.net Ricieri Garcez Rosa

    Uma solução elegante como a do CSS ainda não tem como funcionar em todos navegadores utilizados no mercado, mais para quase tudo se dá um jeitinho com “DOM”. Pra quem ainda não sabe será muito útil, espero.

    [code]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //pega todos elementos “input” no documento
    var els=document.getElementsByTagName('input')
       for (i=0; i
    [/code]

    [css]
    .minhaclasseRadio { seletores_aqui }
    .minhaclasseCheck { seletores_aqui }
    .minhaclasseText { seletores_aqui }
    .minhaclasseButton { seletores_aqui }
    .minhaclasseSubmit { seletores_aqui }
    [/css]
  • http://www.garcez-rosa.net Ricieri Garcez Rosa

    Uma solução elegante como a do CSS ainda não tem como funcionar em todos navegadores utilizados no mercado, mais para quase tudo se dá um jeitinho com “DOM”. Pra quem ainda não sabe será muito útil, espero.

    1
    2
    var els=document.getElementsByTagName('input')    
       for (i=0; i
  • http://www.garcez-rosa.net Ricieri Garcez Rosa

    Como eu escrevo um código js aqui????

  • http://www.antenando.com.br Rael

    poxa, que bacana… nao conhecia esse atributo. Pena que existe uma pedra azul no nosso sapato! Mas é só lançar oficialmente o IE7, que quem sabe nossa vida nao melhora um pouquinho… Pelo que eu to sabendo, o IE7 vai vir como uma atualização, certo?

    Quem sabe? A esperança é a ultima que morre! :)

  • http://alexandre.gaigalas.net Alexandre

    A coisa mais útil de todas, só o Safari tem.. múltiplos backgrounds no mesmo elemento! Isso reduziria meus códigos em 80%..

    http://www.quirksmode.org/css/multiple_backgrounds.html

  • Fabyo

    Outra opção que nao tem no IE por exemplo:

    input:focus,
    select:focus { background-color: #F5F5DC; }

    assim eu poderia colocar um efeito quando o focus esta no campo e quanto sai, sem o uso de javascript, mas nao roda no IE

  • Pingback: Notícias rodando explicadinho (parte II) « DGmike

  • http://vdepizzol.wordpress.com Vinicius Depizzol

    Pra quem tá esperando muito pelo IE7, fiquem sabendo que a atualização vai ser automática. E só para usuários de windows originais.

    Humanidade para todos.

  • Pingback: Coisas úteis que não funcionam no IE #2 - Altura e Largura mínima e máxima - Tableless

  • http://www.abnpoliedro.com.br/gmb_designer Guilherme

    Eu também comecei a aprender usando os editores visuais. Fiquei super dependente do DW e quando houve a necessidade tive de aprender na marra. Ainda estou aprendendo na verdade, as regrinhas de tableless com css e xhtml. Quanto ao fireworks, realmente gostaria de conhecer o motivo da objeção quanto a ele… eu sempre usei fireworks e gosto bastante dele, mas sei q o photoshop tem bem mais recursos, mas tem algum coisa na inteface dele que o torna pouco familiar assim como o Corel. Talvez com o costume essa resistência desapareça. Acho que ainda me falta o domínio real sobre o código, minha aspiração agora é aprender a desvolver apenas com o bloco de notas, será que consigo?!
    Uma coisa precisamos concordar, os editores aumentam bastante o tempo de produtividade.

  • Luana

    Olá,estou com um problema terrível alguém pode me ajudar?
    Coloquei um campo text no meu documento, abri ele no mozzilla firefox só que não consigo selecionar o campo para digitar. Eu clico em cima do campo e não aparece para digitar. Alguém sabe o que é isso?
    Obrigada desde já, conto com vocês!!

  • http://www.guilhermeventura.com.br Guilherme Ventura

    Olha, realmente, testei esse seletor no IE6 e não funcionou.
    porém no IE7+ o seletor funciona, pelo menos comigo, vou publicar algo sobre isto no meu blog em breve e descreverei alguns exemplos.

    Muita boa série de artigos!

  • Pingback: Notícias rodando explicadinho (parte II) | DGmike