Os seletores complexos foram feitos para suprir necessidades muito específicas do layout. Por exemplo: imagine uma página de cadastro. Nessa página há um formulário enorme, com campos de todos os tipos: radio, checkbox, text, submit etc.
Você precisa, por exemplo, definir uma largura para os campos de texto. Você não poderá colocar a linha como a de baixo:
input {
width: 200px;
}Com essa linha você fará com que todos os inputs fiquem com largura de 200px, inclusive os inputs de radio, checkbox, submit, image, etc. Se você gostaria apenas que os inputs de text ficassem desse tamanho, terá que marcar com um CLASS todos os inputs com seus respectivos tipos, por exemplo:
<form action="">
<fieldset>
<label>Nome: <input type="text" class="input-text" /></label>
<label><input type="checkbox" class="input-checkbox" /> Desejo receber newsletters</label>
</fieldset>
</form>Assim, você pode definir no CSS cada elemento pela sua classe. Acontece que você está colocando um atributo a mais, fazendo com que o código fique maior. Esse layout pode já estar publicado, e pode ser complicado modificar diretamente o HTML por conta do código server-side. Por isso, pelo CSS, podemos utilizar os seletores complexos para manipular elementos específicos sem a necessidade de modificar o HTML diretamente.
No caso acima, usaríamos o seguinte código para selecionar apenas os elementos de input de texto:
input[type="text"] {
width: 200px;
}Perceba que no seletor há o objeto que você quer modificar: o INPUT. Mas não são todos os inputs. Entre os colchetes especificamos a exceção. No exemplo acima, selecionamos os inputs com o atributo TYPE com o valor TEXT.
Entre os colchetes você pode colocar uma série de sentenças que podem selecionar elementos bem específicos na tela. Aqui vão alguns exemplos:
| Seletor | Descrição |
|---|---|
| input[type="text"] | Seleciona o elemento INPUT com o atributo TYPE cujo valor seja TEXT |
| a[href$=html] | Seleciona elementos com atributos cujo seu valor temine com? Por exemplo, você poderia querer selecionar todos os links que apotam para um arquivo .pdf, ou .php etc. |
| a[href^="http://tableless.com.br/"] | Seleciona elementos com o atributos que comecem com? Você pode querer selecionar apenas os links que apontem para um site específico, por exemplo. |
| a[title~="tableless"] | Seleciona os elementos cujo o atributo tenha um valor que seja separado por espaços. No exemplo acima ele seleciona um link que contenha o atributo title e que em seu valor tenha a palavra tableless no meio. |
Este artigo faz parte de uma série de textos técnicos sobre CSS, que ignora totalmente browsers antigos. Estou nivelando esse assunto por cima. Portanto, se você é fã do IE6 ou outro browser antigo qualquer, seu lugar não é aqui.
Se você quer acompanhar essa pequena campanha, veja no Twitter o que nós podemos fazer sem o IE6. Siga o hash #semie6.
Isso realmente é muito útil.
O problema é que atualmente muitos usuários AINDA tem IE 6.0 (aproximadamente 30% de visitantes no meu caso), o que dificulta esse "nivelamento".
Espero que logo esse problema acabe de vez e possamos passar a aplicar CSS 3 sem ficar definindo quem poderá ver aquilo, e quem não vai.
Mas mantém-se a importância do artigo, pois a tendência é essa, e temos que estar preparados para abusar dela quando o IE6 virar lenda.
Lucas Vieira Filho
Se não pode vencê-lo, junte-se a ele... O fato é que o IE6 só vai virar lenda quando uma nova versão de windows se tornar a padrão...
Para aproveitar o CSS mesmo no IE6, tem uma biblioteca que fizeram (daria o crédito se soubesse quem fez), q aumenta o grau de compatibilidade com CSS.
Veja em:
http://code.google.com/p/ie7-js/
É verdade, normalmente utilizo o firefox e ja aconteceu várias vezes, executei uma melhoria e publiquei achando que estava tudo bem, mas no IE a coisa nem sempre funciona... Temos que cuidar sempre de testar todos os browsers, inclusive o Chrome.
Bruno Scopel
Muito legal e técnico! Mas ainda não dá pra usar. Não se pode ignorar os usuários de IE 6, e PONTO FINAL. E não é opinião de "fã", até porque creio não existir nesse planeta algum fã do IE 6. Ah sim, e "Portanto, se você é fã do IE6 ou outro browser antigo qualquer, seu lugar não é aqui." pegou muito, mas muito mal.
Leonardo Cabral
Concordo que foi exacerbada a assertividade no texto quanto ao lugar das pessoas num meio de livre acesso como a Web. Assertividade se confunde com arrogância quando mal utilizada. Entretanto não é esse o foco desse comentário. Devo aqui discordar do meu colega, Scopel. O IE6 não é mais suportável (em diversos interpretações da palavra) para o que consideramos uma "experiência ótima para o usuário". Não vejo porque explicar os porquês dos motivos aqui. Há gigabytes de dados sobre isso na Web. Não leve a mal. Estou do seu lado.
Bruno Scopel
"Não se pode ignorar os usuários de IE 6, e PONTO FINAL." - Não disse isso em relação à experiência de navegação, simplesmente é o fato de desenvolvimento. Se a vida fosse fácil assim, a Microsoft (péssimo exemplo, mas vale) ignoraria usuários de Windows ME, 2000, XP, e etc, e lancaria só programas pra Vista. "- Você usa XP? Sistema ultrapassado cara, tá na hora de piratear o novo." - Na minha opinião PESSOAL, enquanto existir uns 5% de usuários de IE6, esse INFELIZ não pode ser ignorado, e não teremos liberdade total. Enfim, falar de IE 6 é pior (ou quase) de falar sobre religião ou política.
René Bizelli de Oliveira
ola pessoal.. no meu IE 7 nao rolou esse exemplo. tem mais algum macete?
valeu
René Bizelli de Oliveira
ops.. coloquei o DOCTYPE e tudo funcionou :)
nossa, esses seletores ajudariam muito *--*
Putz, pq a microsoft nao libera atualização do XP pra todo mundo mesmo pirata, pelo menos a atualização vem com IE7, que já quebraria nosso galho contra o IE6.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.