Documente Academic
Documente Profesional
Documente Cultură
Por favor, não pensem que sou pretensioso, egocentrista, ou algo do tipo! Quero é
distância disso! Podem ter certeza de que não sou igual a muito blogueiro
estrelinha, que diz que um blog não pode ficar num sei quantos dias sem novo post
e tudo o mais, mas se a gente for contabilizar todas as matérias publicadas,
metade é sobre as estatísticas de acesso do blog dele, quantas pessoas chegam
pelo Google, quantos visitantes blá blá blá, etc. É o que eu chamo de “Síndrome da
Rede Globo”.
Uma outra peculiaridade é que não apresentarei enormes listas com as principais
propriedades e valores CSS atualmente disponíveis. Para isso, já existem inúmeros
excelentes websites com exemplos dos mais elucidativos! Vou me limitar a somente
“prescrever” alguns links, com o intuito, também, de não tornar a apostila muito
extensa e cansar o leitor.
Para finalizar, pedirei uma coisa para aqueles corajosos que, porventura, leiam a
apostila na íntegra: poderiam, por favor, caso encontrem algum texto errado,
algum exemplo que não funcione, enfim, alguma coisa que não deveria estar onde
está, me enviar um e-mail para que eu possa corrigir? De quebra, se não for pedir
demais, se vocês tiverem alguma sugestão, idéia, estímulo, doação (brincadeira),
podem, também, me enviar uma mensagem?
Vai que esse negócio todo de ter um blog e disponibilizar apostila dá certo... Aí
outras versões terão que surgir! (-:
1 Também um um pouquinho de micro formatos (microformats) e, claro, já ter “contato” com o desenvolvimento para web,
preferencialmente com alguns websites já feitos.
Você pode:
● Para cada novo uso ou distribuição, você deve deixar claro para outros os
termos da licença desta obra
● Qualquer uma destas condições podem ser renunciadas, desde que você
obtenha permissão do autor
Ou seja, você pode fazer quantas cópias da apostila quiser e repassar para quantas
pessoas quiser, mostrar para quem quiser em qualquer lugar que desejar. Pode,
inclusive, fazer uma apostila derivada, livro, manual, ou qualquer outra coisa
baseada nos escritos que aqui constam, DESDE QUE você cite que os textos
“originais” são da autoria de Tárcio Zemel (no caso, eu).
Ah, só para constar nos “autos”, eu fiz esta apostila em ambiente Linux:
INTRODUÇÃO
Mesmo sem ainda ter explicado o que é CSS (Cascading Style Sheet), ou, como
prefiro, folha de estilo em cascata (ou, simplesmente, folha de estilo), adianto que
é uma tecnologia aprovada e recomendada pelo W3C.
2 http://www.maujor.com/
Perceba como isso é prático, poupa tempo e oferece autonomia aos diferentes
estágios de produção de um website. Por exemplo: o responsável pela camada de
conteúdo precisa elaborar um formulário para o cadastro de clientes;
simultaneamente, a aparência deste formulário (e da página como um todo) pode
ser feita por outro desenvolvedor. Um não precisa esperar o término do trabalho do
outro (muito menos ficam mutuamente “dependentes”), pelo contrário, ambos
executam suas respectivas tarefas concomitantemente, poupando tempo e
3 E não somente a websites; o mesmo deve ser aplicado para minisites, hotsites, portais, sistemas de conteúdo interativo-
dinâmico e quaisquer outros que sejam feitos aos moldes de “página da internet”.
4 Ou seja, esta é a camada que recebe um javascript, um vbscript, uma aplicação em AJAX (embora alguns
desenvolvedores entendam que o AJAX é posto em uma “quarta camada”).
MARCAÇÃO x ESTILO
Com base na explicação do conceito de desenvolvimento em camadas, vou
apresentar algumas considerações “mais práticas”.
Uma explicação que pode aclarar o que estou querendo dizer é a seguinte: quando
um desenvolvedor está especificando todos estes itens, ele marca naquela página
“o quê é o quê”5. Quando ele coloca uma palavra entre as tags <em> e </em>, está
marcando o local onde aparecerá uma palavra em itálico em dispositivos de
renderização em tela e, ao mesmo tempo, uma palavra que receberá ênfase ao ser
lida por um sintetizador de voz, por exemplo.
E é para isso que serve o (X)HTML: nada mais, nada menos, que
marcar/estruturar os elementos que você deseja em páginas web (na camada de
conteúdo)6. O estilo (ou estilização) diz respeito à camada de aparência, ou seja,
deve ser feito com a utilização de CSS.
Muito bem. Imagine um website com 10 ou 20 páginas, e todas elas com um título
principal. Se por algum motivo você tivesse que alterar a aparência destes títulos
(por solicitação do cliente, por exemplo), mudando a cor de vermelho para laranja,
o que precisaria ser feito? Exatamente: ir em cada marcação de título principal e
alterar a propriedade “color”, da tag “font”, para a cor necessária. É demorado e
chato, mas tudo bem... Afinal de contas, o cliente precisa disso (e,
conseqüentemente, você também).
Mas a experiência deste caótico exemplo que apresentei não precisa ser vivenciada
por nenhum desenvolvedor, caso este escolha adotar o desenvolvimento em
camadas e separar totalmente o conteúdo da apresentação nas páginas que faz.
7 De 3 a 5, mais ou menos.
8 Melhor ainda: assistir a um anime! (-;
9 E, de novo, seu “ancestral” é o desenvolvimento de softwares. Por exemplo: em um editor de texto estilo M$ Word,
BrOffice, etc, como você acha que, quando você especifica que um bloco de texto é um parágrafo, ele altera sua
aparência segundo um estilo pré-especificado?
E isso pode (e, preferencialmente, deve) ser feito por pessoas ou equipes
diferenciadas, com qualificação especial para as diferentes tarefas, poupando
tempo e aumentando a produtividade do grupo ou empresa (aumentando, dessa
forma, a lucratividade e poupando tempo).
10 É, estou dando ênfase a essa questão! Quando conheci este método de produção fiquei tão perplexo com suas vantagens
(e atrocidades que cometia na utilização do “antigo método”), que isso não poderia ser de outra forma. Tomara que todo
aquele que está iniciando na carreira de desenvolvedor web tenha a “sorte” de já começar trabalhando com separação de
camadas!
11 Caso essa independência toda a qual me refiro constantemente ainda não tenha sido aclarada, imagine que você pode
alterar TODA a aparência do website sem alterar sequer 1 caracter na camada de conteúdo. Uma empresa, por exemplo,
pode alterar a aparência de sua loja virtual conforme datas comemorativas: no natal, as páginas conterão flocos de neve
e sacos de presente, na páscoa, a televisão será ofertada em um “ambiente achocolatado”. Recomendo que visite
http://www.csszengarden.com/ .
12 Alguém sempre paga pelo consumo de banda...
Caso seja necessário alterar, por exemplo, a posição de um menu que está na
esquerda, para a direita, lá se vão horas, dias, semanas de “trabalho braçal”,
dependendo do tamanho do website; essa tarefa pode até ser feita mais
rapidamente utilizando-se templates de editores WYSIWYG13, no entanto, alguns
poluem tanto o código-fonte que fica quase que literalmente impossível prestar
algum tipo de manutenção futura.
Além disso, utilizando determinadas técnicas CSS, pode-se fazer um site cujo
layout seja adaptável a qualquer resolução de tela, terminando com o clássico
problema de reprodução de páginas para diferentes resoluções e controle destas via
scripts incorporados.
E mais: mesmo que alguém esteja navegando com a exibição de estilos e/ou
imagens desativada, ou mesmo através de browsers com suporte a somente textos
(tais como o Lynx), o conteúdo do site, na íntegra, pode ser visualizado.
13 Exemplos de editores WYSIWYG: Quanta+, Bluefish, Dreamweaver, HTML-Kit, NVU, HTMLGate Free...
CODIFICAÇÃO CSS
Essas regras, esses “padrões de escrita”, essas convenções, podem ser chamadas
sintaxe, e é através dela que se pode escrever códigos em CSS (e nas linguagens
de programação/marcação, também)15.
Regras
Segundo o que consta na documentação oficial do W3C “Folhas de Estilo CSS, nível
1”, de 17 de dezembro de 1996, revisada em 11 de janeiro de 199916, “uma regra é
composta de duas partes principais: um selector (sic) [...] e uma declaração [...].
Por sua vez, esta declaração também possui duas partes: uma propriedade [...] e
seu valor [...]”.
14 Para os estudos a seguir, o foco será para CSS externo. Se não souber o que é isso, calma, mais à frente será explicado.
15 Atenção: esta palavra apresenta diferentes significações, dependendo do contexto e área em que é usada.
16 http://www.w3.org/TR/1999/REC-CSS1-19990111
Na qual:
17 http://www.maujor.com/
Repetindo: eu quero que todos os parágrafos (p) tenha uma cor (color) azul (#369).
Perceba que especifiquei a cor através da codificação hexadecimal18.
Está ficando mais claro, agora? Assim como toda área de conhecimento a ser
aprendida, inicialmente pode ser que pareça muito difícil e complexo, entretanto,
com o passar do tempo e continuidade no estudo, tudo vai ficando melhor19.
p {
color: #369;
font-size: 14px;
}
Mesmo se isso não fizer sentido pra você, agora, saiba do seguinte: uma folha de
estilos para um website relativamente pequeno e simples, de 8 ou 10 páginas, pode
facilmente ultrapassar 80 regras. E, claro, nem a metade delas terá apenas uma
propriedade. Inclusive, em algumas, são necessárias mais de 10! Pense nisso.
Pode ser que você queira especificar as mesmas propriedades para seletores
diferentes. Neste caso, é possível que você o faça declarando tão-somente uma
regra, separando os seletores por vírgula (“,”). Se, por exemplo, quiser que os
textos dos parágrafos e os títulos secundário e terciário sejam de uma cor
vermelha, poderia usar o seguinte:
Efeito Cascata
Se ainda não se perguntou o motivo desse nome doido que é “folha de estilo em
cascata”, a hora é agora. Afinal, eles não batizariam uma tecnologia tão
importante de forma a não representar nada, não é verdade? Esse “cascata” no
nome, remete a algo muitíssimo importante: o método pelo qual “conflitos” entre
regras são tratados. “Palma, palma, não priemos cânico”™!
21 Alguns chamam de “grupamento”. E agora, qual é correto? Ahhh, vou deixar assim, mesmo...
22 Uma oração bem filosófica, hã?
23 Extraído do FAQ sobre CSS da página do Maujor (http://www.maujor.com/), com ligeiras modificações.
5. Entre regras de mesmo peso, têm prioridade aquelas declaradas por último
na sequência das regras na folha de estilos
Herança
De acordo com a “metodologia CSS”, pelo fato de a tag strong estar “dentro” da
tag p, ela é sua descendente direta, sua filha (ou filho, se preferir); por sua vez, a
tag p é filha de body (conseqüentemente, strong é neta de body). Logo, temos a
seguinte hierarquia nas gerações desta família: body -> p -> strong.
Pelo que foi exposto a pouco, se você especificar que body terá suas letras de uma
cor azul e pertencer a uma família de fontes serifadas, automaticamente estará
especificando que sua filha, p, e sua neta, strong, terão a mesma cor e serifa.
body {
color: #00F;
font-family: serif;
}
Com isso, body e p terão suas letras com uma cor azul e sua fonte pertencente à
uma família de fontes serifadas e, strong, uma cor verde (e continuará com o
Seletores ID e Classe
id
Os seletores ID são representados por uma tralha (#). Sua função é estilizar um
elemento que tenha um nome em especial, e atente-se à expressão “um
elemento”, pois não pode haver IDs com nomes iguais numa mesma página, ou
seja, um ID deve ser exclusivo, individual, singular, ou quaisquer outras
expressões redundantes que indiquem seu caráter único em um documento.
#paragrafoDestaque {
color: #F00;
font-size: 120%;
}
Também pode haver a presença de IDs nas hierarquias “mais profundas” dos
elementos das páginas. Algo como:
classe
Pode-se, por exemplo, especificar que haverá dois tipos de parágrafo em seu
website: um com a fonte de uma cor vermelha e família de fontes com serifa e
outro com a fonte de uma cor verde e família de fontes sem serifa. Para facilitar o
entendimento, vou apresentar um exemplo:
p.vermelho {
color: #F00;
font-family: serif;
}
p.verde {
color: #0F0;
font-family: sans-serif;
}
Com isso, estabeleci duas regras, ou, poderia se dizer, duas classes de parágrafo.
Agora, minha folha de estilo possui uma classe de parágrafo de nome “vermelho” e
outra de nome “verde”, cada uma delas com diferentes propriedades e, por
conseqüência, realizará diferentes estilizações.
<p>primeiro parágrafo</p>
Perceba até que ponto as classes podem ser úteis: se eu declaro uma “classe
genérica”, ou seja, que não pertença a nenhum seletor (X)HTML específico, posso
usá-la em qualquer tag. Exemplo:
<h1 class=”azul”>Teste</h1>
<p>primeiro parágrafo do teste.</p>
<p class=”azul”>segundo parágrafo do teste.</p>
Viu? Quando crio uma classe genérica posso utilizá-la em qualquer tag que queira,
conseguindo os resultados pretendidos.
Div e Span
DIV e SPAN são duas tags (X)HTML comuns. Com elas, é possível que se estenda
as possibilidades de estilização numa folha de estilos.
div
Essa tag, quando usada em um documento puro (X)HTML, na verdade, faz nada!
Por outro lado, quando nos valemos de uma estilização CSS, podemos aproveitar, e
muito, essa divisão feita no código, criando regras a partir de IDs e classes em
DIVs. Observe esse código XHTML:
Observe, então, como podemos fazer para aplicar um estilo personalizado, apenas
atribuindo um ID para a DIV em questão. O XHTML ficaria assim:
<div id=“personalizado”>
<p>Este é um parágrafo normal, dentro de uma DIV.</p>
</div>
E o CSS:
#personalizado {
background-color: #396;
border: 3px double #369;
color: #FFF;
padding: 5px;
width: 40%;
}
Perceba: com a estilização do trecho XHTML por essa regra CSS, a DIV que, até
então, não tinha muito “utilidade”, transforma-se em um poderoso meio para
estilizar páginas e compor layouts.
span
O SPAN é como se fosse “uma DIV em miniatura”. A DIV, que é a divisão que se
pode fazer em páginas (X)HTML, é como se fosse de abrangência maior, ou seja,
usa-se o SPAN para estilizar pequeninos trechos em seu código de marcação. O
princípio de aplicação é o mesmo, podendo, os SPANs, serem estilizados quando,
para eles, se atribui um ID ou classe. Olha o XHTML:
.spanDoido {
background-color: #F00;
color: #FFF;
margin-bottom: 5px;
padding: 2px;
}
É com o uso de SPANs que se pode, por exemplo, especificar que determinada
palavra ou frase, num documento (X)HTML, é de outro idioma, o que facilita
bastante a vida de quem precisa de um sintetizador de voz para navegar pela web:
Comentários
Para facilitar o entendimento futuro de um código que está sendo escrito, é possível
que se comente suas folhas de estilo, ou seja, você pode, nos pontos que achar
conveniente, digitar textos, para si mesmo ou outras pessoas, com explicações,
conceitos, idéia, planos de implementação futura, trechos de código que precisem
ser isolados para testes, ou qualquer outra coisa que quiser.
E, ao fazer isso, suas estilizações não serão prejudicadas, já que quando algum tipo
de mídia interpreta um arquivo .css, “desconsidera” o que está comentado, quer
dizer, não toma aquele trecho como se fosse alguma intenção de declarar uma
regra, ou algo do tipo.
Isto quer dizer que tudo aquilo que estiver entre este par de caracteres não será
interpretado na hora da “montagem” das estilizações. Ó:
/*
estou fazendo um comentário em meu arquivo CSS,
e ele pode, inclusive, ter quantas linhas eu quiser
*/
p { color: #FF0; }
Css Inline
Pôde-se perceber o motivo pelo qual esse tipo de CSS não é o mais usado: não há
tanta flexibilidade para a realização de alterações, haja vista que a regra aplica-se
somente ao elemento que recebeu a estilização.
Css Incorporado
Para esse tipo de CSS, as regras são colocadas no próprio documento, na tag
“head”. Sua abrangência é tão-somente a própria página em que estão inseridas,
ou seja, possui um grau mediano de flexibilidade, já que potenciais alterações
aplicar-se-ão ao documento atual, e a nenhum outro. A sintaxe é a seguinte:
<head>
<style type=“text/css”>
[regras CSS]
<style>
</head>
Esse é o tipo de inserção de CSS mais usado. Nessa modalidade, as regras CSS são
escritas em um arquivo à parte do (X)HTML e “chamados” para as estilizações.
Você pode preparar as regras até em editores de texto simples, como KEdit ou
Bloco de Notas. A única observação é não se esquecer de salvar o arquivo com a
extensão “.css”.
ELEMENTO EXPLICAÇÃO
descendente elemento que seja filho, neto, bisneto (e assim por
diante) de outro elemento, dentro da hierarquia
presente na página
ascendente (ou ancestral) elemento que seja pai, avô, bisavô (e assim por
diante) de outro elemento, dentro da hierarquia
presente na página
pai elemento imediatamente anterior a outro, dentro da
hierarquia presente na página
filho elemento imediatamente posterior a outro, dentro da
hierarquia presente na página
irmão elemento “adjacente” a outro, dentro da hierarquia
presente na página; ambos filhos do mesmo pai
<p>
Vocês esperam uma intervenção divina <br />
Mas não sabem que o tempo agora está contra vocês, <br />
Vocês se perdem no meio de tanto medo, <br />
De não conseguir <em>dinheiro</em> pra <em>comprar sem se vender</em>
</p>
28 Página 24.
Muito bem, agora observe esta tabela30 que mostra a sintaxe genérica das relações
hierárquicas que podem ser usadas com as folhas de estilo:
SELETOR UNIVERSAL
O seletor universal é representado por um asterisco (*), e relaciona-se com
qualquer elemento presente no(s) documento(s). Para facilitar a fixação, basta
associá-lo ao caracter curinga “*”, usado para se fazer buscas em arquivos do
computador.
31 Página 24.
SELETOR DESCENDENTE
Como descrito na tabela das sintaxes genéricas de seletores CSS, este seletor é
relacionado a qualquer elemento que seja descendente de outro. A estilização é
feita através de seletores separados por um espaço. Veja:
ul li { font-size: 16px; }
ul#teste li.info {
color: #369;
font-size: 22px;
}
Esta será aplicada a qualquer item de lista que seja da classe “info”, que esteja
dentro de uma lista não ordenada de ID “teste”.
<ul>
<li>item a</li>
<li>item b</li>
<ol>
<li>subitem alpha</li>
<li>subitem beta</li>
</ol>
<li>item c</li>
</ul>
ul > li { color:#00F; }
Ela mudará a cor da fonte somente de “item a”, “item b” e “item c”, e “subitem
alpha” e “subitem beta” não terão sua cor alterada.
Perceba que isso acontece pelo fato de as tags <li> que estão dentro da lista
ordenada não serem filhas de <ul>. Como a estilização foi feita utilizando-se o
seletor filho, é normal que isso tenha acontecido.
Caso a regra fosse feita sem o caracter “ >”, ou seja, através de simplesmente
seletor descendente, os “subitem alpha” e “subitem beta” também seriam afetados,
dado que são descentes (não-diretos) de <ul>.
p + p { color: #F00; }
Com isso, somente o segundo parágrafo terá sua cor alterada, dado que é irmão
adjacente do primeiro (ambos filhos de <body>, no caso). Com isso, todos os
parágrafos, com exceção do primeiro, serão afetados pela estilização.
p + p + p { color: #F00; }
E[att]
No código acima, todos os links que possuírem o atributo “rel”, terão sua fonte
exibida em small-caps, que é mais ou menos como se o texto tivesse sido digitado
com o caps lock ligado.
E[att=val]
Neste caso, a sintaxe refere ao elemento “E”, que tenha o atributo “att” de valor
“val”, como, por exemplo:
p[class=citacao] {
font-size: 80%;
margin-left: 20%;
}
No caso acima, todo parágrafo que for da classe “citacao”, será exibido com a letra
com 80% de tamanho e com uma margem à esquerda de 20%.
E[att~=val]
Este tipo de seletor de atributo é bem parecido com o anterior, com a diferença de
que o valor “val” do atributo “att” não precisa necessariamente ser idêntico ao
especificado, mas precisa contê-lo. Uma aplicação útil que vejo para este tipo de
seletor é quando se especifica mais de uma classe para um elemento. Por exemplo,
se se tivesse o seguinte trecho de código CSS:
Neste caso, todo link em que o atributo “rel” tiver um “friend”, a estilização será
aplicada, independentemente de não haver somente ele.
E[att|=val]
Este, na verdade, não é muito encontrado nas estilizações CSS, em geral. A única
aplicação que já vi para este seletor é quando se especifica uma linguagem para
determinado trecho de código, dado que algumas contêm um hífen. Se, em um
blog, por exemplo, este CSS:
<p>
<span lang=“pt-br”[música para tirar alguém da fossa]</span>
If you're ugly, I'm ugly too<br />
In your eyes the sky's a different blue<br />
</p>
:first-child
<p>
Eu desço desta <a href=“http://solidao.net/”>solidão</a>,
disparo coisas sobre um chão de giz <br />
Há meros <http://devaneios.com>devaneios tolos</a> a me torturar <br />
Fotografias recortadas em jornais de folhas, amiúde
</p>
p a:first-child {
color: #F00;
font-variant: small-caps;
}
Apesar de não estarem juntas na tabela das sintaxes genéricas de seletores CSS,
vou tratar as pseudo-classes :link, :visited, :hover, :active e :focus de uma só vez.
Esta pseudo-classe refere-se a links no documento que ainda não tenha sido
visitados. Um exemplo de estilização:
a:link {
color: #369;
text-decoration: underline overline;
}
Ou seja, para os links em um documento que contenha uma folha de estilos com
essa regra, eles serão de uma cor azul e sublinhados e sobrelinhados.
:visited
Esta pseudo-classe refere-se a links que já tenham sido visitados. Por exemplo:
a:visited {
color: #39C;
text-decoration: none;
}
Neste caso, os links já visitados teriam uma cor azul (mais clara que a dos links do
exemplo acima) e não seriam sublinhados nem sobrelinhados.
:hover
a:hover {
background-color: #369;
color: #FFF;
text-decoration: none;
}
No caso, quando o usuário “passa o mouse por cima” do link, ele ficará com uma
cor de fundo azul, o texto com a cor branca e sem sublinhado nem sobrelinhado.
Essa é para quando o usuário clica no link, no exato momento em que ele faz isso.
Uma prática corriqueira, para esta pseudo-classe, é repetir o que já está em
:hover, dado que os usuários “comuns” não clicam em um link e seguram o botão;
clicam e soltam, rapidamente. Dessa forma, o estilo aparece por umas poucas
frações de segundo e é praticamente imperceptível32. Observe:
a:active {
color: #F00;
text-decoration: none;
}
Quando o usuário clicar no link, seu texto ficará de uma cor vermelha e sem
sublinhado nem sobrelinhado.
● :link
● :visited
● :hover
● :active34
32 A não ser que se especifique que o tamanho da letra vai aumentar, ou algo do tipo, que dê bastante destaque.
33 http://www.maujor.com/
34 Quando utilizar, também, a pseudo-classe :focus (próxima a ser explicada), esta deve vir antes de :active.
Esta pseudo-classe é para quando algum elemento recebe foco, ou seja, como
escreveu o Maujor35, quando aceita eventos do teclado. É muito usado para estilizar
elementos de formulários, como os “inputs”.
input[type=“text”]:focus {
background-color: #399;
color: #FFF;
}
No caso, quando a pessoa acessar esse tipo de campo para inserção de textos, sua
cor de fundo mudará para um tipo de verde e a cor do texto será branca; assim
que ele passar para outro campo, tudo voltará ao que era antes de ele dar foco
àquele elemento.
:lang36
A pseudo-classe para linguagem (idioma) pode ser usada para estilizar elementos
cujo conteúdo está escrito em uma determinada linguagem (idioma - uma língua
para humanos e não uma linguagem de marcação). A regra a seguir define que tipo
de aspas usar para textos inline que estão escritos no idioma da Suécia:
PSEUDO-ELEMENTOS
35 http://www.maujor.com/
36 Tomarei emprestadas as palavras de Maujor (http://www.maujor.com/) que estão na tradução que fez do artigo “CSS2.1
selectors, Part 3” (http://www.456bereastreet.com/archive/200510/css_21_selectors_part_3/), de Roger Johansson
(http://www.456bereastreet.com/).
Como indica o próprio nome, este pseudo-elemento diz respeito à primeira linha
(de parágrafos, geralmente37). Mas, até onde vai a “primeira linha” de um
parágrafo? Bem, na verdade, a “primeira linha” é literalmente a primeira linha
(dããã). Quer dizer, a primeira linha que é exibida. Se um desenvolvedor estiliza os
parágrafos com :first-line, com, por exemplo38:
p:first-line {
background-color: red;
color: white;
}
Muito bem. Mas sabe o que acontece caso a janela seja redimensionada (de modo a
“reacomodar” o texto) ou o tamanho da fonte seja alterada (pelo próprio visitante)?
Isso, parabéns: a estilização vai acompanhar a primeira linha que é exibida!
:first-letter39
#primeiroParagrafo:first-letter {
background-color: #369;
color: #FFF;
font-family: fantasy;
font-size: 200%;
padding: 2px;
}
37 Mas pode estilizar, também, elementos a nível de bloco, blocos inline, table-caption ou table-cell. Na verdade, conforme
consta no documento oficial do W3C “Selectors” (http://www.w3.org/TR/CSS21/selector.html), a compatibilidade desse
pseudo-elemento diz respeito às propriedades de font, cor e background, "word-spacing”, “letter-spacing”, “text-
decoration”, “vertical-align”, “text-transform” e “line-height”.
38 Tudo bem, tudo bem, ninguém vai querer todas as primeiras linhas de seus parágrafos com fundo vermelho e letra
branca, mas é só para ilustrar o conceito, pô...
39 Segundo o documento “Selectors” (http://www.w3.org/TR/CSS21/selector.html), o :first-letter pode ser estilizado com
propriedades de font, margin, padding, border, color e background, "text-decoration", "text-transform", "letter-spacing",
"word-spacing" (quando apropriado), "line-height", "float" e "vertical-align" (apenas se "float" for igual a "none").
Por exemplo, para exibir a URL de um link entre parênteses, sem precisar escrevê-
lo40:
.comentarios a:after {
content: " (" attr(href) ") ";
}
Ou seja, o conteúdo (content) que será apresentado depois (:after) de links (a) da
classe “comentarios” (.comentarios) será o atributo (attr) caminho do link (href),
que será colocado entre parênteses (“ (” [...] “) ”). É realmente um pouco
complicado, no início, mas, depois de alguns testes e implementações, facilita
bastante.
Muitas outras coisas podem ser feitas com :before e :after, como, em um
documento, organizar os títulos primários (h1) assim: “Capítulo 1: [texto do h1]”,
no próximo h1, será colocado “Capítulo 2: [texto do h1]”, com o contador
automático, ou seja, você pode inserir os h1 normalmente, que o CSS se encarrega
de incrementar a numeração41!
COMPATIBILIDADE
Infelizmente, nem tudo são flores quando se fala em aplicar os seletores
avançados. Os navegadores mais antigos não dão suporte a esse parte da
tecnologia CSS e, o que chega a ser até triste, o navegador mais usado no mundo,
o Internet Explorer (também conhecido como “IEca”), até sua penúltima versão, a
6, também não oferece suporte a praticamente todos os seletores avançados.
Devido ao fato de a versão 7 deste navegador ser bem recente, ainda vai demorar
40 O nome da classe do exemplo foi proposital. Quis demonstrar que uma boa aplicação para o uso do pseudo-elemento
:after é para exibir a URL do site de alguém que faz comentários em um post.
41 Confira o documento do W3C “Generated content, automatic numbering, and lists”, que pode ser acessado através do
endereço http://www.w3.org/TR/CSS21/generate.html .
De qualquer forma, ficam expostos os seletores avançados. Como pôde ser visto,
eles são muito poderosos, mas devido ao que foi dito no último parágrafo, ainda
devem ser usados com cautela.
Uma coisa legal de se fazer é colocar alguns recursos que só funcionam em bons
navegadores (leia-se, navegadores que não sejam o IEca, tais como
Firefox/Iceweasel e Opera), sem prejudicar o funcionamento do site, como um
todo. Apenas colocar elementos para que ele fique mais “interessante”, quando
acessado por navegadores decentes.
Aí, para fazer uma “contra manipulação”, você coloca no rodapé: “otimizado para
Firefox” (por exemplo), com um link para pegar o browser.
COMPLEMENTOS
Desabafos à parte, o que quero mostrar com esse tópico é a importância de realizar
muitos (mas muitos, mesmo) testes em navegadores diferentes durante a fase de
desenvolvimento das páginas dos websites. É de suma importância que se faça
testes em, no mínimo, 2 navegadores: Firefox/Iceweasel e IEca. Preferencialmente,
42 Nem sei como eles ainda são aceitos no W3C...
43 Ou exigir 1GB de RAM para rodar um efeitinho chulé de flip entre janelas ou, o que é o maior absurdo da história dos
sistemas operacionais: exigir, nada mais, nada menos, que 3BG de RAM para rodar a nova versão do Rwindows em
“desempenho total”...
De qualquer maneira, é a vida... Isso acontece, mesmo, não tem jeito, e quem está
interessado em ser profissional da área tem de aceitar ou, pelo menos, se
conformar (é o meu caso) com esse tipo de acontecimento.
COMENTÁRIOS CONDICIONAIS
“Tudo, bem, tudo bem. Depois de ler o tópico anterior fiquei sensibilizado e seguirei
seu conselho de ser paciente e dedicado, mas, afinal de contas, o que realmente
posso fazer para eliminar os problemas que estão acontecendo quando meus
websites são visualizado no IEca”? Boa pergunta!
44 Uma boa notícia: saiu, para PC, o Safari 3 (beta)!
45 Evidente que, caso não se tenha acesso a MACs e/ou outros sistemas operacionais do que atualmente se usa (e tomara
que não esteja falando do “navegador azul de logomarca feia”), o teste, infelizmente, limitar-se-á aos dois necessários
para testes mínimos.
46 Se não quiser acreditar, tudo bem. De repente você é daqueles religiosos que têm que “ver para crer”, ou daqueles
metrossexuais que gostam de “sentir na pele essa emoção”. (-:
A própria empresa que desenvolve o IEca (que me recuso a escrever o nome mais
uma vez), ciente de sua falta de vergonha na cara, apareceu com uma solução até
certo ponto agradável para tentar resolver as inúmeras diferenças advindas da falta
de suporte a padrões internacionais de um de seus produtos, desenvolvendo,
então, os comentários condicionais, também conhecidos como “CC”.
Através dos CC podemos alterar regras CSS especificamente para IEca, através de
uma folha de estilo à parte, que só “entra em ação” caso o browser que visita a
página seja esse aí.
Isto é, depois de vincular sua folha de estilos normalmente, você irá, através dos
CC, vincular, também, uma outra, que é a iehacks.
47 Como você bem deve saber, os comentários (X)HTML começam com “<!--” e terminam com “-->”.
Entendeu? Você especificou que, se, e somente se, o navegador que renderiza a
página for IEca, a classe “citacao” terá um padding-right de 15%; do contrario,
quer dizer, em qualquer outro navegador, continuará com seus 5% “originais”48.
Se, por exemplo, sua vontade fosse a de que, no IEca, as letras dessa classe
aparecessem em uma cor vermelha, a regra seria a seguinte:
E, no estilo inline:
De qualquer maneira, o parágrafo seria exibido com uma cor vermelha, e não
verde, como era para “normalmente” acontecer. E isso aconteceu devido ao
!important, que especificou que, naquela folha externa, a propriedade que tratava
da cor era mais “!important”.
SEMÂNTICA
Um assunto muito abordado no meio de desenvolvedores web conscientes é a
semântica. Inclusive, este é um tema que deve ser estudado e principalmente,
praticado efetivamente, caso se queira atingir um grau de amadurecimento
profissional adequado e oferecer um serviço de qualidade para os clientes.
Quando estamos codificando páginas web, inserimos tags (X)HTML para marcar os
trechos e elementos que queremos. Se queremos indicar que uma palavra é um
Quem já não se deparou com páginas cujo layout é todo feito com tabelas? Quem
já não viu um “parágrafo” todo em h2, para que o texto apareça maior, com mais
destaque? É esse tipo de barbaridade a que estou me referindo. Ao fazer essa
atrocidade, o desenvolvedor está ferindo a semântica! As tabelas não foram
idealizadas para que fossem utilizadas em montagens de aparência para os sites;
os títulos secundários não foram feitos para dar destaque a um parágrafo...
Com isso, seu nome vai ficando enlameado e sua reputação despenca. Dependendo
do “tipo” do seu ex-cliente, fique muitíssimo feliz caso não receba uma cartinha do
advogado dele... Já pensou se ele resolve pegar o dinheiro de volta por não ter tido
uma prestação de serviço de qualidade que, ainda por cima, prejudicou seus
negócios?
Não que esta situação sempre aconteça, mas também não pense que nunca
aconteça...
GERAL
http://www.maujor.com/
Ao longo da apostila, citei várias vezes o endereço do Maujor (e isso foi proposital).
Foi lá que eu tive o primeiro contato com o CSS e assuntos afins. Eu considero que
o site seja uma imensa “apostila virtual”, e julgo ser a melhor referência que
atualmente se tem no Brasil! Se não fosse o site de Maurício Samy Silva,
provavelmente hoje eu ainda estaria compondo layouts em tabelas... Eu sei que
você não sabe que eu existo, mas eu e muitas outras pessoas sabemos que você
existe, e pudemos elaborar websites melhores graças a sua ajuda e dedicação!
Muito obrigado, Maujor!
http://webinsider.uol.com.br/
O Webinsider é um daqueles portais com dezenas de seções direcionadas aos mais
variados assuntos e públicos. A qualidade das informações que seus autores
transmitem é muito boa, e, lá, podem-se encontram temas voltados tanto à
programação, propriamente dita, quanto assuntos mais “abstratos”, que instigam o
visitante à reflexão sobre temas do dia-a-dia (de um desenvolvedor web).
http://www.imasters.com.br/
Talvez o portal dispense apresentações... De qualquer maneira, é no iMasters que
muitas das melhores postagens de códigos e tutoriais atualmente disponíveis estão.
Eles com certeza são um dos melhores e mais conhecidos portais sobre
desenvolvimento do Brasil e têm até revista impressa de circulação nacional.
http://www.brunodulcetti.com/blog/
Em seu blog, Bruno Dulcetti trata de diversos temas relacionados ao
desenvolvimento para web. Ele utiliza uma linguagem descontraída e de fácil
acesso a qualquer indivíduo, desde o desenvolvedor veterano àqueles que estão
dando seus primeiros passos na área.
http://fatorw.com/
As postagens de Walmar Andrade são muito úteis e interessantes. Ele aborda desde
temas mais complexos, com textos um pouco mais longos, à dicas para outros sites
e matérias, com textos estilo “rapidinha”. No Fator W são tratados assuntos como
Arquitetura da Informação, Usabilidade, Web Standards, Design, dentre muitos
outros.
http://www.pinceladasdaweb.com.br/blog
Acessibilidade, CSS, Microformats, AJAX, Semântica, Linux... Esses e muitos outros
assuntos são tratados por Pedro Rogério em seu blog. Seus textos são agradáveis
de se ler, por serem simples e objetivos.
Creio que para obter um bom rendimento ao ler a apostila, deve-se fazê-lo com o
site do Maujor aberto no navegador50. Dessa forma, quando começarem a surgir
dúvidas a respeito da codificação, propriamente dita, basta fazer uma breve
consulta para saber do que se trata.
Eu até fiquei pensando em como seria a reação do leitor em alguns trechos que têm
propriedades CSS que não foram apresentadas, mas é impossível saber... Por isso,
que tal enviar uma mensagem falando o que pensou dessa abordagem? Só entrar
no blog e preencher o formulário!
Muito Obrigado!
50 “Pô, que sacanagem! Ele só foi falar isso na Conclusão?”. É, foi proposital... Agora você lê tudo de novo com o site aberto!
51 Esta última página foi colocada somente para a apostila ficar com número de páginas “redondo”: ela tem 60 (e 51 notas de
rodapé: uma boa idéia!). (-;