Escolar Documentos
Profissional Documentos
Cultura Documentos
2020
CSS
06/06/202
0
CSS
Cascading Style Sheets
© Datamec S.A.
Sumário
Capítulo 1: ................................................................................................................. 3
Objetivo .............................................................................................................................4
Revisão............................................................................................................................19
Capítulo 2: ............................................................................................................... 20
Objetivo ...........................................................................................................................21
Revisão............................................................................................................................28
Capítulo 3: ............................................................................................................... 29
Dynamic HTML........................................................................................................ 29
Objetivo ...........................................................................................................................30
Introdução à DHTML.......................................................................................................31
Revisão............................................................................................................................36
Cascading Style Sheets 3
Capítulo 1:
Aplicando Style Sheets
Cascading Style Sheets 4
Objetivo
CSS, ou Cascading Style Sheets é uma recomendação do W3C, assim como o XML e o HTML.
Style Sheets permite a separação do conteúdo dos documentos de sua apresentação. E associando
scripts aos elementos é possível alterar o formato do documento assim como sua interface com o
usuário.
Conteúdo
Conteúdo
Apresentação Apresentação
Tanto o Internet Explorer 4.0 ou superior quanto Netscape 4.7 suportam Cascading Style Sheets
Nível 1 (CSS1). As implementações superiores dos respectivos navegadores suportam CSS2 embora
de maneira diferente.
Anotações
Cascading Style Sheets 6
A linguagem HTML permite que qualquer trecho de código seja adicionado à página. Para tanto é
utilizada o elemento <META>. Entretanto, você deve especificar a linguagem a ser utilizada, como no
exemplo abaixo:
Através de links
Você pode criar uma Style Sheet em um arquivo separado para posteriormente aplicar tal estilo em
todas as páginas do site. Utilizando este recurso adequadamente, é possível centralizar quase toda a
apresentação de um site em um ou mais arquivos. Caso haja necessidade de mudança na
apresentação do site, esta é feita em um único lugar.
É aconselhável que o arquivo de estilos possua a extensão .css mas não é obrigatório. Outra
extensão também funciona. É um arquivo somente texto cujo formato é legível e de fácil
compreensão. Isto facilita a criação de Style Sheets utilizando editores simples como o notepad.
Para associar uma Style Sheet armazenada em um arquivo separado use o elemento <LINK> como
no exemplo abaixo:
<LINK REL=STYLESHEET
HREF="http://www.myserver.com/mysheet.css"
TYPE="text/css">
Anotações
Cascading Style Sheets 7
É possível a utilização de estilos internos e estilos externos. Neste caso os estilos internos
sobrepõem estilos externos se houver conflitos. Se não houver, os estilos internos são aplicados e
posteriormente são aplicados os estilos externos.
O elemento utilizada para adicionar o estilo ao documento é o elemento <STYLE>. O atributo TYPE
especifica o tipo MIME. Existem alguns outros atributos que serão abordados posteriormente.
Anotações
Cascading Style Sheets 8
Por exemplo: suponhamos que você queira alterar a cor de um parágrafo destacando-o diante do
resto do documento mas esta alteração é uma exceção. Então você pode utilizar o atributo STYLE e
atribuir a este o estilo a ser aplicado:
Estilos definidos junto com os elementos devem ser utilizados com cuidado para que seja preservada
uma das principais características da CSS: a reutilização de estilos.
<STYLE TYPE="text/css">
@import url(http://www.myserver.com/style.css);
</STYLE>
Anotações
Cascading Style Sheets 9
Importância do estilo
A utilização de estilo na construção de grandes sites é fundamental. A utilização adequada pode
contribuir nos seguintes aspectos:
Apesar das inúmeras vantagens a construção de estilos sólidos e reusáveis é uma tarefa difícil e
requer administração centralizada. Mais tarde discutiremos os desafios enfrentados ao desenvolver
sites utilizando CSS.
Anotações
Cascading Style Sheets 10
Entendendo a ordem
Como dito anteriormente, você pode utilizar vários tipos de estilos para controlar a aparência do seu
site. O navegador estabelece uma prioridade para cada estilo a ser aplicado como na lista a seguir:
Embora não seja aconselhável você pode usar o palavra importante para alterar esta precedência. No
exemplo abaixo o estilo atribuído ao elemento H1 sobrepõe o estilo definido junto com o elemento
graças ao uso da palavra important:
Anotações
Cascading Style Sheets 11
@media print
{ BODY { font-size: 10pt } }
@media screen
{ BODY { font-size: 12pt } }
Tipo Descrição
Screen Telas de computadores
Print Impressoras
Projection Projeções
Braile Dispositivos Braile
Speech Sintetizadores de voz
All Todos os dispositivos
Anotações
Cascading Style Sheets 12
Tanto Style Sheets anexadas quanto no documento permitem a definição de um ou mais elementos.
Por exemplo você deseja criar uma Style Sheet que define estilos para os elementos <H1>, <H2> e
<P>. Cada definição de estilo é chamada de regra. Uma regra contém um seletor (que é o próprio
elemento), seguido da declaração (a definição do estilo). O exemplo abaixo mostra uma regra que
define um estilo para cada ocorrência do elemento <H1>:
H1 {color: blue}
A declaração é colocada entre chaves ({}). Cada item na declaração possui duas partes: O nome da
propriedade e o valor atribuído a esta, separado por dois pontos (:). No exemplo abaixo, color é o
nome da propriedade e blue é o valor atribuído a esta. Existes dezenas de propriedades as quais se
aplicam tipos predefinidos e certos intervalos de valores:
<STYLE TYPE="text/css">
H1 {color: blue}
P {font-size: 10pt}
</STYLE>
Anotações
Cascading Style Sheets 13
Entretanto, existe uma maneira mais eficiente de fazer a mesma ação. Os elementos (ou seletores)
podem ser agrupados de modo a definir uma regra única para todo o grupo. No exemplo abaixo os
seletores são agrupados e uma única regra é atribuída:
Anotações
Cascading Style Sheets 14
Seletores contextuais definem a seqüência exata de elementos para o qual um estilo será aplicado.
OL LI {list-style-type: decimal}
UL LI {list-style-type: square}
Note que a lista de seletores não é separada por vírgula. Separando cada seletor por vírgula os
estilos atribuídos serão aplicados aquele grupo de elementos.
Entendendo Herança
Os elementos herdam certas propriedades de seus pais. Por exemplo, todas os elementos dentro do
elemento <BODY> (<P> e <UL>) herdam certas propriedades deste. Assim como o elemento <LI>
herda propriedades do elemento <UL> no qual ele está contido. Veja o exemplo:
Anotações
Cascading Style Sheets 15
A Style Sheet para este exemplo muda a cor do elemento <P> para azul. Não há definição para o
elemento <EM>. Devido ao fato do elemento <EM> está dentro do elemento <P>, <EM> herda o
propriedade color do elemento <P>.
Quando o elemento <H1> é adicionado ao documento, o atributo CLASS é utilizado para atribuir qual
estilo será utilizado.
Anotações
Cascading Style Sheets 16
Uma classe não precisa de estar ligada à um elemento. As classes podem ser declaradas sem
nenhum elemento. Assim, qualquer elemento que utilize aquela classe utilizará aquele estilo:
.red {color:red}
O exemplo abaixo declara um estilo para o ID test.. Ele também usa o elemento <P> e atribui a este
o ID test:
# test {color:red}
Anotações
Cascading Style Sheets 17
Usando pseudo-classes
Em CSS1, um estilo normalmente é associado a um elemento com base na posição que este
elemento ocupa dentro da estrutura hierárquica do documento. Isto é suficiente para uma grande
variedade de estilos, mas não atende a alguns efeitos comuns. O conceito de pseudo-classes e de
pseudo-elementos veio atender esta área, permitindo que informações exteriores possam influenciar
o processo de formatação do documento.
Pseudo-classes e pseudo-elementos podem ser usados como seletores na CSS, mas eles não
existem dentro da HTML. Mais exatamente, eles são 'inseridos' pelo browser, sob certas condições,
para serem usados como elos de ligação com as folhas de estilo. Eles são referidos como 'classes' e
'elementos' porque esta é uma maneira conveniente de descrever seu comportamento. Mais
especificamente, seu comportamento é definido por uma tag fictícia de seqüência.
Todos os elementos 'A' com um atributo 'HREF' serão classificados em um, e apenas um, destes
grupos (ou seja, as definições das posições locais dos links não serão afetadas). Os navegadores
podem decidir mover um elemento de um grupo a outro (de 'visitado' para 'não visitado', por exemplo,
após um certo tempo). Um 'link ativo' é aquele que está sendo selecionado no momento pelo leitor
(está sendo 'clicado').
Anotações
Cascading Style Sheets 18
/*------------------------------------------------------
Este é um bloco de comentario
------------------------------------------------------*/
<STYLE TYPE="text/css">
<!--
H1 {color: red}
-->
</STYLE>
Anotações
Cascading Style Sheets 19
Revisão
1. Quais são as principais vantagens e desvantagens do uso de Style Sheets em arquivos externos?
Capítulo 2:
Posicionando elementos
Cascading Style Sheets 21
Objetivo
No mundo das publicações, camadas são blocos retangulares de texto e imagens que podem ser
posicionados em qualquer lugar da página. Estas camadas podem ser ocultas e sobrepostas.
Antes da CSS, era impossível construir páginas HTML utilizando este conceito. O documento era
exibido seqüencialmente sem a possibilidade de sobrepor camadas.
CSS permite a construção de blocos de texto que se sobrepõe assim como ocultar ou exibir
determinados blocos.
Anotações
Cascading Style Sheets 23
No exemplo acima, o elemento é posicionado à 100 pixels da borda superior do elemento pai e à 20
pixels da borda esquerda o elemento pai. Quando o elemento a ser posicionado não possui pai, este
é posicionado em relação às bordas do navegador.
A unidade de medida padrão para LEFT e TOP é pixels. Pode ser usado também valores percentuais,
que eqüivale ao percentual do elemento pai. O exemplo abaixo posiciona uma imagem à 40 pixels do
topo e 100 pixels da borda esquerda do elemento <BODY>. Como no elemento <BODY> não existe
posicionamento definido e ele não tem nenhum elemento pai, este assume a posição 0, 0.
Anotações
Cascading Style Sheets 24
#element {position: absolute; top: 100; left: 20; width: 100; height: 100}
A propriedade WIDTH não é usada para definir exatamente a largura do elemento. Esta propriedade
serve apenas para o caso em que haja algum elemento dentro do qual é definido pela propriedade
WIDTH e este seja maior que o mesmo.
Existe ainda a propriedade OVERFLOW que determina como o navegador se comporta no caso em que
o conteúdo de um elemento excede o tamanho do elemento. Os possíveis valores são NONE, CLIP e
SCROLL.
<HTML><STYLE TYPE=”text/css”>
#example {position: absolute; top:80; left:40; width:160} </STYLE>
<BODY><DIV ID=example>
Este texto está dentro da tag DIV. Observe seu comportamento.
</DIV> </BODY> </HTML>
Anotações
Cascading Style Sheets 25
Sobrepondo elementos
A propriedade Z-INDEX aceita valores inteiros positivos. Um elemento com a propriedade Z-INDEX
igual à 10 sobrepõe um elemento com a propriedade Z-INDEX igual à 1.
O exemplo abaixo mostra 2 elementos usando a propriedade Z-INDEX para manipular a ordem de
exibição:
<STYLE TYPE="text/css">
#ex1 {position: absolute; top: 40; left: 60; z-index: 2}
#ex2 {position: absolute; top: 80; left: 200; z-index: 1}
</STYLE>
<BODY><DIV ID=ex1>
<B>This is the first element. It's in the middle.</B><BR>
<B>This is the first element. It's in the middle.</B><BR>
</DIV>
<DIV ID=ex2>
<B>This is the second layer. It's behind the first layer.</B><BR>
<B>This is the second layer. It's behind the first layer.</B><BR>
</DIV>
Anotações
Cascading Style Sheets 26
<STYLE TYPE="text/css">
# test1
{background-color: blue; position: absolute; top: 50; left: 60; width: 150}
# test2
{background-color: yellow; position: absolute; top: 70; left: 30; width: 150}
</STYLE>
Anotações
Cascading Style Sheets 27
Dado o ID de um determinado elemento, este pode ser referenciado utilizando o DOM, como no
exemplo abaixo:
Document.all.item(id, 0).style.property
Anotações
Cascading Style Sheets 28
Revisão
Capítulo 3:
Dynamic HTML
Cascading Style Sheets 30
Objetivo
Introdução à DHTML
DHTML promete causar uma revolução na construção de sites combinando CSS, HTML e scripts
para manipular ambas.
Existem grandes diferenças entre Netscape e IE quanto a forma de implementar DHTML. Devido à
grande diferença de implementação do DOM (Documento Object Model) é praticamente impossível
criar um site que funcione nos dois navegadores sem nenhuma alteração.
DOM é um modelo de navegação em documentos através de árvore. Todo exemplo utilizado nesta
apostila é baseado neste modelo.
Para efeitos didáticos, adotamos aqui comandos que funcionam no IE devido ao seu domínio de
mercado.
Anotações
Cascading Style Sheets 32
A maneira mais explícita de acessar uma elemento é usando o objeto all, que pode usar ID, nome o
elemento ou número seqüencial como parâmetro. No exemplo abaixo a variável e recebe o conteúdo
do objeto cujo ID é example:
e = document.all(“example”);
Anotações
Cascading Style Sheets 33
Antes de DHTML era impossível mudar conteúdo de uma página dinamicamente após esta ter sido
carregada.
No IE, cada elemento tem duas propriedades que permitem a alteração dos dados sem ter que
recarregar a página:
No exemplo acima, Test.innerText altera somente o texto enquanto Test.innerHTML pode incluir
códigos HTML.
Anotações
Cascading Style Sheets 34
Assim como é possível alterar textos é possível alterar as propriedades de estilos já atribuídos. É
possível tornar um elemento visível ou oculto, mudar suas cores, fonte, etc. Para tanto basta
referenciar o estilo e atribuir uma nova propriedade.
O DOM do Internet Explorer expõe todos os estilos para cada elemento no documento. Estes estilos
são acessados utilizando a propriedade style, como mostrado no exemplo abaixo:
Test.style.color= “red”;
Anotações
Cascading Style Sheets 35
Controlar a visibilidade de objetos cria uma infinidade de possibilidades no que diz respeito ao design.
Lógicas de várias pastas que até então eram impossíveis no mundo web agora se tornaram fáceis de
ser implementadas. Conforme o usuário clica em um item, o navegador mostra o texto apropriado
aquele item.
Anotações
Cascading Style Sheets 36
Revisão
2. O que é DOM?
CSS:
Guia de Referência
Cascading Style Sheets 38
Sumário
Propriedade 'padding'.................................................................................................................................60
Propriedade 'border-top-width'...................................................................................................................61
Propriedade 'border-right-width' ................................................................................................................62
Propriedade 'border-bottom-width' ............................................................................................................62
Propriedade 'border-left-width' ..................................................................................................................62
Propriedade 'border-width'.........................................................................................................................62
Propriedade 'border-color'..........................................................................................................................63
Propriedade 'border-style' ..........................................................................................................................63
Propriedade 'border-top'.............................................................................................................................64
Propriedade 'border-right' ..........................................................................................................................65
Propriedade 'border-bottom'.......................................................................................................................65
Propriedade 'border-left'.............................................................................................................................65
Propriedade 'border' ...................................................................................................................................66
Propriedade 'width'.....................................................................................................................................67
Propriedade 'height'....................................................................................................................................67
Propriedade 'float' ......................................................................................................................................67
Propriedade 'clear' ......................................................................................................................................68
Propriedades de Ordenação............................................................................................................................69
Propriedade 'display' ..................................................................................................................................69
Propriedade 'white-space'...........................................................................................................................70
Propriedade 'list-style-type'........................................................................................................................70
Propriedade 'list-style-image' .....................................................................................................................70
Propriedade 'list-style-position'..................................................................................................................71
Propriedade 'list-style' ................................................................................................................................71
Unidades ........................................................................................................................................... 73
Unidades de Medidas.....................................................................................................................................73
Unidades Percentuais .....................................................................................................................................74
Unidades para Cores ......................................................................................................................................74
URL ...............................................................................................................................................................76
Cascading Style Sheets 40
Propriedades CSS1
Valor: N | NW | NE
Valor: [ <comprimento> | thick | thin ]{1,4}
Valor: [<família> , ]* <família>
Valor: <url>? <cor> [ / <cor> ]?
Valor: <url> || <cor>
As palavras entre "<" e ">" indicam o tipo do valor. Os tipos mais comuns são <comprimento>,
<percentagem>, <url>, <número> e <cor>; eles estão descritos na seção Unidades. Os tipos mais
específicos de valores (<família-da-fonte> e <estilo-da-borda>) estão descritos nos tópicos
correspondentes.
As outras palavras são palavras-chaves que devem ser usadas tal como aparecem, sem as aspas. A
barra (/) e a vírgula (,) também devem ser empregadas tal como estão definidas.
Vários parâmetros indicados em seqüência significa que todos eles devem ser definidos, na ordem
em que aparecem. Uma barra (|) separa alternativas: apenas um dos parâmetros deve ser definido.
Uma barra dupla (||) significa que tanto o parâmetro A como o B, ou mesmo ambos, podem ser
definidos, em qualquer ordem. Colchetes ([]) são usados para agrupar parâmetros. Em ordem de
prioridade, uma seqüência de parâmetros vale mais que a barra dupla (||), e a barra dupla vale mais
que a barra simples (|). Portanto,
a b | c || d e é equivalente a [ a b ] | [ c || [ d e ]]
Cada tipo de valor, palavra-chave ou grupamento ([]) pode vir seguido por um dos seguintes
modificadores:
• Um asterisco (*) indica que o tipo, palavra ou grupo que o precede pode ser repetido zero ou mais vezes.
• Um sinal positivo (+) indica que o tipo, palavra ou grupo que o precede é repetido uma ou mais vezes.
• Um ponto de interrogação (?) indica que o tipo, palavra ou grupo que o precede é opcional.
• Um par de números entre chaves ({A,B}) indica que o tipo, palavra ou grupo que o precede é repetido no mínimo A e
no máximo B vezes.
Cascading Style Sheets 41
2. Para um dado elemento, e para cada caracter definido neste elemento, o browser monta todas as propriedades
aplicáveis àquele elemento. Com base no conjunto completo de propriedades, o browser olha para o propriedade
'font-family' a fim de escolher uma família de fontes que possa ser usada. Com esta família já escolhida, todo o
conjunto de propriedades é testado para ver se eles podem ser aplicados à mesma. Em caso positivo está
determinada a fonte a ser usada.
3. Se não ocorre o casamento de todas as propriedades, e ainda existem mais famílias de fontes disponíveis para uso,
então o passo anterior é repetido para uma nova família.
4. Caso ocorra o casamento de todas as propriedades, mas o caracter necessário não esteja definido na família
escolhida, e se ainda houver mais famílias disponíveis, então o passo 2 é repetido com a próxima família disponível.
5. Se nenhuma fonte for encontrada no processo descrito, então uma fonte 'default', dependente de cada browser, será
empregada usando a melhor combinação de propriedades possível para montar o caracter.
(este algoritmo pode ser otimizado para evitar a consulta de todas as propriedades para cada caracter
a ser montado).
1. Inicialmente é testada 'font-style'. O estilo itálico ('italic') será atendido caso exista uma fonte no banco de dados
usado pelo browser que esteja designada pela palavra-chave 'italic' (de preferência) ou 'oblique'. Caso contrário
todos os outros valores deverão coincidir de maneira exata, ou o estilo não funcionará.
Cascading Style Sheets 42
2. A seguir é testada a propriedade 'font-variant'. Um valor 'normal' é aceito para uma fonte que não esteja especificada
como 'small-caps'; 'small-caps' é aceito com (1) uma fonte especificada como 'small-caps', (2) uma fonte onde as
letras maiúsculas de tamanho pequeno sejam geradas, ou (3) uma fonte onde todas as letras minúsculas foram
substituídas por letras maiúsculas. Uma fonte 'small-caps' pode ser gerada eletronicamente redimensionando letras
maiúsculas a partir de uma fonte normal.
4. A seguir, deve ser atendida a propriedade 'font-size', dentro de uma margem de tolerância que depende de cada
browser. Normalmente, o tamanho para as fontes escaláveis é arredondado para o pixel inteiro mais próximo,
enquanto que a tolerância para as fontes não escaláveis (bitmap) pode chegar a 20%. Os cálculos posteriores,
provocados pelos valores 'em' em outras propriedades, tomam como base o valor de 'font-size'.
Propriedade 'font-family'
O valor desta propriedade consiste numa relação de nomes específicos de famílias de fontes ou de
seus nomes genéricos. Ao contrário de outras propriedades CSS1, os valores na relação de nomes
são separados por vírgulas para indicar que eles são alternativos:
É recomendável que os autores de folhas de estilo sempre forneçam uma família genérica
como última alternativa.
Nomes que contenham espaços em branco devem ser colocados entre aspas:
Cascading Style Sheets 43
Propriedade 'font-style'
A propriedade 'font-style' define se a fonte é normal (algumas vezes chamada de 'romana'), itálica ou
oblíqua.
Um valor 'normal' seleciona uma fonte que está classificada como 'normal' na base de dados do
browser, enquanto 'oblique' indica uma fonte classificada como 'oblique'. Já um valor 'italic' seleciona
uma fonte classifica como 'italic' ou, caso não exista, uma outra classificada como 'oblique'.
Uma fonte que esteja classificada como 'oblique' no banco de dados de um browser é, normalmente,
gerada internamente pela inclinação de uma fonte normal.
Fontes que contenham as palavras 'Oblique', 'Slanted' ou 'Incline' em seus nomes são classificadas
como 'oblique'. Já as fontes com Italic, Cursive ou Kursiv são classificadas como 'italic'.
Neste exemplo, um texto enfatizado que faça parte de algum elemento 'H1' aparece como 'normal'.
Propriedade 'font-variant'
Um outro tipo de variação no formato da fonte dentro de uma família é a 'small-caps'. Numa fonte
deste tipo, o formato das letras minúsculas é similar ao das letras maiúsculas, diferindo apenas no
tamanho.
O valor 'normal' indica uma fonte que não pertença a este tipo. É aceitável, embora não exigido pela
CSS1, que uma fonte 'small-caps' seja criada à partir de uma fonte normal onde as letras minúsculas
são substituídas pelas letras maiúsculas com tamanho menor. Como último recurso, as letras
maiúsculas poderão substituir as minúsculas sem qualquer alteração de tamanho.
O exemplo a seguir produz um elemento 'H3' em 'small-caps', no qual as letras enfatizadas são
oblíquas:
H3 { font-variant: small-caps }
EM { font-style: oblique }
Poderão existir outras variações dentro de uma família de fontes, tais como fontes com caracteres
antigos, letras condensadas ou expandidas, etc. A CSS1 não possui propriedades para tratar destas
fontes.
Propriedade 'font-weight'
font-weight: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
Os valores representados por 'bolder' e 'lighter' são usados sempre como referência aos valores
herdados do elemento pai:
Elementos filhos herdam a intensidade, não a palavra-chave. As fontes normalmente possuem uma
ou mais propriedades cujos valores são nomes descritivos da sua intensidade. Não existe um padrão
universalmente aceito para estes nomes. Seu uso inicial era distinguir fontes de diferentes
Cascading Style Sheets 45
tonalidades dentro de uma única família. Seu uso por outras famílias de fontes varia bastante; por
exemplo, uma fonte que você imagina como sendo pesada (escura) pode ter sido descrita como
Regular, Roman, Book, Medium, Semi- ou DemiBold, Bold, ou ainda Black, dependendo de quão
escura é a fonte dita 'normal' pelo seu criador. Devido a esta falta de padronização, em CSS1 a
intensidade é expressa por valores numéricos, onde o valor '400' indica a fonte 'normal' para aquela
família.
• Se a família da fonte já possui uma escala numérica com nove valores (tal como a OpenType), as intensidades
podem ser indicadas diretamente.
• Se existe uma fonte identificada como Medium e outra como Book, Regular, Roman ou Normal, então a Medium é
associada à intensidade '500'.
• Se existem menos de nove valores de intensidade definidos para a família, deve ser usado o seguinte algoritmo para
preencher as lacunas. Se '500' não estiver designado, ele será associado à mesma fonte de '400'. Se qualquer dos
valores '600, '700', '800' ou '900' não estiverem designados, eles serão associados à próxima fonte mais escura
disponível, se houver, ou à menos clara em caso contrário. Se quaisquer dos valores '300', '200' ou '100' estiverem
ausentes, eles serão associados à próxima fonte mais clara disponível, se houver, ou à menos escura em caso
contrário.
Os dois exemplos seguintes mostram este processo. Foram assumidas quatro intensidades na família
do exemplo 1: Regular, Medium, Bold, Heavy (do mais claro ao mais escuro). Já no exemplo 2 foram
assumidas seis intensidades: Book, Medium, Bold, Heavy, Black, ExtraBlack. Repare que no exemplo
2 decidiu-se não associar a ExtraBlack.
Desde que a intenção das palavras 'bolder' e 'lighter' é escurecer ou clarear a fonte dentro de sua
família, e como a família pode não possuir associações para todos os valores simbólicos, o ajuste do
valor de 'bolder' é feito levando a fonte para o próximo valor mais escuro disponível, e 'lighter' para o
mais claro. Para ser mais preciso, o significado destas palavras é:
Cascading Style Sheets 46
• 'bolder' seleciona a próxima intensidade mais escura que o valor herdado. Se tal intensidade não existe, caso do
valor herdado ser '900', este valor é mantido.
Não há garantia de que sempre haverá uma fonte mais escura (ou mais clara) do que a especificada.
Por exemplo, algumas famílias de fontes possuem definidos apenas os valores 'normal' e 'bold',
enquanto que outras possuem oito valores diferentes. A única garantia é que a fonte de um dado
valor será no mínimo mais escura que a que possui um valor menor, dentro da mesma família.
Propriedade 'font-size'
Os valores de comprimento e percentagem não devem ser tomados da tabela de tamanhos de fonte
quando for efetuado o cálculo para o elemento.
Note que uma aplicação pode interpretar de várias maneiras um dado valor, em função do contexto.
Por exemplo, num cenário VRML uma fonte pode assumir tamanhos diferentes de acordo com a
perspectiva em que é visualizada.
Exemplos:
Cascading Style Sheets 47
P { font-size: 12pt; }
BLOCKQUOTE { font-size: larger }
EM { font-size: 150% }
EM { font-size: 1.5em }
Se o fator de escala de 1,5 estiver sendo usado, as últimas três declarações são idênticas.
Propriedade 'font'
A propriedade 'font' é um atalho para definir 'font-style', 'font-variant', 'font-weight', 'font-size', 'line-
height' e 'font-family' em um único local da folha de estilo.
Veja nos tópicos anteriores a definição dos valores permitidos. Propriedades para as quais não é
fornecido nenhum valor assumem seu valor padrão.
Na segunda atribuição, o tamanho percentual (80%) refere-se ao tamanho da fonte do elemento pai.
Na terceira, o tamanho percentual da linha diz referência ao próprio tamanho da fonte do elemento
considerado.
A quinta atribuição define 'font-variant' ('small-caps'), 'font-size' (120% da fonte do elemento pai), 'line-
height' (120% do tamanho da fonte) e 'font-family' ('fantasy'). Deduz-se que o valor 'normal' refere-se
às outras duas propriedades: 'font-style' e 'font-weight'.
Cascading Style Sheets 48
Propriedade 'color'
color: <cor>
Esta propriedade define a cor do texto de um elemento (foreground color). Uma cor pode ser
especificada de várias maneiras.
Propriedade 'background-color'
H1 { background-color: #F00 }
Propriedade 'background-image'
Esta propriedade define a imagem de fundo de um elemento. Quando da definição desta propriedade,
pode-se também definir uma cor alternativa que será usada caso a imagem não seja encontrada.
Quando a imagem é encontrada, ela se sobrepõe à cor de fundo.
Propriedade 'background-repeat'
Quando é especificada uma imagem de fundo, o valor desta propriedade define se e como a imagem
é repetida.
Um valor igual a 'repeat' indica que a imagem deve ser repetida tanto horizontal como verticalmente.
Já 'repeat-x' ('repeat-y') faz a imagem repetir-se apenas horizontalmente (verticalmente), de maneira
a criar uma faixa que se estende de um lado a outro do ambiente de exibição. Quando o valor for
definido como 'no-repeat', a imagem não será repetida.
BODY {
background: red url(pendant.gif);
background-repeat: repeat-y;
}
Propriedade 'background-attachment'
BODY {
background: red url(pendant.gif);
background-repeat: repeat-y;
background-attachment: fixed;
}
Núcleo CSS1: os browsers podem tratar o valor 'fixed' como 'scroll'. Entretanto, é recomendado que
eles interpretem 'fixed' corretamente, ao menos nos elementos 'HTML' e 'BODY', pois não existe
maneira dos autores de folhas de estilo definirem uma imagem apenas para os browsers que não
suportam o valor 'fixed' (veja normas de conformidade CSS1).
Propriedade 'background-position'
Valor padrão: 0% 0%
Aplicável a: elementos a nível de bloco e elementos substituídos
Propriedade herdada: não
Valores percentuais: em relação ao tamanho do próprio elemento
Quando a imagem de fundo foi especificada, esta propriedade define sua posição inicial.
O par de valores '0% 0%' indica que o canto superior esquerdo da imagem deve ser colocado no
canto superior esquerdo do retângulo que contem o elemento em questão (exclui as áreas de
espaçamento, bordas e margens). Já os valores '100% 100%' colocam o canto inferior direito da
imagem no canto inferior direito do mesmo retângulo. Com os valores '14% 84%', o ponto da imagem
que está 14% à direita do canto superior esquerdo, e 84% abaixo do mesmo, será colocado na
posição correspondente do retângulo já mencionado.
Com um par de valores '2cm 2cm', o canto superior esquerdo da imagem é colocado 2cm à direita e
2cm abaixo do canto superior esquerdo do elemento considerado.
Se for fornecido apenas um valor, será assumido que este valor corresponde à posição horizontal; o
valor vertical será adotado como sendo 50%. Se existem dois valores definidos, o primeiro sempre
indica a posição horizontal. Combinações de percentagens com comprimentos são aceitas ('50%
2cm'). Não são permitidos valores negativos.
Palavras-chave também podem ser usadas para indicar a posição da imagem de fundo, embora elas
não possam ser combinadas com percentagens ou comprimentos. As palavras-chave aceitas, e suas
interpretações, são as seguintes:
Cascading Style Sheets 51
• 'top left' e 'left top' significam, ambas, o mesmo que '0% 0%'
Exemplos:
BODY {
background-image: url(logo.png);
background-attachment: fixed;
background-position: 100% 100%;
}
Propriedade 'background'
A propriedade 'background' é um atalho para definir os valores das demais propriedades relacionadas
ao fundo de exibição em um único lugar da folha de estilos.
Cascading Style Sheets 52
Os valores permitidos estão indicados na descrição individual, dada acima, de cada propriedade
'background'.
Propriedades de Texto
Propriedade 'word-spacing'
O valor indicado por 'length' corresponde ao espaçamento adicional acrescentado ao espaço padrão
entre as palavras. Os valores podem ser negativos mas devem atender aos limites intrínsecos de
cada browser, o qual possui liberdade de escolher um algoritmo próprio. O espaçamento entre as
palavras também pode ser influenciado pelo alinhamento de parágrafos (à esquerda, à direita,
centralizado ou justificado), o qual é definido pela propriedade 'text-align'.
H1 { word-spacing: 1em }
Aqui, o espaçamento entre cada palavra do elemento 'H1' será aumentado de '1em'.
Núcleo CSS1.Os browsers podem interpretar como 'normal' qualquer valor de 'word-spacing' (veja
normas de conformidade CSS1).
Propriedade 'letter-spacing'
Com o valor 'normal', os browsers são capazes de mudar o espaço entre letras para justificar um
texto. Isto não é possível se 'letter-spacing' é definida especificamente pelo valor <length>:
BLOCKQUOTE { letter-spacing: 0 }
BLOCKQUOTE { letter-spacing: 0cm }
Núcleo CSS1: Os browsers podem interpretar como 'normal' qualquer valor de 'letter-spacing' (veja
normas de conformidade CSS1).
Propriedade 'text-decoration'
Esta propriedade indica quais efeitos são aplicados ao texto de um elemento. Se o elemento não
possui texto (tal como 'IMG') ou se é um elemento vazio (tal como '<EM></EM>'), esta propriedade
não produz efeito algum. Um valor 'blink' faz o texto piscar.
Esta propriedade não é herdada, mas os elementos devem obedecer ao padrão de seus pais. Ou
seja, se um elemento está subscrito esta característica deve passar para seus elementos
subordinados. A cor usada no sublinhamento não irá mudar, mesmo que os elementos subordinados
possuam valores diferentes para a propriedade 'color'.
Neste exemplo, todos os links deverão ser sublinhados (ou seja, todos os elementos 'A' com atributo
'HREF' definido).
Cascading Style Sheets 54
Os browsers devem reconhecer a palavra-chave 'blink', porém não estão obrigados a suportar este
efeito.
Propriedade 'vertical-align'
Esta propriedade age sobre a posição vertical do elemento. Um conjunto de palavras chaves diz
respeito às atribuições do elemento pai:
'baseline'
alinha as partes inferiores dos elementos pai e filho
'middle'
alinha os pontos médios verticais dos elementos pai e filho
'sub'
aplica o efeito de subscrito ao elemento
'super'
aplica o efeito de sobrescrito ao elemento
'text-top'
alinha o topo do elemento com o topo das fontes usadas no elemento pai
'text-bottom'
alinha a parte inferior de um elemento com a parte inferior das fontes usadas no elemento pai
Um outro conjunto de valores são relativos à formatação da linha que contem o elemento:
'top'
alinha o topo do elemento com o elemento mais alto que a linha contiver
'bottom
alinha a parte inferior do elemento com o elemento mais baixo contido na linha
O emprego dos valores 'top' e 'bottom' pode levar a situações insolúveis, nas quais surge um loop
entre as interdependências dos elementos.
Propriedade 'text-transform'
Cascading Style Sheets 55
'capitalize'
transforma o primeiro caracter de cada palavra em maiúscula
'uppercase'
transforma todas as letras de todas as palavras em maiúsculas
'lowercase'
transforma todas as letras de todas as palavras em minúsculas
'none'
cancela algum valor que tenha sido herdado
H1 { text-transform: uppercase }
Propriedade 'text-align'
Esta propriedade descreve como o texto é alinhado dentro do elemento. O algoritmo de alinhamento
a ser empregado varia em função do browser usado e do idioma empregado.
Como esta propriedade é herdada, todo elemento a nível de bloco que esteja dentro do elemento
'DIV' que possua a classe 'center' ('CLASS=center') será centralizado. Note que os alinhamentos
dependem da largura do elemento, não da largura do ambiente de exibição. Se o valor 'justify' não é
suportado pelo browser, este irá substituí-lo, normalmente, por 'left' para os idiomas ocidentais.
Cascading Style Sheets 56
Núcleo CSS1: Os browsers podem tratar 'justify' tanto como sendo 'left' como 'right', dependendo do
direção de escrita do texto ser da 'esquerda para a direita' ou da 'direita para a esquerda',
respectivamente.
Propriedade; 'text-indent'
Valor padrão: 0
Aplicável a: elementos a nível de bloco
Propriedade herdada: sim
Valores percentuais: referentes à largura do elemento pai
Esta propriedade define o tamanho da indentação (deslocamento para a direita) a ser inserido antes
da primeira linha formatada. O valor pode ser negativo, mas deve obedecer aos limites impostos por
cada browser. Uma indentação não é inserida no meio de um elemento que tenha sido dividido por
outro (como o 'BR' no HTML).
Exemplo:
P { text-indent: 3em }
Propriedade 'line-height'
Um valor 'normal' ajusta a altura da linha para um valor compatível com a fonte que está sendo
usada. É recomendado que os browsers usem para o valor 'normal' um número entre 1 e 1,2.
Cada elemento possui quatro bordas, uma de cada lado, que são definidas por três parâmetros: seu
comprimento, sua cor e seu estilo.
As propriedades 'width' e 'height' agem sobre o tamanho do retângulo que define o elemento, e as
propriedades 'float' e 'clear' podem alterar a sua posição.
Propriedade 'margin-top'
Valor padrão: 0
Aplicável a: todos os elementos
Propriedade herdada: não
Valores percentuais: referentes ao tamanho do elemento pai
H1 { margin-top: 2em }
Valores negativos são permitidos, mas estão restritos aos limites especificados por cada browser.
Propriedade 'margin-right'
Valor padrão: 0
Aplicável a: todos os elementos
Cascading Style Sheets 58
H1 { margin-right: 12.3% }
Valores negativos são permitidos, mas estão restritos aos limites especificados por cada browser.
Propriedade 'margin-bottom'
Valor padrão: 0
Aplicável a: todos os elementos
Propriedade herdada: não
Valores percentuais: referentes ao tamanho do elemento pai
H1 { margin-bottom: 3px }
Valores negativos são permitidos, mas estão restritos aos limites especificados por cada browser.
Propriedade 'margin-left'
Valor padrão: 0
Aplicável a: todos os elementos
Propriedade herdada: não
Valores percentuais: referentes ao tamanho do elemento pai
H1 { margin-left: 2em }
Valores negativos são permitidos, mas estão restritos aos limites especificados por cada browser.
Propriedade 'margin'
Esta propriedade é um atalho para definir as quatro outras propriedades em um único lugar da folha
de estilo.
Se forem indicados quatro valores, eles dizem respeito, respectivamente, às margens superior,
direita, inferior e esquerda. Se for fornecido apenas um valor, ele é aplicado às quatro margens. Se
existem dois ou três valores, eles serão tomados na mesma ordem acima, e o(s) valor(es) ausente(s)
será(ão) igual(is) ao do(s) lado(s) oposto(s).
BODY {
margin-top: 1em;
margin-right: 2em;
margin-bottom: 3em;
margin-left: 2em; /* feita igual à margem oposta (direita) */
}
São permitidos valores negativos, mas eles estão sujeitos aos limites impostos por cada browser.
Propriedade 'padding-top'
Valor padrão: 0
Aplicável a: todos os elementos
Propriedade herdada: não
Valores percentuais: referentes ao tamanho do elemento pai
Propriedade 'padding-right'
Valor padrão: 0
Cascading Style Sheets 60
Propriedade 'padding-bottom'
Valor padrão: 0
Aplicável a: todos os elementos
Propriedade herdada: não
Valores percentuais: referentes ao tamanho do elemento pai
Propriedade 'padding-left'
Valor padrão: 0
Aplicável a: todos os elementos
Propriedade herdada: não
Valores percentuais: referentes ao tamanho do elemento pai
Propriedade 'padding'
Esta propriedade é um atalho para a definição das outras quatro propriedades de espaçamento em
um único local da folha de estilo.
Com a definição de quatro valores, eles são aplicados, respectivamente, às áreas superior, direita,
inferior e esquerda. Se apenas um valor for indicado, ele será usado para as quatro áreas. Se forem
fornecidos dois ou três valores, eles serão tomados na mesma ordem acima, e o(s) valor(es)
ausente(s) será(ão) igual(is) ao do(s) lado(s) oposto(s).
H1 {
background: white;
padding: 1em 2em;
}
Este exemplo define os espaçamentos verticais (superior e inferior) em '1em', e os horizontais (direito
e esquerdo) em '2em'. A unidade 'em' é relativa ao tamanho do elemento fonte: '1em' é igual ao
tamanho da fonte em uso.
Propriedade 'border-top-width'
Neste exemplo, 'H1' e 'P' terão a mesma espessura, independente do tamanho da fonte usada em
cada um. Para definir valores relativos, deve ser usada a unidade 'em':
H1 { border: solid 0.5em }
Propriedade 'border-right-width'
Propriedade 'border-bottom-width'
Propriedade 'border-left-width'
Propriedade 'border-width'
Esta propriedade é um atalho para definir as quatro propriedades anteriores em um mesmo local da
folha de estilos.
• dois valores: o primeiro define as bordas superior e inferior, o segundo é aplicado às bordas esquerda e direita
• três valores: o primeiro corresponde ao topo, o segundo determina as bordas direita e esquerda, e o terceiro define a
borda inferior
• quatro valores: são aplicados, respectivamente, às bordas superior, direita, inferior e esquerda
Propriedade 'border-color'
border-color: <color>{1,4}
Esta propriedades define a cor das quatro bordas, podendo serem definidos de um a quatro valores,
correspondentes aos mesmos lados da propriedade 'border-width'.
Se nenhuma cor for definida, será usada a cor da propriedade 'color'.
P{
color: black;
background: white;
border: solid;
}
Propriedade 'border-style'
Cascading Style Sheets 64
border-style: none | dotted | dashed | solid | double | groove | ridge | inset | outset
Esta propriedade define o estilo das quatro bordas de um elemento. Até quatro valores podem ser
definidos, sendo aplicados seguindo a mesma regra mostrada para a propriedade 'border-width'.
Neste exemplo, as bordas horizontais serão linhas sólidas ('solid') e as verticais serão linhas
pontilhadas ('dotted').
Como o valor padrão é 'none', as bordas não terão estilos caso esta propriedade não seja
especificada.
Os estilos correspondem à:
none
nenhuma borda é desenhada, não importando o valor de 'border-width'
dotted
linha pontilhada
dashed
linha tracejada
solid
linha sólida
double
linha sólida dupla, onde a soma da espessura das duas linhas e mais o espaço entre ambas deve ser igual ao valor
de 'border-width'
groove
linha em baixo relevo, com as cores baseadas no valor de 'color'
ridge
linha em alto relevo, com as cores baseadas no valor de 'color'
inset
linha 3D em baixo relevo, com as cores baseadas no valor de 'color'
outset
linha 3D em alto relevo, com as cores baseadas no valor de 'color'
Núcleo CSS1: os browsers podem interpretar como 'solid' as propriedades 'dotted', 'dashed', 'double',
'groove', 'ridge', 'inset' e 'outset'.
Propriedade 'border-top'
Esta propriedade é um atalho para definir a espessura, a cor e o estilo associados a borda superior
de um elemento em um mesmo lugar.
Este exemplo define as características da borda superior do elemento 'H1'. Caso alguma
característica deixe de ser especificada, será adotado seu valor padrão.
Como a cor não foi especificada no exemplo acima, será usada a mesma cor definida para o próprio
elemento com a propriedade 'color'.
Note que enquanto a propriedade 'border-style' aceita até quatro valores, esta propriedade aceita
apenas um valor de estilo.
Propriedade 'border-right'
Propriedade 'border-bottom'
Propriedade 'border-left'
Cascading Style Sheets 66
Propriedade 'border'
Ao contrário dos atalhos das propriedades 'margin' e 'padding', esta propriedade não permite indicar
valores distintos para as bordas.
Como a especificação das propriedades podem sobrepor características uma das outras, é muito
importante prestar atenção na forma como elas são definidas dentro da folha de estilos. Veja este
exemplo:
BLOCKQUOTE {
border-color: red;
border-left: double
color: black;
}
Neste exemplo, a cor da borda esquerda será preta, enquanto que as demais serão vermelhas. Isto
ocorre porque 'border-left' define o estilo e também a cor.
Cascading Style Sheets 67
Note que enquanto 'border-width' aceita até quatro valores para a espessura, esta propriedade
permite a indicação de apenas um.
Propriedade 'width'
Esta propriedade pode ser usada com elementos de texto, mas é mais útil com elementos
substituídos, tais como as figuras. O elemento será redimensionado para atender ao valor
especificado. Caso a propriedade 'height' esteja especificada como 'auto', o redimensionamento será
proporcional (sem deformação).
Se tanto a propriedade 'width' como a 'height' forem especificadas como 'auto', o elemento terá suas
dimensões originais.
Veja modelo de formatação para uma descrição sobre o relacionamento entre esta propriedade com
as margens e áreas de espaçamento ('padding').
Propriedade 'height'
Núcleo CSS1: os browsers podem ignorar esta propriedade (ou seja, tratá-la como 'auto') quando o
elemento considerado não é um elemento substituído.
Propriedade 'float'
Com o valor 'none', esta propriedade faz o elemento ser mostrado onde ele aparece dentro do texto.
Com o valor 'left' o elemento será movido para a esquerda e o texto será disposto do seu lado direito.
O similar ocorre com o valor 'right'. Em qualquer caso, o elemento será tratado como sendo a nível de
bloco. Veja em elementos flutuantes uma descrição completa deste processo.
IMG.icon {
float: left;
margin-left: 0;
}
Este exemplo coloca todos os elementos 'IMG' com 'CLASS=icon' alinhados ao lado esquerdo do seu
elemento pai.
Propriedade 'clear'
Esta propriedade indica se um elemento permite a existência de elementos flutuantes ao seu redor.
Mais especificamente, o valor desta propriedade indica os lados que não aceitam elementos
flutuantes.
Um valor 'left' coloca o elemento abaixo de qualquer elemento flutuante que exista no seu lado
esquerdo. O valor 'none' permite elementos flutuantes em todos os lados. Exemplo:
H1 { clear: left }
Cascading Style Sheets 69
Propriedades de Ordenação
Estas propriedades classificam elementos em mais categorias que as normalmente usadas em
HTML.
A propriedade 'list-style' descreve como os itens de uma lista são formatados. Ela pode ser usada em
qualquer elemento, e será herdada pelos elementos das hierarquias inferiores da lista. Entretanto,
terá efeito apenas em elementos com a propriedade 'display' definida como 'list-item'. Em HTML é o
que acontece com o elemento 'LI'.
Propriedade 'display'
Esta propriedade define se o elemento será ou não mostrado, e como será visualizado no ambiente
de exibição (que pode ser uma impressora, um monitor, etc).
Um valor 'block' coloca o elemento em uma nova área de exibição (um retângulo que contem o
elemento). Este retângulo será posicionado de acordo com o descrito em modelo de formatação.
Normalmente, os elementos tipo 'H1' e 'P' são elementos a nível de bloco. O valor 'list-item' produz
efeito similar à 'block', exceto pelo fato de ser adicionado um marcador de lista. Em HTML, 'LI' é um
exemplo deste caso.
O valor 'inline' resulta em um novo retângulo interno à linha de exibição do elemento. Este retângulo é
formatado de acordo com o seu conteúdo. Caso seja texto ele poderá ocupar várias linhas, sendo
criado um retângulo para cada linha. As propriedades das margens, bordas e áreas de espaçamento
são aplicáveis ao elemento interno, mas não terão qualquer efeito nas quebras de linha.
Já o valor 'none' desativa a exibição do elemento, inclusive dos seus elementos filhos.
P { display: block }
EM { display: inline }
LI { display: list-item }
IMG { display: none }
Núcleo CSS1: os browsers podem ignorar a propriedade 'display' e usar apenas os seus valores
padrões internos. Veja normas de conformidade CSS1.
Propriedade 'white-space'
Esta propriedade determina como os espaços em branco são tratados dentro de um elemento: pela
maneira 'normal' (são agrupados em um único espaço), pela mesma forma do elemento 'PRE'
(respeitando todos os espaços individualmente) ou pela forma 'nowrap' (onde a mudança de linha na
área de exibição ocorre apenas com o elemento 'BR').
Embora o valor padrão desta propriedade seja 'normal', os browsers normalmente possuem valores
padrões para todos os elementos HTML conforme o sugerido na especificação HTML [2].
Núcleo CSS1. Os browsers podem ignorar a propriedade 'white-space' e usar seus padrões internos.
Propriedade 'list-style-type'
Esta propriedade define a aparência do marcador de lista quando a propriedade 'list-style-image' for
'none' ou se a imagem indicada pelo URL não estiver disponível.
Propriedade 'list-style-image'
Esta propriedade define a imagem que será usada como um marcador de lista.
UL { list-style-image: url(http://png.com/ellipse.png) }
Propriedade 'list-style-position'
Com esta propriedade é definida a maneira como o marcador de lista é posicionado em relação ao
conteúdo da lista. Para um exemplo de formatação, veja formatação de elementos de lista.
Propriedade 'list-style'
Esta propriedade é um atalho para a definir as propriedades anteriores em um único local da folha de
estilo.
A definição de 'list-style' diretamente nos elementos 'LI' pode provocar resultados inesperados:
<STYLE TYPE="text/css">
OL.alpha LI { list-style: lower-alpha }
UL LI { list-style: disc }
</STYLE>
<BODY>
<OL CLASS=alpha>
<LI>level 1
Cascading Style Sheets 72
<UL>
<LI>level 2
</UL>
</OL>
</BODY>
Como o grau de importância (como definido em ordem de encadeamento) é maior para a primeira
atribuição deste exemplo, ela irá se sobrepor à segunda em todos os elementos 'LI', e será usado
apenas o estilo 'lower-alpha'. Portanto, é aconselhável definir a propriedade 'list-style' somente em
elementos marcados como 'list-item':
Neste exemplo, a herança irá transferir o 'list-style' dos elementos 'OL' e 'UL' para os elementos 'LI'.
Um endereço URL pode ser combinado com qualquer outro valor:
No exemplo acima, o valor 'disc' será usado quando a imagem não estiver disponível.
Cascading Style Sheets 73
Unidades
Unidades de Medidas
O formato de uma unidade de medida é constituído por um sinal positivo ou negativo opcional ('+' ou
'-', sendo o padrão '+') seguido imediatamente por um número (com ou sem ponto decimal - não use
vírgulas), com todo o conjunto imediatamente seguido por um identificador de unidade (um código
com duas letras). Este identificador é opcional caso o número seja '0'.
As unidades relativas 'em' e 'ex' tomam como base o tamanho da fonte do próprio elemento. A única
exceção a esta regra é a propriedade 'font-size', onde estas unidades são relativas ao tamanho da
fonte do elemento pai.
A unidade 'px', pixel, usada no exemplo acima, é função da resolução da área de exibição,
normalmente um monitor.
BODY {
font-size: 12pt;
text-indent: 3em; /* ou seja, 36pt */
}
H1 { font-size: 15pt }
Unidades Percentuais
O formato de um valor percentual é composto de caracter de sinal (positivo ou negativo, '+' ou '-',
sendo '+' o padrão) seguido imediatamente por um número (com ou sem ponto decimal, não use
vírgulas) seguido, também imediatamente, pelo símbolo '%'.
Os valores percentuais sempre são relativos a algum outro valor, por exemplo, uma unidade de
medida. Cada propriedade que permita o uso de unidades percentuais também define a qual valor
esta unidade se refere. Muito freqüentemente é o tamanho da fonte do próprio elemento:
Em todas as propriedades herdadas na CSS1, se o valor for especificado como uma percentagem,
então os elementos filhos herdarão o valor resultante, não o valor da percentagem.
As palavras chaves sugeridas para indicar cores são: 'aqua' , 'black' , 'fuchsia' , 'gray', 'green', 'lime',
'maroon', 'navy', 'olive', 'purple', 'red', 'silver', 'teal', 'white' e 'yellow'. Estas 16 cores foram tiradas da
paleta de cores VGA do Windows, e seus valores RGB são estão definidos nesta especificação.
A codificação RGB é usada para a indicação de cores no formato numérico. Todas as atribuições a
seguir indicam a mesma cor (vermelho):
O formato de um valor RGB é 'rgb(' seguido três números separados por vírgulas. Quaisquer destes
três números podem estar na faixa de 0-255, ou serem três valores percentuais entre 0% e 100%.
Finalmente a notação é terminada por um ')'. São permitidos espaços em branco ao redor dos
números.
Valores fora da faixa serão truncados. Desde modo, as três atribuições a seguir são equivalentes:
As cores RGB estão especificadas no ambiente sRGB. Podem ocorrer variações entre os browsers
na reprodução destas cores, mas o emprego deste ambiente fornece uma definição mensurável, não
ambígua e objetiva, de como as cores devem ser geradas - de acordo com um padrão internacional.
Os browsers podem otimizar os recursos usados na produção das cores empregando o método de
correção "gamma". sRGB especifica um padrão "gamma" de 2,2 a ser atendido sob condições bem
definidas de visualização. Os browsers devem produzir as cores definidas nas folhas de estilos CSS,
em um certo dispositivo de saída (monitor, por exemplo) de maneira tal que seja atingido este padrão
2,2 (Todo este processo é aplicado apenas às cores indicadas pelas folhas de estilos CSS: as
imagens coloridas são reproduzidas com base nas suas próprias informações internas de composição
de cores.
Cascading Style Sheets 76
URL
Um URL é identificado pela notação:
O formato de um valor URL é 'url(' seguido por espaços em branco opcionais seguidos por apóstrofe
(') ou aspas duplas ("), também opcionais, seguidos pelo URL em si seguido novamente por pelo
apóstrofe ou aspas e espaços adicionais opcionais e terminado por ')'.
Parênteses, vírgulas, espaços, apóstrofes e aspas internos ao URL devem ser precedidos por uma
barra invertida (\).
Um URL parcial é interpretado como relativo à localização da folha de estilos, não à localização do
documento:
Apostila de HTML
e CSS
2
HTML básico 1
Definição
TAGs
As TAGs aparecem sempre entre sinais de “menor que” (<) e “maior que”
(>);
Geralmente são utilizadas aos pares, sendo que a TAG de finalização de
um comando qualquer é finalizada com a precedência de uma barra (/).
5
Exemplos:
TAG único:
<br>
TAG duplo:
<center> xxx </center>
<HTML> … </HTML>
Indica o título do documento para o browser. Esta TAG deve estar sempre dentro
das TAGs <HEAD> </HEAD>.
Opcionalmente podemos indicar uma cor para o fundo da página, usando a opção
BGCOLOR, ou um arquivo de imagem para formar o fundo, usando a opção
BACKGROUND.
<html>
<head>
<title>
Curso de HTML
</title>
</head>
<body bgcolor="green" >
Corpo da página HTML com cor de fundo.
</body>
</html>
7
<html>
<head>
<title>
Curso de HTML
</title>
</head>
<body background="fundo.gif" >
Corpo da página HTML com imagem de fundo.
</body>
</html>
8
Exemplo:
<html>
<head>
<title>
Curso de HTML
</title>
</head>
<body>
<H1>Título com H1: Órgãos Colegiados</H1>
<H2>Título com H2: Órgãos Colegiados</H2>
<H3>Título com H3: Órgãos Colegiados</H3>
<H4>Título com H4: Órgãos Colegiados</H4>
<H5>Título com H5: Órgãos Colegiados</H5>
<H6><CENTER>Título com H6 centralizado: Órgãos
Colegiados</CENTER></H6>
</body>
</html>
10
<B>...</B>
Aplica o estilo negrito.
<I>...</I>
Aplica o estilo itálico.
<U>...</U>
Aplica o estilo sublinhado (nem todos os browser o reconhecem).
<SUP>...</SUP>
Faz com que o texto fique sobrescrito.
<SUB>...</SUB>
Faz com que o texto fique subscrito.
<PRE>...</PRE>
Utiliza a pré-formatação, ou seja, deixa o texto da maneira em que foi
digitado.
11
<P>
A TAG responsável pela quebra de parágrafos é a <P> que finaliza o
parágrafo e insere automaticamente uma linha em branco entre parágrafos.
Sintaxe do comando:
Exemplo:
<html>
<body>
<title>Curso de HTML</title>
<B>Estilo negrito.</B>
<br>
<I>Estilo itálico.</I>
<br>
<SUP>Texto sobrescrito.</SUP>
<br>
<SUB>Texto subscrito.</SUB>
<br>
</body>
</html>
1.2.3 Fontes
Para inserir em sua página um texto com fontes de tamanhos, cores e tipos
diferentes utilizamos a TAG <FONT> ... </FONT>.
Sintaxe do comando:
<FONT size=”n” face=”nome” color=”cor”>
TEXTO
</FONT>
Onde:
SIZE=“n” : n varia de 1 a 7 e 3 é o valor padrão da maioria dos
navegadores;
FACE=”nome” : nome da fonte a ser utilizada (Arial, Tahoma, etc);
COLOR=”cor” : cor da fonte definida em hexadecimal, ou através de
um nome pré-definido de cores. Veja no capítulo 9 desta apostila.
Exemplo:
<html>
13
<body>
<title>Curso de HTML</title>
</body>
</html>
14
A tag <BR> faz a quebra de linha sem acrescentar espaços extras entre linhas.
Finaliza a linha de texto e insere automaticamente uma outra linha em branco.
Não precisa ser finaliza com </BR>.
Sintaxe:
Exemplo:
<html>
<body>
</body>
</html>
16
2. Caracteres Especiais
3. Imagens
Para inserir uma imagem em uma página web utilizamos o comando, tag,
<img src> e seus atributos. Os formatos mais usados são o GIF e o JPG, ambos
com compactação de pixels.
Sintaxe:
Atributos:
Ex.:
<html>
<body>
<title>Curso de HTML</title>
</body>
</html>
19
4. LINKS
Sintaxe:
Onde:
A: abertura da TAG de link;
HREF=”nomeDoArquivo.extensão”: deve ser informado o nome
completo do arquivo que será acessado;
Texto ou imagem: que servirá como link;
/A: encerra a TAG de link.
Exemplo:
<html>
<head>
<title>
Curso de HTML
</title>
</head>
<body >
<h1><font face="arial" color="orange">MENU</font></h1>
<HR width="100%" align="left" size="2" color="silver" >
20
Para criar links para uma página localizada em outros diretórios é necessário
indicar o caminho completo do arquivo. Para a WEB isto tem uma forma um pouco
diferente do Windows e do DOS, veja:
Exemplo:
21
O parâmetro NAME serve para marcar um ponto para possíveis desvios. Quando
desviamos para um determinado ponto dentro de um documento, indicamos este
nome com um "#". Por exemplo:
5. Listas
Sintaxe:
Onde:
<OL>: início da lista numerada;
TYPE=”formato”: o formato da numeração pode ser:
1: lista numérica (não é necessário ser definido);
A: lista alfabética com letras maiúsculas;
A: lista alfabética com letras minúsculas;
I: Lista numérica com números romanos maiúsculos;
I: lista numérica com números romanos minúsculos;
START=”n”: o valor inicial de uma lista numerada;
<LI>: tópicos da lista;
</OL>: fim da lista numerada;
Exemplo:
Crie um arquivo chamado Listas.html e insira o código abaixo:
<html>
<title>Curso de HTML</title>
<body>
<center><h1>Listas Ordenadas</h1></center>
<h3>Cursos</h3>
23
<OL>
<LI>Graduação
<LI>Pós-Graduação Lato Sensu
<LI>Cursos de Pós-Graduação Stricto Sensu
</OL>
</body>
</html>
Listas não ordenadas são muito parecidas com as ordenadas. A única diferença é
o fato de elas não definirem explicitamente uma ordem, como é no caso as
numeradas. Eles são formados por símbolos, que podem ser bola, quadrado, e
uma bola vazia. Elas são iniciadas com a TAG <UL> e são respectivamente
terminadas com </UL>. E seus elementos são que nem as numeradas: com <LI>.
Sintaxe:
<UL TYPE=”formato”>
<LI> Tópico 1
<LI> Tópico 2
<LI> Tópico 3
</UL>
24
Onde:
<UL> : Início da lista pontuada;
TYPE=”formato”: o formato do marcador pode ser:
disc: o marcador é um ponto (padrão utilizado pelos
navegadores, não precisa indicar);
square: o marcador é um quadrado;
circle: o marcador é um ponto.
<LI>: tópicos da lista, não é necessário encerrar a TAG;
</UL>: fim da lista pontuada
Exemplo:
<br>
<center><h1>Listas Não Ordenadas</h1></center>
<h3>Membro da Comunidade Acadêmica</h3>
<UL TYPE = “disc”>
<LI>Aluno
<LI>Docente
<LI>Técnico Administrativo
</UL>
25
6. Tabelas
Tabelas correspondem a um ótimo formato para originar informações, e é por essa
razão que eles foram acrescentados à linguagem HTML.
<TH>texto em destaque</TH>
Observações: Elas devem ficar, assim como todas, dentro da TAG <TABLE>.
A TAG <TD> especifica a células de dados de uma tabela. Por se tratar de dados
comuns (e não cabeçalhos), essas células possuem seu conteúdo escrito em
fonte normal, sem nenhum destaque e alinhamento à esquerda. Assim como o
TH, pode-se construir células em branco, usando o elemento TD, como no
exemplo a seguir:
<TD>Células de dados</TD>
A TAG <TR> indica o início de uma linha na tabela. Cada linha da tabela pode
conter várias células, e, portanto, é necessário que se faça uso de uma marcação
que indique exatamente o ponto de quebra de uma linha e início de outra. Toda
linha deve terminar com um </TR>.
6.2.1 - BORDER
Um atributo opcional para ser usado com TABLE é o atributo BORDER. Se ele
estiver presente, a tabela será formatada com linhas de borda.
Atenção: Todas as explicações acima como as que estão por vir, foram feitas,
para que você possa saber o que significa a TAG em questão.
Exemplo:
<TABLE BORDER>
<CAPTION> Nota da primeira avaliação </CAPTION>
<TD>Notas/Alunos</TD>
<TH>Eduardo</TH>
<TH>Ana Lúcia</TH>
<TH>Andréa</TH>
<TR>
<TH>Notas</TH>
<TD>8,0</TD>
<TD>9.3<TD>
<TD>7.8</TD>
<TR>
<TH>No de Inscrição</TH>
<TD>376234809</TD>
<TD>387349048</TD>
<TD>502350432</TD>
</TABLE>
Veja o resultado:
27
O atributo BORDER pode também receber um valor que vai estabelecer qual a
espessura (além da existência) da linha de borda da tabela (BORDER="valor"). Se
o valor atribuído for 0 (zero), o BORDER funciona exatamente como o caso
padrão, sem o BORDER. Dessa maneira, é possível colocar tabelas em maior
destaque, atribuindo um valor maior que 1 para o BORDER.
<TABLE BORDER=5>
<TR>
<TD>TESTE</TD>
<TD>TESTE2</TD>
<TD>TESTE3</TD>
</TR>
<TR>
<TD>TESTE4</TD>
<TD>TESTE5</TD>
<TD>TESTE6</TD>
</TR>
</TABLE>
Veja o resultado:
6.2.2 - ALIGN
<TABLE BORDER>
<TD>Primeira célula</TD>
<TD>Segunda célula</TD>
<TD>Terceira célula</TD>
<TR>
28
<TD ALIGN="CENTER">Centro</TD>
<TD ALIGN="LEFT">Esquerda</TD>
<TD ALIGN="RIGHT">Direita</TD>
<TR>
</TABLE>
Veja o resultado:
6.2.3 - VALIGN
Veja o exemplo:
<TABLE BORDER>
<TD>Teste de alinhamento</TD>
<TD VALIGN="TOP">TOP</TD>
<TD VALIGN="middle">MIDDLE</TD>
<TD VALIGN="bottom">BOTTOM</TD>
</TABLE>
Veja o resultado:
6.2.4 – CELLSPACING
Exemplo:
29
6.2.5 – CELLPADDING
Este atributo é utilizado para formatar o espaço entre o conteúdo de uma célula e
suas bordas em todos os sentidos.
É aplicado dentro da TAG <TABLE>.
Exemplo:
6.2.6 – ROWSPAN
Define quantas linhas uma mesma célula pode abranger. Por padrão, na maioria
dos navegadores de Internet cada célula adicionada em uma tabela corresponde a
uma linha. Pode ser aplicado em TH ou TD, proporcionando o mesmo efeito.
Exemplo:
6.2.7 – COLSPAN
Este atributo define quantas colunas uma célula pode abranger. Por padrão, na
maioria dos navegadores de Internet cada célula adicionada em uma tabela
corresponde a uma coluna. Pode ser aplicado em TH ou TD, proporcionando a
mesma abrangência.
Para alterar a largura de uma célula da tabela basta acrescentar o parâmetro WIDTH dentro da tag
<TD>. Exemplo1:
<TABLE BORDER=2>
<TR>
</TR>
</TABLE>
Outro atributo que podemos ter nas tabelas é mudar a sua cor de fundo, isto se torna
particularmente útil quando se quer dar destaque a uma célula em especial.
32
Vejamos um exemplo:
<TABLE BORDER=0>
<TR>
</TR>
<TR>
</TR>
</TABLE>
33
7. Formulários
Para fazer formulário, você tem que colocar as TAGs <FORM> </FORM>. Todos
os outros comandos, devem ficar dentro dessas TAGs. Ok?!
O elemento FORM pode conter dois atributos que determinaram para onde será
mandada a entrada do FORM. Vejam como eles são:
7.2.1 – GET
7.2.2 – POST
É o mais utilizado, pois envia cada informação de forma separada da URL. Com
este método POST os dados entrados fazem parte do corpo da mensagem
enviada para o servidor e transfere grande quantidade de dados.
7.2.3 – INPUT
exemplo, quando você for receber os dados, já, processados, irá vir o name: =
resposta dada pelo visitante. Outro atributo importante é o TYPE. Ele determina o
campo de entradas de dados. Veja como se usa este atributo:
Para mudar o tamanho, da janela padrão, você tem que colocar o comando SIZE.
Por exemplo:
Você pode fazer várias coisas com o elemento TYPE. Por exemplo, para ser um
campo de senha, que quando digitado, apareça o símbolo "*", ao invés das letras,
você deve escrever o seguinte:
7.2.3.1.1 - TYPE="RADIO"
Repare:
7.2.3.1.2 - TYPE="PASSWORD"
7.2.3.1.3 - TYPE="CHECKBOX"
Veja o resultado:
36
7.2.3.1.4 - TYPE="SUBMIT"
7.2.3.1.5 - TYPE="RESET"
7.2.4 – TEXTAREA
Para se limitar o tamanho do campo mostrado na tela, faz-se o uso dos atributos
COLS e ROWS que especificam, respectivamente, o número de colunas e linhas
que se deseja mostrar para o usuário. O atributo NAME é obrigatório, e especifica
o nome da variável, que será associada à entrada do cliente (navegador). O
atributo VALUE não é aceito nesse elemento, mas você pode colocar já um texto
da seguinte maneira. Veja como ele é colocado:
37
7.2.5 – SELECT
Permite definir uma lista de opções, com barra de rolagem ou fixa na tela do
navegador.
É uma TAG que deve ser iniciada com <SELECT> e finalizada com </SELECT>.
Sintaxe:
<SELECT MULTIPLE NAME=”nomeDaLista”>
<OPTION SELECTED VALUE=”valor de retorno”>
Valor Visualizado
<OPTION VALUE=”Valor de retorno”>
Valor Visualizado 2
</SELECT>
Onde:
NAME: obrigatório, serve para a identificação da lista;
OPTION: item da lista;
MULTIPLE: com este atributo a lista aparecerá sempre aberta;
SELECTED: indica o valor padrão da lista;
VALUE: valor a ser retornado ao servidor.
Exemplo:
<html>
<body>
<title>Órgão Colegiado</title>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<INPUT TYPE="SUBMIT" VALUE="Salvar">
</td>
</tr>
</table>
</FORM>
</body>
</html>
40
8. Frames
8.1 - Estrutura
Assim como o corpo do HTML, os FRAMES tem sua estrutura. Eles entram no
lugar do corpo, substituindo o <BODY></BODY> por
<FRAMESET></FRAMESET>.
Exemplo:
<HTML>
<HEAD>
<TITLE> Título do Documento </TITLE>
</HEAD>
<FRAMESET>
Sintaxe dos Frames
</FRAMESET>
</HTML>
8.2 - Sintaxe
Primeiramente devemos fazer um documento HTML para ele ser especificado pela
sintaxe de FRAMES, no caso chamado de Frame1.htm.
<HTML>
<HEAD>
<TITLE> Frame 1 </TITLE>
</HEAD>
<BODY>
41
8.3 – FRAMESET
8.3.1 - ROWS
<FRAMESET ROWS="20%,30%,50%">
<FRAME SRC="Frame1.html">
<FRAME SRC="Frame1.html">
<FRAME SRC="Frame1.html">
</FRAMESET>
Neste exemplo de cima, ele chama três FRAMES, o 1º com 20% da tela, o 2º com
30% da tela, o 3º com 50% da tela (ambos em altura).
42
8.3.2 – COLS
<FRAMESET COLS="20%,30%,50%">
<FRAME SRC="Frame1.html">
<FRAME SRC="Frame1.html">
<FRAME SRC="Frame1.html">
</FRAMESET>
Neste exemplo de cima, ele chama três FRAMES, o 1º com 20% da tela, o 2º com
30% da tela, o 3º com 50% da tela (ambos em largura).
8.4 – FRAME
8.4.1 – SRC
<FRAMESET COLS="20%,30%,50%">
<FRAME SRC="Frame1.html">
<FRAME SRC="Frame1.html">
<FRAME SRC="Frame1.html">
</FRAMESET>
8.4.2 - NAME
<FRAMESET COLS="20%,30%,50%">
<FRAME SRC="Frame1.html" NAME="Principal">
<FRAME SRC="Frame1.html">
<FRAME SRC="Frame1.html">
</FRAMESET>
8.4.3 – SCROLLING
Exemplo:
<FRAMESET COLS="20%,30%,50%"
<FRAME SRC="Frame1.html" SCROLLING="no">
<FRAME SRC="Frame1.html" SCROLLING="yes">
<FRAME SRC="Frame1.html" SCROLLING="auto">
</FRAMESET>
8.4.4 – NORESIZE
<FRAMESET COLS="20%,30%,50%">
<FRAME SRC="Frame1.html" NORESIZE>
<FRAME SRC="Frame1.html" >
<FRAME SRC="Frame1.html" >
</FRAMESET>
45
8.4.5 – TARGET
Define qual a área (FRAME) que aparecerá o documento especificado pelo link.
Mais útil na utilização de Menus e índices.
Necessita do NAME.
Exemplo:
<FRAMESET COLS="20%,30%,50%">
<FRAME SRC="Frame1.html" NAME="Principal">
<FRAME SRC="Frame1.html">
<FRAME SRC="Frame1.html">
</FRAMESET>
O Link:
Se você quiser criar um link que chama uma nova tela do browser basta
colocar TARGET="um nome que não existe".
8.5 – BORDER
9. Tabelas de Cores
Esta tabela de cores pode ser usar quando quiser definir as cores de uma fonte de
um texto ou então quando quiser definir o fundo de uma página. Deve-se usar o
nome que está em inglês.
Branco White
Preto Black
Azul Blue
Amarelo Yellow
Verde Green
Laranja Orange
Vermelho Red
Rosa Pink
Cinza Gray
Ouro Gold
Verde azulado Teal
Azul marinho Navy
Prata Silver
10. CSS
CSS é a mesma coisa que Style Sheets e que Folhas de Estilo. Você já deve ter
visto esses nomes em vários lugares. CSS é mais uma forma de aperfeiçoar seus
documentos, o CSS tem muitos tipos de definição aqui veremos muitas delas.
Cada estilo que você cria é definido como uma regra CSS. Cada regra deve
utilizar a seguinte sintaxe:
Atributo - o aspecto específico do elemento que você quer usar como estilo. Deve
ser um nome de atributo CSS válido, como o atributo font-size.
Agora é hora de exemplos. Eis uma regra CSS que especifica que todos os títulos
de nível 1 (tags <H1>) sejam exibidos em uma fonte de 36 pontos:
H1 {font-size: 36pt}
Aqui está um exemplo de regra que diz que todos os títulos de nível 2 (tags <H2>)
devem ter tamanho de 24 pontos e cor azul;
P {font-family: Times;
font-size: 12pt;
color: blue;
margin-left: 0.5in}
Note como é fácil aplicar todas as declarações ao elemento parágrafo (P) e como
cada declaração, exceto a última, é seguida pelo caracter de ponto-e-vírgula
exigido.
Você pode definir regras de CSS em três lugares. E, por definição, pode utilizar
uma combinação dos três métodos nos seus web sites. A maneira como as regras
interagem entre si está relacionada à parte "em cascata".Os três lugares são:
Inline - Inline significa que você especifica as regras de CSS dentro da tag de
HTML. Essas regras afetam somente a tag atual.
Sempre que quiser utilizar esses estilos em uma nova página, basta colocar
uma tag <LINK> no cabeçalho que referencie esse arquivo .css. Veja o
exemplo:
Arquivo OrgaoColegiado.css
H4 {
font-family: 'Arial';
font-size: 14pt;
color: blue
}
Agora, para utilizar os estilos definidos neste arquivo .css você precisa
adicionar a tag a seguir ao cabeçalho da página, onde nome_do_arquivo é
uma referência absoluta ou relativa ao arquivo .css.
<LINK REL="STYLESHEET"
HREF=" OrgaoColegiado.css" TYPE="text/css">
<HTML>
<HEAD>
<TITLE>Exemplo Estilos Incorporados</TITLE>
<STYLE TYPE="text/css"><!--
P {
background-color: #FFFFFF;
font-family:'Comic Sans MS';
font-size: 14pt
}
--></STYLE>
</HEAD>
</BODY>
</HTML>
Os estilos inline são os que têm menos efeitos. Eles afetam somente a tag
atual - não outras tags na página e tampouco outros documentos. A sintaxe
para definir um estilo inline é a seguinte:
Com as classes de estilo, é possível definir diversas variações de uma única tag.
Por exemplo, você poderia fazer um estilo de parágrafo "texto alinhado à direita",
um estilo de parágrafo "texto centralizado" e assim por diante, criando múltiplos
temas em torno da tag de parágrafo. (<P>)
52
Você pode definir classes de estilo tanto em folhas de estilo externa como nas
incorporadas. (Não há sentido em definir uma classe em um estilo inline!) A
sintaxe é praticamente idêntica à sintaxe normal para os estilos externo e
incorporado, com adição de um ponto e o nome da classe depois do elemento na
qual será utilizado o atributo.
<STYLE TYPE="text/css"><!--
elemento.nomedaClasse {atributo:valor; ... }
--></STYLE>
Exemplo:
<STYLE TYPE="text/css"><!--
A.meuslinks {
color: blue;
text-decoration: none
}
--></STYLE>
Depois apenas adiciono o atributo CLASS="meuslinks" aos links em que eu
desejar que fiquem azuis e não-sublinhados. Veja como deve ficar:
<STYLE TYPE="text/css"><!--
DIV.sidebar {
font=family: "Arial";
font-size: 12pt;
text-align: right;
background-color: #C0C0C0;
margin-left: 1in;
margin-right: 1in
}
--></STYLE>
Ao colocar na tag <DIV> o atributo CLASS, você estará fazendo com que
todos os elementos que estejam englobados nesta tag sigam estes
padrões.
<BODY>
Cursos:
<OL>
<LI>Selecione
<DIV CLASS="sidebar">Matemática</DIV>
<br>
<DIV CLASS="sidebar">Medicina</DIV>
</OL></BODY>
<STYLE TYPE="text/css"><!--
SPAN.hot {
color:green;
54
text-decoration: underline}
--></STYLE>
<BODY>
Para sair de um programa:
<OL>
<LI>Selecione <SPAN CLASS="hot">A</SPAN>rquivo
-
<SPAN CLASS="hot">S</SPAN>air
</OL></BODY>
55
H1 {
font-style: italic;
font-weight: bold;
font-size: 18pt;
font-family: 'Times Roman'}
H1 {
font: italic bold 18pt 'Times Roman'}
Note como diversos valores - itálico, negrito, 18pt e Times Roman - são
separados apenas por um espaço em branco. Essas regras abreviadas
certamente poupam espaço e tempo de digitação.
da imagem de fundo.
Largura, estilo e cor de
border
todas as 4 bordas.
Largura, estilo e cor da
border-bottom
borda inferior.
border-bottom-color Cor da citada borda.
border-bottom-style Estilo da citada borda.
border-bottom-width Largura da citada borda.
border-color Cor das 4 bordas.
Largura, estilo e cor da
border-left
borda esquerda.
border-left-color Cor da borda citada.
border-left-style Estilo da borda citada.
border-left-width Largura da borda citada.
Largura, estilo e cor da
border-right
borda direita.
border-right-color Cor da borda citada.
border-right-style Estilo da borda citada.
border-right-width Largura da borda citada.
border-style Estilo de todas as 4 boras.
Largura, estilo e cor da
border-top
borda superior.
border-top-color Cor da borda citada.
border-top-style Estilo da borda citada.
border-top-width Largura da borda citada.
Largura de todas as 4
border-width
bordas.
Elementos flutuantes à
clear esquerda ou à direita de
um elemento.
Parte visível de um
clip
elemento.
color Cor de primeiro plano.
Tipo de ponteiro do
cursor
mouse.
Se o elemento é exibido e
display o espaço é reservado para
ele.
Tipo de filtro aplicado ao
filter
elemento.
float Se o elemento flutua.
57
Espaço a partir da
padding-bottom margem inferior de um
elemento.
Espaço à esquerda do
padding-left
elemento.
Espaço à direita do
padding-right
elemento.
Espaço a partir da
padding-top margem superior do
elemento.
Inserir quebra de página
page-break-after
depois de um elemento.
Inserir quebra de página
page-break-before
antes de um elemento.
Como o elemento é
position
posicionado na página.
text-align Alinhamento do texto.
Sublinhado, sobrelinhado
text-decoration
ou riscado.
Recuo da primeira linha do
text-indent
parágrafo.
Transformação para todas
text-transform maiúsculas, minúsculas ou
inicial maiúscula.
Posição do elemento em
top relação a parte superior
da página.
Alinhamento vertical do
vertical-align
elemento.
Se elemento é visível ou
visibility
invisível.
width Largura do elemento.
Posição do elemento na
z-index
pilha.
59
Exercícios
Exercícios:
3) Em outra página criar uma lista não ordenada com o tipo Square com os
seguintes itens:
Cursos de Graduação:
Agronomia
Biologia
61
Ciência da Computação
Direito
Medicina
Nutrição
Odontologia
Pedagogia
Zootecnia
Para cada linha fazer na fonte tamanho 2, alterar as cores das linhas em
verde e marrom.
62
c) No menu coloque 4 links para os exercícios que fizemos até agora. Olhe
o exemplo acima.
d) No rodapé coloque um link que chame a tela principal.
e) Todos os links deverão abrir na tela principal
f) Na tela principal coloque o texto “Curso de HTML”
65
a) Criar estilo para TAG de link para que não tenha linha sublinhada e
seja da cor azul
b) Criar estilo para a TAG H3 com as seguintes propriedades: cor azul,
fonte Arial, tamanho 12pt.
c) Criar estilo para a TAG H1 com as seguintes propriedades: cor azul,
fonte Arial, tamanho 16pt.
d) Criar estilo com nome de nomeCampo com as seguintes
propriedades: cor preta, fonte Arial, tamanho 12pt.
e) Fazer a chamada desta folha de estilo nas páginas menu.html,
rodapé.html, principal.html, Exercicio1.html, Exercicio2.html,
Exercicio3.html
f) Na página principal.html colocar a TAG H1 para o Título da página.
g) Nas páginas Exercicio1.html, Exercicio2.html, Exercicio3.html colocar
a TAG H3 para os Títulos das páginas.
class="FundoPaginaInterna“
class="NomeArea"
class="TituloDestaque2“
class="tabela-titulo“
class="tabela-linha"
class="itens-form“
2. Seletores complexos 7
O que é um seletor? 7
Exemplo de funcionamento 8
3. Gradiente 11
“Stops” ou definindo o tamanho do seu gradiente 12
4. Columns 15
column-count 15
column-width 15
column-gap 16
5. Transform 2D 17
CSS Transform na prática 17
Várias transformações em um único elemento 18
transform-origin 18
6. Transições e animações 21
O básico: propriedade transition 21
Propriedade animation e regra keyframe 24
Definindo ciclos 28
7. Bordas 31
Dividindo a imagem 31
Comportamento da imagem 32
Aplicação 32
8. Múltiplos backgrounds 35
10. Cores 45
RGBA 45
RGBA e a diferença da propriedade OPACITY 45
currentColor 47
11. Paged media 49
@page 49
Terminologia e Page Model (modelo de página) 50
Page box 50
Page area 51
Margin box 51
Page sheet 51
Non-printable area - Área não impressa 52
Área de impressão 52
Propriedade size 52
auto 52
landscape 52
portrait 52
Page-size 53
12. @font-face 55
Compatibilidade 56
Kit de sobrevivência 56
13. Presentation-levels 57
Como funciona o modelo 57
A propriedade presentation-level 58
1. CSS
O que é CSS?
O CSS formata a informação entregue pelo HTML. Essa informação pode ser qualquer coisa: ima-
gem, texto, vídeo, áudio ou qualquer outro elemento criado. Grave isso: CSS formata a informação.
Essa formatação na maioria das vezes é visual, mas não necessariamente. No CSS Aural, nós ma-
nipulamos o áudio entregue ao visitante pelo sistema de leitura de tela. Nós controlamos volume,
profundidade, tipo da voz ou em qual das caixas de som a voz sairá. De certa forma você está for-
matando a informação que está em formato de áudio e que o visitante está consumindo ao entrar
no site utilizando um dispositivo ou um sistema de leitura de tela. O CSS prepara essa informação
O HTML5 trouxe poucas novidades para os desenvolvedores client-side. Basicamente foram cria-
das novas tags, o significado de algumas foi modificado e outras tags foram descontinuadas. As no-
vidades interessantes mesmo ficaram para o pessoal que conhece Javascript. As APIs que o HTML5
disponibilizou são sem dúvida uma das features mais aguardadas por todos estes desenvolvedores.
Diferentemente do CSS3 que trouxe mudanças drásticas para a manipulação visual dos elementos
do HTML.
Com o CSS que nós conhecemos podemos formatar algumas características básicas: cores, back-
ground, características de font, margins, paddings, posição e controlamos de uma maneira muito
Você deve pensar: “mas com todas as características nós conseguimos fazer sites fantásticos, com
design atraente e com a manutenção relativamente simples”. E eu concordo com você, mas outras
trutura do HTML;
SEO;
Com as atualizações do CSS3 e com os browsers atualizando o suporte do CSS2.1, nós entramos em
patamar onde sem dúvida o CSS é a arma mais poderosa para o designer web. Segue uma pequena
lista dos principais pontos que podemos controlar nesse novo patamar:
5) bordas arredondadas;
7) manipulação de opacidade;
8) controle de rotação;
9) controle de perspectiva;
10) animação;
seletor {
propriedade: valor;
}
A propriedade é a característica que você deseja modificar no elemento. O valor é o valor referente
a esta característica. Se você quer modificar a cor do texto, o valor é um Hexadecimal, RGBA ou até
mesmo o nome da cor por extenso. Até aqui, nada diferente. Muitas vezes você não precisa apren-
der do que se trata a propriedade, basta saber que existe e se quiser decorar, decore. Propriedades
são criadas todos os dias e não é um ato de heroísmo você saber todas as propriedades do CSS e
Os seletores são a alma do CSS e você precisa dominá-los. É com os seletores que você irá escolher
um determinado elemento dentro todos os outros elementos do site para formatá-lo. Boa parte da
inteligência do CSS está em saber utilizar os seletores de uma maneira eficaz, escalável e inteligente.
O que é um seletor?
O seletor representa uma estrutura. Essa estrutura é usada como uma condição para determinar
Seletores encadeados e seletores agrupados são a base do CSS. Você os aprende por osmose duran-
te o dia a dia. Para você lembrar o que são seletores encadeados e agrupados segue um exemplo
abaixo:
div p strong a {
color: red;
}
Você agrupa elementos separados por vírgula para que herdem a mesma formatação.
Estes seletores são para cobrir suas necessidades básicas de formatação de elementos. Eles fazem o
simples. O que vai fazer você trabalhar menos, escrever menos código CSS e também menos códi-
Os seletores complexos selecionam elementos que talvez você precisaria fazer algum script em
Javascript para poder marcá-lo com uma CLASS ou um ID para então você formatá-lo. Com os
seletores complexos você consegue formatar elementos que antes eram inalcançáveis.
Exemplo de funcionamento
Imagine que você tenha um título (h1) seguido de um parágrafo (p). Você precisa selecionar todos
os parágrafos que vem depois de um título h1. Com os seletores complexos você fará assim:
h1 + p {
color:red;
}
Esses seletores é um dos mais simples e mais úteis que eu já utilizei em projetos por aí. Não precisei
adicionar uma classe com JQuery, não precisei de manipular o CMS para marcar esse parágrafo,
bilidades aqui porque podem haver modificações, novos formatos ou outros formatos que podem
ser descontinuados. Para ter uma lista sempre atualizada, siga o link no final da tabela.
elemento[atr=”x”] Elemento que tenha um atributo com um valor específico igual a “x”. 2
elemento[atr~=”x”] Elemento com um atributo cujo valor é uma lista separada por espa- 2
string “x”.
string “x”.
elemento[atr|=”en”] Um elemento que tem o atributo específico com o valor que é sepa- 2
child(n)
child(n)
texto.
checkboxes.
browsers mais novos como Safari, Opera, Firefox e Chrome já aceitam essa feature e você pode
utilizá-la hoje. Os Internet Explorer atuais (8 e 9) não reconhecem ainda, contudo você poderá
utilizar imagens para estes browsers que não aceitam essa feature. Você pode perguntar: “Mas já
que terei o trabalho de produzir a imagem do gradiente, porque não utilizar imagens para todos os
browsers?“ Lembre-se que se utilizar uma imagem, o browser fará uma requisição no servidor bus-
cando essa imagem, sem imagem, teremos uma requisição a menos, logo o site fica um pouquinho
mais rápido. Multiplique isso para todas as imagens de gradiente que você fizer e tudo realmente
Deixe para que os browsers não adeptos baixem imagens e façam mais requisições.
div {
width:200px;
height:200px;
background-color: #FFF;
/* Firefox 3.6+ */
background-image: -moz-linear-gradient(green, red);
/* Opera 11.10+ */
background-image: -o-linear-gradient(green, red);
}
Atenção: Até que os browsers implementem de vez essa feature, iremos utilizar seus prefixos.
Nesse caso nós temos que definir um STOP, para que o browser saiba onde uma cor deve terminar
para começar a outra. Perceba o 20% ao lado da cor vermelha. O browser calcula quanto é 20% da
altura (ou largura dependendo do caso) do elemento, e começa o gradiente da cor exatamente ali.
/* Firefox 3.6+ */
background-image: -moz-linear-gradient(green, red 20%);
/* Opera 11.10+ */
background-image: -o-linear-gradient(green, red 20%);
Veja o resultado:
Se colocarmos um valor para o verde, nós iremos conseguir efeitos que antes só conseguiríamos no
/* Firefox 3.6+ */
background-image: -moz-linear-gradient(green 10%, red 20%);
/* Opera 11.10+ */
background-image: -o-linear-gradient(green 10%, red 20%);
Perceba que o tamanho da transição vai ficando menor à medida que vamos aumentando as por-
hoje não havia maneira de fazer isso de maneira inteligente com CSS e o grupo de propriedades
column-count
A propriedade column-count define a quantidade de colunas terá o bloco de textos.
column-width
Com a propriedade column-width definimos a largura destas colunas.
Fiz alguns testes aqui e há uma diferença entre o Firefox 3.5 e o Safari 4 (Public Beta).
imagine que você tenha uma área disponível para as colunas de 100px. Ou seja, você tem um div
com 100px de largura (width). E você define que as larguras destas colunas (column-width) sejam
de 45px. Logo, haverá 10px de sobra, e as colunas irão automaticamente ter 50px de largura, preen-
Já no Safari, acontece o seguinte: se você define um column-width, as colunas obedecem a esse va-
lor e não preenchem o espaço disponível, como acontece na explicação do W3C e como acontece
venha a calhar, assim, ficamos com os dois resultados citados, que são bem úteis para nós de qual-
quer maneira.
column-gap
A propriedade column-gap cria um espaço entre as colunas, um gap.
Utilizamos aqui os prefixos -moz- e -webkit-, estas propriedades não funcionam oficialmente em
nenhum browser. Mas já podem ser usados em browsers como Firefox e Safari.
5. TRANSFORM 2D
A propriedade transform manipula a forma com que o elemento aparecerá na tela. Você pode-
propriedade transform. Os browsers que suportam essa propriedade, a suportam com o prefixo
especificado.
scale
O valor scale modificará a dimensão do elemento. Ele aumentará proporcionalmente o tama-
nho do elemento levando em consideração o tamanho original do elemento.
skew
Skew modificará os ângulos dos elementos. Você pode modificar os ângulos individualmente
dos eixos X e Y como no código abaixo:
-webkit-transform: skewY(30deg);
-webkit-transform: skewX(30deg);
translation
O translation moverá o elemento no eixo X e Y. O interessante é que você não precisa se pre-
ocupar com floats, positions, margins e etc. Se você aplica o translation, ele moverá o objeto
e pronto.
rotate
O rotate rotaciona o elemento levando em consideração seu ângulo, especialmente quando o
ângulo é personalizado com o transform-origin.
img {
-webkit-transform: skew(30deg); /* para webkit */
-moz-transform: skew(30deg); /* para gecko */
-o-transform: skew(30deg); /* para opera */
transform: skew(30deg); /* para browsers sem prefixo */
}
Para utilizarmos vários valores ao mesmo tempo em um mesmo elemento, basta definir vários va-
img {
-webkit-transform: scale(1.5) skew(30deg); /* para webkit */
-moz-transform: scale(1.5) skew(30deg); /* para gecko */
-o-transform: scale(1.5) skew(30deg); /* para opera */
transform: scale(1.5) skew(30deg); /* para browsers sem prefi-
xo */
}
transform-origin
A propriedade transform-origin define qual o ponto do elemento a transformação terá origem. A
img {
-webkit-transform-origin: 10px 10px; /* para webkit */
-moz-transform-origin: 10px 10px; /* para webkit */
-o-transform-origin: 10px 10px; /* para webkit */
transform-origin: 10px 10px; /* para webkit */
}
Como padrão as transições sempre acontecem tendo como ponto de âncora o centro do objeto.
Há algumas situações que pode ser que você queira modificar essa âncora, fazendo com que por
exemplo, a rotação aconteça em algum dos cantos do elemento. O código de exemplo acima fará
com que a transformação aconteça a partir dos 10px do topo no canto esquerdo. Veja a compara-
A propriedade transform fica mais interessante quando a utilizamos com a propriedade transition,
pessoal do WaSP organizou todo o movimento dos Padrões Web fazendo com que todos os desen-
volvedores, fabricantes de browsers e até mesmo o W3C acreditassem no poder dos padrões não
houve grandes atualizações no CSS. Praticamente formatávamos font, background, cor, tamanhos
A propriedade transition, a regra keyframe e outras propriedades vieram vitaminar a função que
o CSS tem perante o HTML acrescentando maneiras de produzirmos animações e transições. Não
estou dizendo que você fará animações complicadas, com diversos detalhes técnicos e etc. Para
esse tipo de resultado existem outras ferramentas, incluindo Canvas e SVG, que com certeza farão
um trabalho melhor com menos esforço. Mas é fato que as animações via CSS nos ajudará a levar a
Lembrando que o nível de suporte de algumas dessas técnicas ainda é muito baixo. A propriedade
transition funciona em boa parte dos browsers atuais. Mas a regra keyframe que nos permite con-
trolar as fases de uma animação ainda é muito restrito. Para uma tabela mais atual e detalhada de
suporte e compatibilidade, faça uma procura no Google. Onde for possível demonstrarei o código
a {
color: white;
background: gray;
}
No código definimos que o link terá sua cor de texto igual a preta e seu background será cinza.
branco para o preto e que a cor de background mude de cinza para vermelho. O código abaixo faz
exatamente isso:
a {
color: white;
background: gray;
}
a:hover {
color: black;
background: red;
}
O problema é que a transição é muito brusca. O browser apenas modifica as características entre os
dois blocos e pronto. Não há nenhuma transição suave entre os dois estados.
Podemos fazer a mudança de um estado para outro utilizando a propriedade transition. Suponha
características do link com uma pequena transição de meio segundo. O código seria como se segue
abaixo:
a:hover {
color: black;
background: red;
-webkit-transition: 0.5s;
}
Dessa forma a transição apenas acontece quando o hover é ativado. O problema é que ao tirar o
mouse, o browser volta bruscamente para as características iniciais. Para modificar isso basta inse-
a {
color: white;
background: gray;
-webkit-transition: 0.5s;
}
a:hover {
color: black;
background: red;
-webkit-transition: 0.5s;
}
O que a propriedade transition faz é comparar os valores das propriedades em comum entre os dois
estados do link ou de qualquer outro elemento, assim ela modifica suavemente os valores quando
há a ativação da função. Esta é uma técnica simples e que serve para manipularmos transições bá-
Agora suponha que em um bloco há uma determinada propriedade que no outro bloco não há,
a {
border:1px solid orange;
color: white;
background: gray;
-webkit-transition: 0.5s;
}
a:hover {
color: black;
background: red;
-webkit-transition: 0.5s;
}
Nesse caso o browser detecta que há uma propriedade no primeiro estado, mas não no segundo,
por isso ele não faz a transição desta propriedade, apenas das propriedades em comuns.
<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<meta charset=”utf-8”>
<title>CSS Transition</title>
<style type=”text/css” media=”screen”>
a {
color:white;
background:gray;
-webkit-transition: 0.5s linear;
}
a:hover {
color:black;
background:red;
-webkit-transition: 0.5s linear;
}
</style>
</head>
<body>
</body>
</html>
browser qual o valor inicial e o valor final para que ele aplique a transição automaticamente, con-
trolamos praticamente apenas o tempo de execução. Para termos mais controle sobre a animação
@-webkit-keyframes rodar {
from {
-webkit-transform:rotate(0deg);
}
to {
-webkit-transform:rotate(360deg);
}
}
O código acima define um valor inicial e um valor final. Agora vamos aplicar esse código a um
O código HTML até agora é este. Fiz apenas um div e defini este keyframe:
<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<title></title>
<meta charset=”utf-8”>
<style>
@-webkit-keyframes rodaroda {
from {
-webkit-transform:rotate(0deg);
}
to {
-webkit-transform:rotate(360deg);
}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
Primeiro você define a função de animação, no caso é o nosso código que define um valor inicial de
0 graus e um valor final de 360 graus. Agora vamos definir as características deste DIV.
div {
width:50px;
height:50px;
margin:30% auto 0;
background:black;
}
Nas primeiras linhas defini qual será o estilo do div. Ele terá uma largura e uma altura de 50px. A
margin de 30% do topo garantirá um espaço entre o objeto e o topo do documento, e background
preto.
shortcode bem simples. Veja a tabela logo a seguir para entender o que cada propriedade significa:
Propriedade Definição
duration
function Existem uma série de valores possíveis e que pode ser que o seu navegador
ainda não suporte, mas são eles: ease, linear, ease-in, ease-out, ease-in-out,
ber>, <number>)]*
animation- Define o número de vezes que o ciclo deve acontecer. O padrão é um, ou
interation-count seja, a animação acontece uma vez e pára. Pode ser também infinito defi-
animation-play- Define se a animação está acontecendo ou se está pausada. Você poderá por
state exemplo, via script, pausar a animação se ela estiver acontecendo. Os valo-
animation-delay Define quando a animação irá começar. Ou seja, você define um tempo
imediatamente.
Voltando para o nosso código, vamos aplicar algumas dessas propriedades:
div {
width:50px;
height:50px;
margin:30% auto 0;
background:black;
-webkit-animation-name: rodaroda;
-webkit-animation-duration: 0.5s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
-webkit-animation-direction: alternate;
Veja que na propriedade animation-name chamamos o mesmo nome que demos na nossa função
de keyframe logo no começo da explicação. Depois definimos uma duração de ciclo de meio se-
gundo. Definimos que o comportamento da animação será linear, e com a propriedade animation-
iteration-count definimos que ele girará infinitamente. E por último definimos pelo animation-di-
rection que a animação deverá ser alternada, ou seja, o DIV girará para um lado, e quando alcançar
Podemos melhorar esse código utilizando a versão shortcode, que é mais recomendado. Veja a or-
div {
width:50px;
height:50px;
margin:30% auto 0;
background:black;
Definindo ciclos
Nós definimos no keyframe do nosso último exemplo apenas um início e um fim. Mas e se quisés-
semos que ao chegar na metade da animação o nosso elemento ficasse com o background verme-
lho? Ou que ele mudasse de tamanho, posição e etc.? É aí onde podemos flexibilizar melhor nosso
keyframe definindo as fases da animação. Por exemplo, podemos dizer para o elemento ter uma cor
de background diferente quando a animação chegar aos 10% do ciclo, e assim por diante.
Veja o exemplo:
@-webkit-keyframes rodaroda {
0% {
-webkit-transform:rotate(0deg);
}
50% {
background:red;
-webkit-transform:rotate(180deg);
}
100% {
-webkit-transform:rotate(360deg);
}
}
Definimos acima que o início da animação o elemento começará na posição normal, 0 graus.
Quando a animação chegar aos 50% do ciclo, o elemento deverá ter girado para 180 graus e o ba-
ckground dele deve ser vermelho. E quando a animação chegar a 100% o elemento deve ter girado
ao todo 360 graus e o background, como não está sendo definido, volta ao valor padrão, no nosso
caso black, que foi definido no CSS onde formatamos este DIV.
Logo nosso elemento girará pra sempre e ficará alternando a cor de fundo de preto para vermelho.
Fiz um exemplo bem simples modificando apenas o background, mas você pode muito bem definir
mero de estágios: 5%, 10%, 12%, 16% e etc... Adequando as fases da animação às suas necessidades.
Há exemplos muito interessantes na internet onde podemos ver todo o poder das animações feitas
pela CSS. Veja o exemplo que fizemos aqui neste texto no endereço: http://migre.me/4ubym
vivíamos antes de conhecê-la. É muito mais fácil entender testando na prática, por isso sugiro que
se você estiver perto de um computador, faça testes enquanto lê este texto. A explicação pode não
Esta propriedade ainda está em fase de testes pelos browsers, por isso utilizaremos os prefixos para
ver os resultados.Utilizarei apenas o prefixo do Safari, mas o Firefox já entende essa propriedade
muito bem.
A sintaxe do border-image se divide em três partes: 1) URL da imagem que será utilizada. 2)
Tamanho do slice das bordas. 3) Como o browser irá aplicar a imagem na borda.
a {
display:block;
width:100px;
-webkit-border-image: url(border.gif) 10 10 10 10 stretch;
}
Acima definimos uma imagem com o nome de border.gif, logo depois definimos o width de cada
uma das bordas do elemento. A sintaxe é igual a outras propriedades com 4 valores: top, right, bot-
tom, left. E logo depois colocamos qual o tipo de tratamento que a imagem vai receber.
Dividindo a imagem
Para posicionar a imagem devidamente em seu objeto o browser divide a imagem em 9 seções:
superior esquerdo, o 3 no canto superior direito e assim por diante. Se você fizer o teste, a imagem
aparecerá no elemento como se estivesse desproporcional. Isso é normal porque a imagem deve
Comportamento da imagem
O comportamento da imagem é a parte mais importante porque define como o centro da imagem
(no caso do nosso exemplo a seção de número 5), irá ser tratada. Há vários valores, mas que é mais
simples de se entender é a stretch, que estica e escala a imagem para o tamanho do elemento aplica-
do. Há outros valores como round e repeat. Mas hoje alguns browsers não tem tanto suporte e aca-
bam ou ignorando esses valores ou como no caso do Safari e o Chrome, interpretam o round como
o repeat. Vamos nos concentrar com o stretch e você entenderá como funciona a propriedade.
Aplicação
Vamos utilizar a imagem abaixo para aplicar a propriedade. Iremos fazer um botão ao estilo iPho-
ne. A coisa é simples e sugiro que você faça testes individualmente brincando com os valores das
bordas e com diversas outras imagens para ver como funciona o recurso.
Irei aplicar o estilo em um link. O código que irei aplicar segue abaixo:
a {
display:block;
width:100px;
text-align:center;
font:bold 13px verdana, arial, tahoma, sans-serif;
text-decoration:none;
color:black;
}
Para inserir a imagem, colocamos as duas linhas abaixo:
border-width:10px;
-webkit-border-image: url(button.png) 10 stretch;
Defini com a primeira linha que a borda teria 10px de largura com a propriedade border-width. Na
segunda linha define que a imagem utilizada seria a button.png, que as áreas da imagem teriam que
se estender por 10px, e o valor stretch define que a imagem cobrirá o elemento inteiro, o resultado
segue abaixo:
Para você ver como tudo ali é meio estranho. Se eu diminuir o valor de 10 do border-image, que é
o valor que define quanto a imagem deve se estender nas bordas, veja como fica:
Temos o border-width definindo a largura da borda, mas não temos nenhum valor dizendo quanto
Os efeitos são bem estranhos quando esses valores estão mal formatados. Por isso, teste na prática
essa propriedade para que não haja problemas a implementar em seus projetos. O pulo da gato,
lados? Você sabe que para criar algo parecido você não pode utilizar uma imagem só. A solução
até hoje seria criar 4 elementos divs aninhados (ou seja, um dentro do outro) e aplicar um pedaço
deste background em cada um destes elementos para dar a sensação de um background único. O
resultado é interessante mas o meio que isso é feito não é nada bonito. Você era obrigado a declarar
4 elementos “inúteis“ no seu HTML apenas para compensar um efeito visual. A possibilidade de
atribuirmos múltiplos backgrounds em apenas um elemento é a feature que vai ajudá-lo a não sujar
seu código.
A sintaxe para múltiplos backgrounds é praticamente idêntica a sintaxe para definir um back-
div {
width:600px;
height:500px;
background:
url(img1.png) top left repeat-X,
url(img2.png) bottom left repeat-Y;
}
Definimos apenas uma propriedade background, o valor dessa propriedade em vez de conter ape-
nas um valor como normalmente fazemos, poderá haver vários, com suas respectivas definições de
res tem problemas crossbrowser ou por falta de recursos mais avançados. Mas se você parar para
pensar, apenas uma propriedade cuida dessa parte, que é a propriedade float. De longe, para mim,
o float é a propriedade mais importante que há no CSS. Se o IE não soubesse o que é float, até hoje
nós não estaríamos fazendo sites com CSS. O float cuida de toda a diagramação do site, desde os
elementos que definirão as áreas mestres do site até os pequenos detalhes de imagens e ícones.
efeitos que a propriedade float causa nos elementos próximos. Se você pede para duas colunas fica-
rem flutuando à esquerda e outra coluna à direita, o rodapé sobe. Ou se você coloca um elemento
envolvendo outros elementos com float, esse elemento perde a altura. Estes são problemas corri-
queiros que já tem soluções inteligentes e que não apresentam chateações mais graves.
Infelizmente o float não é o ideal para a diagramação e organização dos elementos do layout. Ele
resolve muitos problemas, mas deixa a desejar em diversos sentidos. O float está completamente
ligado a ordem dos elementos no HTML. Existem técnicas que você consegue fazer quase que
qualquer organização visual sem encostar no código HTML. Mas há outras necessidades que in-
variavelmente você precisará modificar a ordem dos elementos no meio do HTML para que a
diagramação do site saia conforme o esperado. Essa organização do HTML pode alterar desde pro-
gramação server-side e até resultados de SEO e acessibilidade. Por isso é interessante que o HTML
fique organizado de forma que ele supre as necessidades dessas bases. Sua organização visual deve
Tendo em vista estes e outros problemas o W3C criou um novo módulo. Na verdade ele não é o
único, e nem pode ser para que tenhamos diversas formas de trabalhar. O módulo em questão é
chamado de Template Layout. Esse módulo consiste em uma forma de criarmos e organizarmos os
tres e grid a ser seguido. 2) Formatação de font, cores, background, bordas etc.
Essa política é chamada de template-based positioning (não tem nada a ver com a propriedade
position, pelo contrário é uma alternativa) que dá ao elemento uma grid invisível para alinhar seus
elementos descendentes.
Porque o layout deve se adaptar em diferentes janelas e tamanhos de papéis, as colunas e linhas do
• Páginas complexas com múltiplas barras de navegação em áreas com posições fixas como
publicidade, submenus e etc.
• Formulários complexos, onde o alinhamento de labels e campos podem ser facilmente defi-
nidos com as propriedades deste módulo com a ajuda das propriedades de margin, padding
e tables.
• GUIs, onde botões, toolbars, labels, ícones etc, tem alinhamentos complexos e precisam estar
sempre alinhados caso o tamanho ou a resolução da tela mudam.
• Medias que são paginadas, como medias de impressão onde cada página são divididos em
áreas fixas para conteúdos de gêneros diferentes.
Template-based positioning são uma alternativa para a propriedade position com o valor abso-
lute. Antigamente lembro-me que quase todos os desenvolvedores tentavam organizar e diagra-
mar layouts utilizando position. Não que seja errado, mas definitivamente não é a melhor for-
ma. Costumo dizer em meus cursos e palestras que position é para detalhes. Nada muito grande,
mas para pequenos detalhes. Usamos position para posicionarmos elementos que não tem rela-
ção direta com sua posição no código HTML. Ou seja, não importa onde o elemento esteja, o
seus elementos. O mapeamento dos slots é feito com duas propriedades que já conhecemos que
este módulo adiciona mais alguns valores e funcionalidades, são as propriedades position e display.
A propriedade display irá definir como será o Grid. Quantos slots e etc.
<div class=”geral”>
<nav class=”menu”>...</nav>
<aside class=”menulateral”>...</aside>
<aside class=”publicidade”>...</aside>
<article class=”post”>...</article>
<footer>...</footer>
</div>
Agora iremos definir a posição destes elementos. O código CSS seria assim:
.geral {
display: “aaa”
“bcd”
“eee”;
}
nav.menu {position:a;}
aside.menulateral {position:b;}
aside.publicidade {position:d;}
article.post {position:c;}
footer {position:e;}
Aqui o elemento display trabalha como um table, onde seu conteúdo será colocando em colunas
e linhas. A única diferença é que o número de linhas e colunas não dependem do conteúdo é fixa
não importa.
Existem alguns valores para que você trabalhe: letra, @ (arroba) e “.” (pronto).
Cada letra diferente é um slot de conteúdo diferente. O @ define um sinal para um slot padrão. E o
Quando repetimos as letras como no exemplo anterior, tanto na horizontal quanto na vertical, é
formado um slot único que se expande para o tamanho da quantidade de slots. Lembra do colspan
Não é possível fazer um slot que não seja retangular ou vários slots com a mesma letra. Um templa-
te sem letra nenhuma também não é possível. Um template com mais de um @ também é proibido.
Se houverem esses erros a declaração é ignorada pelo browser.
Pra definir a altura da linha (row-height) podemos utilizar o valor padrão “auto”, que define altura
que a altura da linha é feito de acordo com a quantidade de conteúdo no slot. Você pode definir um
valor fixo para a altura. Não é possível definir um valor negativo. Quando definimos um * (asterís-
co) para a altura, isso quer dizer que todas as alturas de linha serão iguais.
A largura da coluna (col-width) é definida com valores fixos, como o row-height. Podemos definir
também o valor de * que funciona exatamente igual ao altura de linha, mas aplicados a largura da
coluna. Há dois valores chamados max-content e min-content que fazem com que a largura seja
determinada de acordo com o conteúdo. Outro valor é o minmax(p,q) que funciona assim: a lar-
gura das colunas são fixadas para ser maiores ou iguais a p e menores ou iguais a q. Pode haver um
espaço branco (white space) em volta de p e q. Se q > p, então q é ignorado e o minmax(p,q) é trata-
Para definir a altura dos slots, utilizamos uma sintaxe diretamente na propriedade display. Veja
display: “a a a” /150px
“b c d”
“e e e” / 150px
100px 400px 100px;
display: “a a a” /150px
“b c d”
“e e e” /150px
100px 400px 100px;
Ou seja, a primeira coluna do grid terá 100px de largura, a segunda 400px e a terceira 100px.
As medidas que coloquei ao lado, iniciando com uma / (barra) definem a altura das linhas. Logo a
primeira linha terá 150px e a terceira linha também. A linha do meio, como não tem altura definida
O espaço entre as colunas são definidos com “.” (pontos). Veja o exemplo abaixo:
display: “a a a” /150px
“. . .” /50px
“b c d”
“. . .” /50px
“e e e” /150px
100px 400px 100px;
Isso quer dizer que entre as colunas do grid haverá um espaço em branco de 50px de altura. Veja a
plate. Você escreve apenas uma letra por elemento. Vários elementos podem ser colocados em um
Abaixo veja uma imagem que pegamos diretamente do exemplo do W3C. O layout é muito simples:
<ul id=”nav”>
<li>navigation</li>
</ul>
<div id=”content”>
<div class=”module news”>
<h3>Weather</h3>
<p>There will be weather</p>
</div>
<div class=”module sports”>
<h3>Football</h3>
<p>People like football.</p>
</div>
<div class=”module sports”>
<h3>Chess</h3>
<p>There was a brawl at the chess tournament</p>
</div>
<div class=”module personal”>
<h3>Your Horoscope</h3>
<p>You’re going to die (eventually).</p>
</div>
<p id=”foot”>Copyright some folks</p>
</div>
Agora veja o CSS com toda a mágica:
body {
display: “a b”
10em *;
}
#nav {
position: a;
}
#content {
position: b;
display: “c . d . e “
“. . . . . “ /1em
“. . f . . “
* 1em * 1em *;
}
.module.news {position: c;}
.module.sports {position: d;}
.module.personal {position: e;}
#foot {position: f;}
Lembre-se que não importa a posição dos elementos no código. E essa é a mágica. Podemos or-
ganizar o código HTML de acordo com nossas necessidades e levando em consideração SEO,
Pseudo-elemento ::slot()
Você pode formatar um slot especifico simplesmente declarando-o no CSS. Suponha que você
queira que um determinado slot tenha um fundo diferente, alinhamento e etc... Essa formatação
será aplicada diretamente no slot e não no elemento que você colocou lá. Fica mais simples de se
formatar porque você não atrela um estilo ao elemento e sim ao slot. Se você precisar posicionar
RGBA
Normalmente em web trabalhamos com cores na forma de hexadecimal. É a forma mais comum
e mais utilizada desde os primórdios do desenvolvimento web. Mesmo assim, há outros formatos
menos comuns que funcionam sem problemas, um destes formatos é o RGB. O RGB são 3 con-
juntos de números que começam no 0 e vão até 255 (0% até 100%), onde o primeiro bloco define
a quantidade de vermelho (Red), o segundo bloco a quantidade de verde (Green) e o último bloco
a quantidade de azul (Blue). A combinação destes números formam todas as cores que você pode
imaginar.
No HTML o RGB pode ser usado em qualquer propriedade que tenha a necessidade de cor, como:
color, background, border etc. Exemplo:
p {
background:rgb(255,255,0);
padding:10px;
font:13px verdana;
}
dessa cor. O CSS3 nos trouxe a possibilidade de modificar a opacidade dos elementos via pro-
priedade opacity. Lembrando que quando modificamos a opacidade do elemento, tudo o que está
contido nele também fica opaco e não apenas o background ou a cor dele. Veja o exemplo abaixo
e compare as imagens.
Agora com o bloco branco, marcado com um P, com opacidade definida. Perceba que o back-
Isso é útil mas dificulta muito quando queremos que apenas a cor de fundo de um determinado
elemento tenha a opacidade modificada. É aí que entra o RGBA. O RGBA funciona da mesma
forma que o RGB, ou seja, definindo uma cor para a propriedade. No caso do RGBA, além dos 3
canais RGB (Red, Green e Blue) há um quarto canal, A (Alpha) que controla a opacidade da cor.
Nesse caso, podemos controlar a opacidade da cor do background sem afetar a opacidade dos ou-
tros elementos:
Veja um exemplo de código aplicado abaixo:
p {
background:rgba(255,255,0, 0.5);
padding:10px;
font:13px verdana;
}
O último valor é referente ao canal Alpha, onde 1 é totalmente visível e 0 é totalmente invisível. No
currentColor
O valor currentColor é muito simples de se entender e pode ser muito útil para diminuirmos o
retrabalho em alguns momentos da produção. Imagine que o currentColor é uma variável cujo seu
valor é definido pelo valor da propriedade color do seletor. Veja o código abaixo:
p {
background:red;
padding:10px;
font:13px verdana;
color: green;
border:1px solid green;
}
Note que o valor da propriedade color é igual ao valor da cor da propriedade border.
Há uma redundância de código, que nesse caso é irrelevante, mas quando falamos de dezenas de
arquivos de CSS modulados, com centenas de linhas cada, essa redundância pode incomodar a
seletor o valor da propriedade color. Veja o código abaixo para entender melhor:
p {
background:red;
padding:10px;
font:13px verdana;
color: green;
border:1px solid currentColor;
}
Veja que apliquei o valor currentColor onde deveria estar o valor de cor da propriedade border.
Agora, toda vez que o valor da propriedade color for modificado, o currentColor aplicará o mesmo
Isso funciona em qualquer propriedade que faça utilização de cor como background, border, etc.
Obviamente não funciona para a propriedade color. O currentColor também não funciona em se-
letores separados, ou seja, você não consegue atrelar o valor da propriedade color ao currentColor
de outro seletor.
11. PAGED MEDIA
Com certeza você já deve ter tentado ler um livro ou uma apostila em algum site na web e preferiu
imprimir o texto para ler off-line, no papel por ser mais confortável ou por ser mais prático quando
não se está conectado. Existem vários motivos para que um leitor queira imprimir o conteúdo de
um site, principalmente sites com textos longos e pesados. Durante muito tempo o principal mo-
tivo era que ler na tela do computador era cansativo. Hoje isso ainda é um problema, mas com o
avanço das telas e do aparecimento das tablets no mercado, você consegue passar mais tempo na
frente de uma tela lendo grandes quantidades de texto. O problema é que geralmente a organização
Outro problema comum é que nós desenvolvedores não temos uma maneira fácil de formatar pági-
nas. Na verdade temos, mas é um pouco de gambiarra e claro, não é maneira correta. A especifica-
ção de Paged Media traz nos possibilita formatar as páginas, transparências (aqueles “plásticos“ que
usamos com retroprojetores) ou até mesmo páginas que serão vistas pelo monitor. Controlaremos
Nota: Para você não se confundir, quando digo páginas, quero dizer páginas físicas, de papel, não
@page
Definiremos com CSS3 um modelo de página que especifica como o documento será formatado
em uma área retangular, chamada de page box, com larguras e alturas limitadas. Nem sempre o
page box tem referência correspondente para uma folha de papel física, como normalmente conhe-
cemos em diversos formatos: folhas, transparências e etc. Esta especificação formata o page box,
mas é o browser ou o meio de acesso que o usuário está utilizando que tem a responsabilidade de
caixa retangular que será sua área de impressão. Isso é como se fosse um viewport do browser.
Como qualquer outro box, a page box tem margin, border, padding e outras áreas. O conteúdo e as
A área de conteúdo do page box é chamada de area da página ou page area. O conteúdo do docu-
mento flui na área de página. Os limites da área da página na primeira página estabelece o retângu-
A área da margem da page box é dividido em 16 caixas de margem ou margin boxes. Você pode
definir para cada caixa de margem sua própria borda, margem, padding e áreas de conteúdo.
Normalmente essas caixas de margem são usadas para definir headers e footers do documento.
As propriedades do page box são determinadas pelas propriedades estabelecidas pelo page context,
o qual é a regra de CSS @page. Para definir a largura e altura de uma page box não se usa as pro-
priedades width e height. O tamanho da page box é especificada utilizando a propriedade size no
page context.
Page box
O page box é onde tudo acontece. Tenha em mente que o page box é o viewport das medias impres-
sas. É lá que conterá as áreas de margem, padding, border e onde o texto será consumido.
A largura e altura do page box é determinada pela propriedade size. Em um caso simples, o page
box tem a largura e a altura de uma folha. Entretanto em casos complexos onde page box difere
das folhas de papel em valores e orientações já que você pode personalizar de acordo com sua
necessidade.
Page area
Margin box
Margin boxes contém boxes para header e footer. São conjunto de 16 boxes onde você pode inserir
conteúdo útil como número da página, título do livro, etc, etc, etc. Essas áreas ficam fora do Page
area. Cada um tem suas margins, paddings e bordas individuais. Veja o diagrama abaixo para vi-
sualizar melhor.
Page sheet
A folha, a página, a superfície que será impresso o conteúdo. A ilustração abaixo mostra a repre-
A área de não impressão é a área onde o dispositivo de impressão não é capaz de imprimir. Esta
área depende do dispositivo que você está utilizando. O page box fica dentro da área de impressão.
Área de impressão
tamanho da page sheet menos a área de não impressão. Como a área de não impressão, a área útil
de impressão depende muito do dispositivo. O dispositivo pode ajustar o conteúdo para que seja
impresso sem problemas nessa área. Cada dispositivo tem seu meio de ajuste.
Propriedade size
A propriedade size especifica o tamanho e a orientação da área do de conteúdo, o page box. O ta-
manho do page box pode ser definida com valores absolutos (px) ou relativos (%). Você pode usar
auto
O page box irá ter o tamanho e orientação do page sheet escolhido pelo usuário.
landscape
Define que a página será impressa em modo paisagem. O page box neste caso tem o mesmo ta-
manho da página, mas o lado maior é o horizontal. Se o tamanho da página não for definido, o
portrait
Define que a página será impressa em modo retrato. O page box neste caso tem o mesmo tamanho
da página, mas o lado maior é o vertical. Se o tamanho da página não for definido, o tamanho é
@page {
size: auto; /* auto is the valor padrão */
margin: 10%; /* margem */
}
Como nessa caso a margem é variável, ela está sendo relativa às dimensões da página. Logo se a
página uma A4, com as dimensões: 210mm x 297mm, as margens serão 21mm e 29.7mm.
Outro exemplo:
@page {
size: 210mm 297mm; /* definem o page-sheet para um tamanho de A4
*/
}
Page-size
O page-size pode ser especificado utilizando um dos media names abaixo. Isso é o equivalente a
utilizar os valores escritos diretamente na propriedade size. Contudo é muito melhor utilizar o
Formato Descrição
A5 A página deve ser definida para o tamanho ISO A5: 148mm x 210mm.
A4 A página deve ser definida para o tamanho ISO A4: 210 mm x 297 mm.
A3 A página deve ser definida para o tamanho ISO A3: 297mm x 420mm.
B5 A página deve ser definida para o tamanho ISO B3 media: 176mm x 250mm.
B4 A página deve ser definida para o tamanho ISO B4: 250mm x 353mm.
letter A página deve ser definida para o tamanho papel carta: 8.5 pol x 11 pol
@page {
size: A4 landscape;
}
O W3C tem uma especificação muito extensa que pode ser encontrada aqui:
http://www.w3.org/TR/css3-page/
CSS - Curso W3C Escritório Brasil 53
12. @FONT-FACE
A regra @font-face é utilizada para que você utilize fontes fora do padrão do sistema em seus sites.
Para que isso funcione, nós disponibilizamos as fontes necessárias em seu servidor e linkamos estas
fontes no arquivo CSS. A sintaxe é bem simples e tem suporte a todos os navegadores, com algumas
ressalvas.
@font-face {
font-family: helveticaneue;
src: url(helveticaNeueLTStd-UltLt.otf);
}
Na primeira linha você customiza o nome da font que você usará durante todo o projeto. Na segun-
da linha definimos a URL onde o browser procurará o arquivo da font para baixar e aplicar no site.
Suponha que o usuário tenha a font instalada, logo ele não precisa baixar a font, assim podemos
indicar para que o browser possa utilizar o arquivo da própria máquina do usuário. Menos requi-
@font-face {
font-family: helveticaneue;
src: local(HelveticaNeueLTStd-UltLt.otf),
url(HelveticaNeueLTStd-UltLt.otf);
}
Typography extensions
Format)
Compatibilidade
As versões 7, 8 e 9 do Internet Explorer aceitam o @font-face apenas se a font for EOT. Você pode
encontrar qualquer conversor online que esse problema é resolvido. Você pode converter suas fon-
tes para EOT diretamente no Font Squirrel. O Safari, Firefox, Chrome e Opera aceitam fontes em
TTF e OTF.
Para suprir a necessidade de atenção do Internet Explorer, você precisa especificar a URL da font
.eot para que o Internet Explorer possa aplicar a font corretamente. A sintaxe fica desta forma:
@font-face {
font-family: helveticaneue;
src: url(helveticaNeueLTStd-UltLt.eot);
src: url(helveticaNeueLTStd-UltLt.otf);
}
Kit de sobrevivência
O Font Squirrel fez um pequeno favor para toda a comunidade. É um sisteminha que con-
verte suas fontes para os formatos necessários e te devolve para você utilizar em seus sites:
http://migre.me/4qST9
13. PRESENTATION-LEVELS
A informação na web é reutilizada de diversas maneiras. Toda informação publicada é reutilizada
por diversos meios de acesso, seja o seu browser, leitor de tela ou robôs de busca. O HTML propor-
ciona essa liberdade para a informação. Por ser uma linguagem muito simples, podemos reutilizar
a informação marcada com HTML em diversos meios de acesso. Mas o HTML não cuida da forma
com que o usuário vai visualizar a informação em seu dispositivo. O HTML apenas exibe a infor-
mação. A maneira que o usuário consome essa informação é diferente em cada um dos meios de
acesso e dispositivos. É aí que entra todo o poder do CSS. O CSS formata a informação para que
ela possa ser acessível em diversos usar agents (meios de acesso). Se você acessa o site do seu banco
pelo monitor de 22’’ da sua casa ou pelo seu celular, a informação tem que aparecer bem organizada
Além disso podemos apresentar a informação de diversas formas em um mesmo dispositivo. Por
exemplo: você pode ver uma galeria de imagens da maneira convencional, clicando nas thumbs das
fotos ou ver em forma de slideshow. Podemos levar essas experiências para websites de conteúdo
textual também. A especificação de presentation-levels é uma das especificações que levam o usu-
ário a terem conteúdo mostrados de uma outra forma da qual estamos acostumados. É muito útil
para apresentações de slides, com efeitos, transições e etc ou qualquer documento que seria mais
bem apresentado no formato de apresentação, como uma proposta, documentos técnicos e etc.
O EPL pode ser explicito em uma folha de estilo ou calculado automaticamente baseado na posição
do elemento pela estrutura do documento. É assim que o browser calcula para mostrar os elemen-
level, at-level e above-level. Dependendo da pontuação de EPL que o browser dá, o elemento fica
em um determinado nível. Essas pseudo-classes podem e devem ser modificadas via CSS.
A propriedade presentation-level
A propriedade presentation-level define como os valores de apresentação (EPL) de um determi-
nado objeto devem ser calculados. São três valores possíveis: números inteiros, increment e same.
Quando colocamos increment, o valor do objeto aumenta um ponto em relação ao objeto anterior.
Suponha que há duas LI em uma UL. A primeira LI tem o valor de 1, a segunda tem valor de 2 e
assim por diante.
Quando definimos o valor same, o browser computa o mesmo valor do objeto anterior.
<!DOCTYPE html>
<html>
<body>
<h1>strategies</h1>
<h2>our strategy</h2>
<ul>
<li>divide</li>
<li>conquer
<p>(in that order)</p>
</li>
</ul>
<h2>their strategy</h2>
<ul>
<li>obfuscate</li>
<li>propagate</li>
</ul>
</body>
</html>
Vamos definir o CSS de presentation-levels para esse HTML adicionado o código CSS:
@media projection {
h1 { page-break-before: always }
li { presentation-level: increment }
:below-level { color: black }
:at-level { color: red }
:above-level { color: silver }
}
Mas o mais importante é a propriedade presentation-level que definimos para a LI. Isso quer dizer
As três pseudo-classes que falamos no começo do texto: below-level, at-level, above-level, que for-
mata os elementos que foram mostrados anteriores, o que elemento que está sendo mostrado e o
próximo elemento.
Sendo assim, o browser calcula a pontuação de cada um dos elementos utilizados no exemplo
<h1>strategies</h1> 0
<h2>our strategy</h2> 0
<ul> 0
<li>divide</li> 1
<li>conquer</li> 2
</ul> 0
<h2>their strategy</h2> 0
<ul> 0
<li>obfuscate</li> 1
<li>propagate</li> 2
</ul> 0
<!DOCTYPE html>
<html>
<style>
@media projection {
h1 { presentation-level: 0; }
h2 { presentation-level: 1; }
h3 { presentation-level: 2; }
body * { presentation-level: 3; }
:above-level { display: none; }
}
</style>
<body>
<h1>strategies</h1>
<h2>our strategy</h2>
<ul>
<li>divide</li>
<li>conquer</li>
</ul>
<h2>their strategy</h2>
<ul>
<li>obfuscate</li>
<li>propagate</li>
</ul>
</body>
</html>
Perceba que agora definimos no CSS que tudo dentro de body tem o valor de 3. Logo o H1 que foi
Definimos também display:none; para os próximos elementos. Agora veja a pontuação aplicada:
HTML Valor de EPL
<h1>strategies</h1> 3
<h2>our strategy</h2> 2
<ul> 0
<li>divide</li> 0
<li>conquer</li> 0
</ul> 0
<h2>their strategy</h2> 2
<ul> 0
<li>obfuscate</li> 0
<li>propagate</li> 0
</ul> 0
http://www.w3.org/TR/css3-preslev/
de
Parte 3 – Folhas de Estilo
Conteúdo
12. Introdução........................................................................................................... 67
12.1. O que são folhas de estilo? ..........................................................................................67
12.2. Para que servem as folhas de estilo ............................................................................68
Separar apresentação da estrutura....................................................................................68
Controle absoluto da aparência da página......................................................................68
Páginas mais leves ..............................................................................................................68
Manutenção de um grande site ........................................................................................68
13. Regras Básicas .................................................................................................... 70
13.1. Regras, declarações e seletores ....................................................................................70
13.2. Múltiplas declarações e seletores.................................................................................71
13.3. Comentários e instruções.............................................................................................71
13.4. Valores ............................................................................................................................72
13.5. Herança...........................................................................................................................73
13.6. Descritores HTML especiais .......................................................................................73
13.7. Como incluir estilos em uma página ..........................................................................74
13.8. Classes e IDs..................................................................................................................76
13.9. Links (pseudo-classes e pseudo-elementos) ..............................................................77
13.10. Seletores de contexto..................................................................................................77
13.11. Cascata de folhas de estilo .........................................................................................77
14. Fontes ................................................................................................................. 79
14.1. font-family......................................................................................................................79
14.2. font-size ..........................................................................................................................80
14.3. font-style e font-weight ................................................................................................82
14.4. font-variant.....................................................................................................................84
14.5. A propriedade font........................................................................................................85
15. Atributos de texto ............................................................................................... 86
15.1. text-transform ................................................................................................................86
15.2. text-decoration...............................................................................................................87
15.3. text-align e vertical-align...............................................................................................88
15.4. text-indent ......................................................................................................................89
15.5. line-height.......................................................................................................................89
15.6. letter-spacing ..................................................................................................................90
16. Cores .................................................................................................................. 91
16.1. color ................................................................................................................................92
16.2. background-color ..........................................................................................................92
16.3. background-image.........................................................................................................93
16.4. background-repeat ........................................................................................................93
65
Parte 3 – Folhas de Estilo
66
Parte 3 – Folhas de Estilo
12. Introdução
O restante deste artigo tratará dos fundamentos da tecnologia de folhas de estilos aplicáveis ao
HTML, chamada de Cascading Style Sheets (folhas de estilo em cascata), mostrando como estabelecer
as regras de estilo para um bloco de texto, uma página ou todo um site. Seções específicas abordarão
cores, imagens, tipologia e posicionamento. Este texto não é completo. Omitimos propriedades e
recursos não suportados nos browsers e nos limitamos àqueles recursos que constam da especifica-
ção CSS1 (não incluímos recursos proprietários nem a maior parte das novidades do CSS2 que não
67
Parte 3 – Folhas de Estilo
funcionam nos browsers disponíveis no mercado). Para uma abordagem mais completa, consulte a
documentação oficial do W3C: http://www.w3.org/Style/.
68
Parte 3 – Folhas de Estilo
mento, e ser formatada na hora em que for carregada pelo browser. É possível também fazer o
contrário: mudar o estilo sem alterar a informação, como ter uma página que sempre carrega
com um estilo diferente.
O uso das folhas de estilo depende da boa estrutura do HTML. A linguagem CSS (é uma
linguagem declarativa) trabalha com os elementos tratando-os como "objetos". Cada parágrafo
<P>, cada <H1>, cada <IMG> é um objeto. Objetos podem ser agrupados de várias formas.
A cada objeto ou grupo de objetos podem ser atribuídas propriedades de estilo definidas em
regras. Por exemplo, considere a seguinte regra: "todo objeto P da classe 'editorial' será azul,
terá tamanho de 12 pontos, espaçamento duplo, alinhamento pela direita e usará a família de
fontes Arial, ou, se esta não existir, Helvetica, ou então a fonte sem-serifa default do sistema".
Um arquivo CSS com apenas a regra acima conteria o texto:
P.editorial {color: 0000ff;
font-size: 12pt;
line-height: 24pt;
text-align: right;
font-family: arial, helvetica, sans-serif}
Se a folha de estilos acima for aplicada a uma página que possua parágrafos <P> rotula-
dos com o nome "editorial" (atributo 'CLASS=editorial'), eles serão formatados de acordo com
as propriedades especificadas se o browser suportar CSS. Se o browser não suportar CSS, a
estrutura será mantida (embora a aparência não seja a ideal) e o usuário conseguirá ter acesso à
informação estruturada, mesmo em um meio de visualização mais limitado.
Quando se usa CSS, são poucas as modificações necessárias no HTML. Não são neces-
sários novos descritores ou extensões. No exemplo acima, teremos que incluir apenas um atri-
buto a mais (o atributo CLASS, do HTML 4) classificando os parágrafos que fazem parte do
nosso 'editorial' (parágrafos que tem uma função diferente dos demais).
A grande vantagem das folhas de estilo é a preservação da estrutura do HTML e um
controle muito melhor do autor sobre a sua aparência na tela do usuário final. Uma página
deverá aparecer da melhor forma possível tanto num PowerPC sofisticado como naquele IBM
PCXT 4.77MHz rodando o Lynx for DOS. O primeiro utilizará todos os recursos gráficos
determinados pelas folhas de estilo. O segundo as ignorará, mas preservará a estrutura e a in-
formação
69
Parte 3 – Folhas de Estilo
As regras podem estar dentro de um arquivo de texto (ISO Latin1 ou ASCII 8-bit) com
extensão ".css" ou embutidas em um arquivo HTML (as várias maneiras de aplicar estilos a um
arquivo HTML serão vistas na seção seguinte).
Um exemplo de folha de estilos com apenas uma regra foi mostrada na seção anterior:
H1 {font-size: 48pt}
Observe que se usa dois-pontos (:) e não igual (=) para aplicar um valor a uma proprie-
dade. Pode haver mais de uma declaração de estilo para um seletor. Isto pode ser feito em ou-
tro bloco. Cada linha acrescenta ou sobrepõe declarações feitas em linhas anteriores:
H1 { font-size: 24pt }
H1 { color: blue }
H1 { font-size: 18pt }
No trecho acima, o texto marcado com <H1> será azul e terá tamanho de 18pt porque a
regra H1 { font-size: 18pt } ocorreu depois da regra H1 { font-size: 24pt }.
70
Parte 3 – Folhas de Estilo
H1 {color: blue;
font-size: 18pt;
font-family: Caslon, serif }
Uma declaração só termina com uma fecha-chaves (}) ou com um ponto-e-vírgula (;).
Dependendo da propriedade, esta pode ter vários valores separados por vírgulas ou valores
compostos com as palavras separadas por espaços:
P { font: 12pt "Times New Roman" bold }
H2 { font-family: Arial, Helvetica, Sans-serif }
As aspas devem ser usadas quando uma palavra que tem espaços precisar ser usada. No
exemplo acima, o nome "Times New Roman" deveria ser tratado como o nome de uma fonte
distinta, e não como três valores, o que ocorreria se as aspas não estivessem presentes.
Assim como um seletor pode ter várias propriedades definidas para ele, um mesmo con-
junto de propriedades pode ser aplicada a um grupo de seletores, separando-os com vírgulas:
H1, H2, H3 { color: blue;
font-size: 18pt;
font-family: Arial, Helvetica, Sans-serif }
71
Parte 3 – Folhas de Estilo
sempre têm menos precedência que os locais (ou seja, os locais podem sobrepor os importa-
dos). A sintaxe da instrução @import é:
@import url(url_da_folha_de_estilos)
Não deve haver outras estruturas (a não ser comentários) na linha onde há uma instru-
ção. Exemplos do uso de @import:
@import url(../basico.css)
@import url(http://longe.com/estilos/basico.css)
Pode-se inserir trechos que serão ignorados pelo browser ao interpretar folhas de estilo
usando blocos de comentário. Comentários em folhas de estilos são iguais a comentários em
linguagens como C ou Java: entre /* e */:
/* este texto é ignorado até que seja encontrado
um asterisco seguido por uma barra */
13.4. Valores
Os valores que são aplicados às propriedades têm uma sintaxe que depende da proprie-
dade que os usa. Propriedades que envolvem tamanho (tamanho de fontes, espaçamento, etc.)
geralmente recebem valores que consistem de um número e uma unidade ou porcentagem. O
sinal de porcentagem ou unidade deve estar junto ao número correspondente sem espaços. Ou
seja, deve-se escrever font-size: 24pt e não font-size: 24 pt.
Cores e arquivos externos podem requerer uma função para serem definidos. São duas
as funções (ou procedimentos) do CSS1: rgb(), que constrói uma cor, e url(), que retorna
um vínculo para uma imagem ou arquivo CSS (usada em instruções @import).
Há quatro maneiras diferentes de especificar cores em CSS: usando o nome do sistema
(red, yellow, blue, black, lightGray), usando seu código RGB hexadecimal (ff0000, ffff00,
0000ff, 34adfc, 80a7a7) ou usando a função rgb(). A função rgb() requer três argumentos
que representam a intensidade dos componentes vermelho (R), verde (G) e azul (B) de uma
cor em forma de luz (não opaca). A intensidade pode ser expressa em valores inteiros de 0
(mínimo) a 255 (máximo) ou em valores fracionários de 0% a 100%. As instruções abaixo de-
finem a mesma cor para um parágrafo:
P {color: red}
P {color: ff0000}
P {color: rgb(100%, 0%, 0%)}
P {color: rgb(255, 0, 0)}
72
Parte 3 – Folhas de Estilo
P {background-image: url(../imagens/tijolos.gif)}
P {background-image: url(http://longe.com/imagens/pedras.png)}
13.5. Herança
Os estilos "herdam" propriedades de várias maneiras. Uma das formas é através da pró-
pria hierarquia do HTML. Se você declara propriedades para BODY, todos os descritores se-
rão afetados a não ser que tenham as suas propriedades redefinidas dentro de um novo bloco
de declarações CSS. Se um <I> está dentro de um <P> e todos os <P> são declarados como
tendo a cor vermelha, o <I> também será vermelho a menos que haja um bloco, posterior
àquela declaração, redefinindo as propriedades de <I>, por exemplo:
P {font: 12pt "Times New Roman" bold;
color: red }
I {color: black }
Se você definir atributos para os descritores <BODY> ou <HTML>, toda a página será
afetada. No exemplo a seguir, uma cor de texto definida para BODY será usada para colorir
todo o texto do documento, a não ser que sejam sobrepostos por uma regra subseqüente:
BODY {color: navy }
H1, H2 {color: yellow }
Os blocos acima farão com que todo o texto seja azul marinho, exceto aquele marcado
com H1 ou H2, que será amarelo.
Os browsers comerciais têm problemas principalmente com a aplicação de estilos em
BODY, portanto, freqüentemente é preciso mexer nas declarações de estilo, acrescentando
propriedades redundantes para adaptá-los à realidade. No site do W3C (http://www.w3.org)
há links para documentos que analisam essas diferenças entre browsers. O site
http://www.w3.org/Styçe/CSS/Test/ é uma plataforma de testes que pode ser usada para
verificar se um browser suporta ou não determinada propriedade.
73
Parte 3 – Folhas de Estilo
a descritores como <B>, <I>, <SMALL>, <A HREF> e <SUP> que servem para formatar
texto dentro de parágrafos, células de tabela, etc.
<DIV> é um descritor que define um bloco ou seção da página. Pode ser usado para di-
vidir a página em seções (e subseções no Internet Explorer) e permitir que sejam aplicados estilos
específicos a essas seções. Descritores de bloco são <P>, <H1>, <TABLE>, etc. <DIV>
define um bloco sem função ou aparência definida. A função e aparência será determinada em
CSS.
<HEAD> (...)
<LINK REL=STYLESHEET
HREF="http://internet-name/mystyles.css"
TYPE="text/css">
</HEAD>
O elemento <LINK> não tem descritor de fechamento e deve ser usado dentro do blo-
co <HEAD>.
Uma segunda forma, permite que estilos sejam aplicados localmente, em uma única pá-
gina, embutindo uma folha de estilos diretamente na página HTML dentro de um bloco for-
mado pelos descritores <STYLE> e </STYLE>. Este método permite que você altere as
propriedades de estilo de uma única página.
A linguagem que é embutida em um bloco <STYLE> é a mesma usada nos arquivos
CSS. <STYLE> ... </STYLE> deve ser usado em <HEAD>. Um atributo type informa o
tipo de arquivo utilizado:
<style type="text/css">
P { font: 12pt "Times New Roman" bold;
color: red }
I { color: black }
</style>
74
Parte 3 – Folhas de Estilo
<style type="text/css">
<!--
P { font: 12pt "Times New Roman" bold;
color: red }
I { color: black }
-->
</style>
Esta propriedade é mais interessante quando aplicada em um descritor que é usado para
agrupar vários outros, como <DIV>, que divide a página em seções ou <SPAN>, usado em
situações bem específicas. Usar estilos desta forma é pouco diferente de usar atributos locais.
Os benefícios de poder mudar a fonte, cores e outras características em todo o documento
ficam mais difíceis.
Pode-se usar um, dois ou os três métodos ao mesmo tempo. As características definidas
pelos mais específicos sobrepõem as definidas pelos mais genéricos. Por exemplo, suponha
que o arquivo estilos.css contenha apenas as seguintes regras:
H1 { color: green;
font-size: 24pt}
P { color: blue}
Suponha que ele seja carregado na página a seguir que possui um bloco <STYLE> com
uma nova definição de P e H1.
<HEAD>
<link rel=STYLESHEET href="estilos.css" type="text/css">
<style type="text/css"><!--
P {font: 12pt "Times New Roman" bold;
color: red }
H1 {color: black }
--></style>
</HEAD>
75
Parte 3 – Folhas de Estilo
Qual estilo irá predominar? Pela regra de que o mais específico sobrepõe o mais geral,
teremos uma página onde os <h1> têm tamanho 24pt (do estilo importado), cor preta (valor
sobreposto pelo estilo da página) e os <p> são vermelhos (sobreposto pelo estilo da página).
Nas duas linhas acima (e nelas apenas), o <h1> será azul marinho (sobrepondo o estilo da
página) e o <p> será preto.
Para alterar as características deste parágrafo agora, pode-se usar o seu ID como seletor,
da forma:
#w779 {color: cyan }
Se isto estiver em um arquivo CSS, todas as páginas que o usam e que tiverem um ele-
mento com o ID #w779 serão afetadas. Se houver mais de um com o mesmo ID apenas o
primeiro será afetado.
Melhor que usar ID é agrupar características semelhantes em classes. Uma classe é uma
variação de um determinado objeto. Por exemplo, um texto teatral pode ter três parágrafos
com apresentação diferente, representando as falas de três personagens. Se quiséssemos que
cada um tivesse uma cor diferente, poderíamos declarar cada um como sendo de uma classe
distinta:
<p class=padre>Eu retiro o que disse, João</p>
<p class=grilo>Retirando ou não retirando, o fato é que o cachorro
enterrou-se em latim</p>
<p class=bispo>Um cachorro? Enterrado em latim? </p>
<p class=padre>Enterrado latindo, Senhor Bispo, Au, au, au, não sa-
be? </p>
Para dar a cada parágrafo de um mesmo personagem (mesma classe) os mesmos atribu-
tos, usa-se:
P.grilo { color: maroon }
P.padre { color: black }
P.bispo { color: navy }
76
Parte 3 – Folhas de Estilo
Desta maneira, todos os textos que deverão ser lidos pelo personagem "Bispo" estarão
em azul marinho.
Uma classe também pode conter descritores diferentes. Se todos os textos citados por
um certo autor tivessem que estar em outra cor ou fonte, poderíamos criar uma classe sem
citar o descritor:
.verde { color: green }
Todos os descritores que tiverem o atributo CLASS=verde serão afetados, por exemplo:
<P class=verde>, <h3 class=verde>, <table class=verde>, etc.
muda as características dos links não-visitados, ativos e visitados. Assim como qualquer seletor,
os links podem ser combinados com outros descritores:
P, A:link, H2 {color: red}
indica que o EM só terá sua cor alterada se ocorrer dentro de um bloco P da classe "verde".
Os seletores de contexto podem ser bem longos:
.bispo P UL UL LI A.classX:link {font-style: italic }
fará com que apenas os links não visitados da classe "classX" que estejam dentro de itens de
lista de segundo nível situados dentro de um parágrafo dentro de um bloco qualquer da classe
"bispo" sejam mostradas em itálico.
77
Parte 3 – Folhas de Estilo
<link>), 2) uma folha de estilos definida pelo usuário (ou leitor da página) e 3) a folha de esti-
los default do browser (que é usada quando outra folha não define os estilos).
Todas estas folhas de estilo diferentes podem provocar uma grande confusão se não
houver uma regra clara de como devem ser consideradas. Ainda há um sétimo fator que é a
formatação introduzida pelo HTML, como nos descritores <font> e atributos align=center.
Listando todas as folhas de estilos que podem afetar um texto, temos:
1. Folha de estilos default do browser: todos os browsers possuem regras comuns para formatar
um texto. A especificação HTML não impõe um formatação padrão. Netscape Navigator por
exemplo usa um fundo cinza como padrão e links azuis sublinhados. Já o Internet Explorer
prefere um fundo branco.
2. Folha de estilos definida pelo leitor: a especificação define a possibilidade do leitor estabelecer
uma folha de estilos própria. Isto é parcialmente conseguido quando o browser permite
que se escolha diferentes cores para fundo, texto e links.
3. Folha de estilos vinculada ao HTML: é a folha de estilos que é importada pelo arquivo HTML
através do descritor de ligação <link>
4. Folha de estilos importada: uma folha de estilos externa (arquivo CSS) pode ser importada de
dentro de outra folha de estilos (um outro arquivo CSS ou bloco <style> no HTML) u-
sando um comando especial @import:
@import url (outroestilo.css)
5. Folha de estilos embutida no HTML: é a folha de estilos que aparece na página HTML entre os
descritores <style> e </style>.
6. Folha de estilos local: é aquela que é aplicada localmente a um descritor usando o atributo
style="lista de declarações".
7. Estilo definido pelo HTML: atributos e descritores podem provocar alterações na aparência
do texto, por exemplo: <font size>, <big>, <body bgcolor>, <p align=center>, etc.
Um browser que siga a especificação CSS à risca obedece a seguinte ordem de precedên-
cia: 1. Local, 2. Embutida, 3. Vinculada, 4. Importada, 5. HTML, 6. Leitor, 7. Browser
Na prática, as coisas não são tão bonitas. No Internet Explorer para Macintosh, a ordem é
respeitada. Na versão do Internet Explorer 3.0 para Windows, os estilos vinculados ao HTML têm
mais importância que os embutidos (o mesmo ocorre com Explorer 4 e Navigator 4). No Netsca-
pe Navigator 4 e Internet Explorer 4, os estilos aplicados via HTML têm precedência máxima (no
Internet Explorer 3 a precedência funciona corretamente, mas não no 4). Com as diferenças exis-
tentes nos browsers de hoje, não vale a pena ainda se aprofundar neste assunto. A solução
ainda é testar, testar, testar antes de colocar no ar.
78
Parte 3 – Folhas de Estilo
14. Fontes
Fontes são estilos de apresentação consistentes aplicados a alfabetos. Uma fonte consiste de
atributos que alteram a aparência de um símbolo, sem alterar o seu significado. Oferecem as
informações necessárias para que uma letra ou símbolo possa ser representado graficamente.
Os atributos essenciais de uma fonte são:
• Seu tipo (ou família)
• Seu tamanho
• Seu estilo (regular, itálico, outline, etc.)
• Seu peso (normal, negrito, light, black)
Para representar qualquer texto, portanto, é preciso escolher uma fonte, ou seja: um tipo,
um estilo, um peso e um tamanho. Letras maiúsculas e minúsculas não são consideradas fontes
diferentes, pois têm um significado distinto.
Os quatro atributos acima podem ser definidos em CSS através das propriedades font-
family, font-size, font-style e font-weight. Não é preciso definir todas pois sempre
têm valores default. CSS oferece ainda font-variant, que permite considerar outras variações
de uma fonte.
14.1. font-family
Uma família de fontes (tipo) é selecionada com a propriedade font-family. Esta pro-
priedade aceita uma lista de valores separados por vírgulas representando nomes de fontes
existentes ou não no sistema do usuário. No final da lista, pode ser incluída uma referência a
uma família genérica, que será usada caso nenhum dos nomes coincida com o nome de uma
fonte do sistema.
A sintaxe é:
font-family: fonte1, fonte2, fonte3, ..., fonte-genérica
Exemplos:
H1 { font-family: garamond }
H2 { font-family: arial, helvetica, sans-serif }
H3 { font-family: courier, "courier new", monospaced }
H4 { font-family: monospaced }
79
Parte 3 – Folhas de Estilo
As fontes sans-serif e monospaced são nomes genéricos. Não se referem a uma fonte
em particular mas a um grupo genérico. Os outros são serif, cursive e fantasy.
O browser usará a primeira fonte da lista se a encontrar. Se não encontrar, irá procurar a
fonte seguinte.
Se o nome de uma fonte tiver mais de uma palavra, este deverá ser colocado entre aspas.
As aspas podem ser apóstrofes simples (') ou aspas duplas ("). Os apóstrofes são necessários
quando for preciso especificar estilos dentro de um atributo HTML:
<p style="font-family: 'times new roman', sans-serif">...</p>
14.2. font-size
O tamanho de uma fonte é alterado usando font-size. Pode ser especificado em valo-
res absolutos ou relativos. Para especificar um valor absoluto, pode-se usar:
font-size: número(pt | px | cm | mm | pc | in)
font-size: xx-small|x-small|small|medium|large|x-large|xx-large
O tamanho também pode ser especificado relativo ao elemento no qual o atual objeto
está contido.
font-size: tamanho_relativo (smaller, larger)
font-size: comprimento (em ou ex)
font-size: porcentagem%
Exemplos:
H1 { font-size: 24pt}
H1 { font-size: x-large}
H1 { font-size: smaller}
H1 { font-size: 1.5em}
H1 { font-size: 150%}
<H1 style="font-size: 1cm">
Os tamanhos de pontos devem ser especificados como valores inteiros (mesmo se usa-
dos cm ou in). Os browsers podem formatar os tamanhos de forma diferente e os mesmos
podem ser alterados pelos usuários nos browsers atuais. As unidades válidas são: pt (pontos),
px (pixels), pc (paicas), cm (centímetros), mm (milímetros) e in (polegadas).
80
Parte 3 – Folhas de Estilo
Os tamanhos absolutos chamados pelo nome (xx-small, etc.) correspondem aos tama-
nhos de 1 a 7 do descritor <font size> e podem variar de acordo com a família de fontes usada
(variam bastante entre plataformas também). Veja um exemplo comparativo e o resultado no
Internet Explorer para Windows:
<style>
p {font-family: serif}
.t1 {font-size: xx-small}
.t2 {font-size: x-small}
.t3 {font-size: small}
.t4 {font-size: medium}
.t5 {font-size: large}
.t6 {font-size: x-large}
.t7 {font-size: xx-large}
</style>
(...)
<p><span class=t1>xx-small</span> |
<span class=t2>x-small</span> |
<span class=t3>small</span> |
<span class=t4>medium</span> |
<span class=t5>large</span> |
<span class=t6>x-large</span> |
<span class=t7>xx-large</span> <br>
<font size="1">size=1</font> |
<font size="2">size=2</font> |
<font size="3">size=3</font> |
<font size="4">size=4</font> |
<font size="5">size=5</font> |
<font size="6">size=6</font> |
<font size="7">size=7</font> |</p>
81
Parte 3 – Folhas de Estilo
<body>
<div class=sec>Este é o texto desta seção.
<h1>2 vezes maior</h1>
<p>Este é um parágrafo da seção. O texto tem 50% do tamanho do texto
da seção.</p>
</div>
As porcentagens de 50% e 200% são aplicadas na fonte atual, que é a fonte do bloco que
contém os dois elementos (<DIV>), e que tem tamanho 18pt. O resultado é que o <H1> será
exibido em tamanho 26pt e <P> em tamanho 9pt.
Exemplos:
H1 { font-style: italic }
I { font-style: normal }
<p style="font-style: oblique">...</p>
Sintaxe:
82
Parte 3 – Folhas de Estilo
Exemplos:
H1 { font-weight: normal }
B { font-weight: 900 }
<b> ... <b style="font-weight: bolder">...</b> ... </b>
A palavra oblique deve fazer com que fontes chamadas de "oblique" (se existirem no
sistema) sejam usadas, assim como ocorre com fontes "italic". A rigor, italic é uma fonte
distinta da normal, e não, meramente uma versão inclinada da mesma. Os browsers, porém,
não encontrando um equivalente "italic", "oblique", "kursiv" ou similar irão inclinar o texto,
simulando um itálico.
Os valores numéricos para font-weight oferecem um controle excepcional sobre o pe-
so da fonte na tela, embora isto esteja limitado aos níveis disponíveis nas fontes instaladas (pa-
ra um mesmo nome de fonte). Na prática, dos 9 níveis disponíveis de peso, se consegue 4 ou 5
níveis diferentes de mais pesado ou mais leve. 700 é o "bold" típico e 400 é o "normal".
O exemplo a seguir ilustra o efeito com a fonte "Tahoma" (Windows):
<style type=text/css>
P {font-family: tahoma;
font-size: 18pt;}
.b100 {font-weight: 100}
.b200 {font-weight: 200}
.b300 {font-weight: 300}
.b400 {font-weight: 400}
.b500 {font-weight: 500}
.b600 {font-weight: 600}
.b700 {font-weight: 700}
.b800 {font-weight: 800}
.b900 {font-weight: 900}
.nor {font-weight: normal}
.bol {font-weight: bold}
</style>
(...)
<p><span class=b100>100</span>
<span class=b200>200</span>
<span class=b300>300</span>
<span class=b400>400</span>
<span class=b500>500</span>
<span class=nor>normal</span><br>
<span class=b600>600</span><br>
<span class=b700>700</span>
<span class=b800>800</span>
<span class=bol>bold</span><br>
<span class=b900>900</span></p>
83
Parte 3 – Folhas de Estilo
Os valores lighter e bolder especificam pesos de fontes relativos a algum valor her-
dado. Eles avançam ou retrocedem na escala de 100 a 900 relativos aos pesos de fontes.
14.4. font-variant
Atualmente a única opção disponível para esta propriedade é small-caps, que deve co-
locar o texto selecionado em maiúsculas, porém menores que as capitulares. Na prática, até as
maiúsculas são reduzidas no Internet Explorer.
Sintaxe:
font-variant: small-caps
Exemplos:
<style>
.sm {font-variant: small-caps}
.tc {font-size: 120%}
</style>
</head>
<body>
<p>Um texto simples sem SmallCaps...</p>
<p class=sm>Um texto simples com SmallCaps...</p>
<p>Os small-caps acima, no Internet Explorer 4, são falsos. As le-
tras maiúsculas não deveriam ter sido afetadas.</p>
<p><span class=sm><span class=tc>U</span>m texto simples com <span
class=tc>S</span>mall<span class=tc>C</span>aps... verdadei-
ros</span>.</p>
84
Parte 3 – Folhas de Estilo
Exemplos:
H1 {font: italic 700 24pt Tahoma, Arial, sans-serif }
85
Parte 3 – Folhas de Estilo
15.1. text-transform
A propriedade text-transform realiza transformações no formato caixa-alta ou caixa-
baixa do texto. Sintaxe:
text-transform: capitalize
text-transform: uppercase
text-transform: lowercase
text-transform: none (valor default)
Exemplos:
H1 {text-transform: capitalize}
Capitalize coloca a primeira letra de cada palavra em maiúsculas. Uppercase coloca tudo
em maiúsculas e lowercase coloca tudo em minúsculas. None remove qualquer transformação
deixando o texto da forma como foi definido antes das transformações.
<style>
p {font-weight: bold}
span {font-weight: normal}
.non {text-transform: none}
.upp {text-transform: uppercase}
.cap {text-transform: capitalize}
.low {text-transform: lowercase}
</style>
(...)
<p>Sem transformação:
<span class=non>É preciso conhecer bem HTML e CSS</span></p>
86
Parte 3 – Folhas de Estilo
<p>Uppercase:
<span class=upp>É preciso conhecer bem HTML e CSS</span></p>
<p>Capitalize:
<span class=cap>É preciso conhecer bem HTML e CSS</span></p>
<p>Lowercase:
<span class=low>É preciso conhecer bem HTML e CSS</span></p>
15.2. text-decoration
A propriedade text-decoration permite colocar (ou tirar) sublinhados, linhas sobre e
atravessando o texto, etc. Sintaxe:
text-decoration: underline (default em links)
text-decoration: overline
text-decoration: line-through
text-decoration: blink
text-decoration: none (default)
Exemplos:
h1 {text-decoration: overline}
<a href="algumlugar.html"
style="text-decoration: none">Link sem sublinhado</a>
<style>
.und {text-decoration: underline}
.ovr {text-decoration: overline}
.blk {text-decoration: blink}
.lin {text-decoration: line-through}
.non, .non a {text-decoration: none}
</style>
(...)
<p><span class=und>Underline. <a href="#">Link</a></span> -----
<span class=ovr>Overline. <a href="#">Link</a></span></p>
<p><span class=blk>Blink. <a href="#">Link</a></span> -----
<span class=lin>Line-through. <a href="#">Link</a></span> -----
<span class=non>None. <a href="#">Link</a></span></p>
87
Parte 3 – Folhas de Estilo
88
Parte 3 – Folhas de Estilo
15.4. text-indent
A propriedade text-indent se aplica a elementos de bloco e realiza a endentação da
primeira linha. A sua sintaxe é:
text-indent: comprimento
text-indent: porcentagem
A porcentagem ocorre em relação à largura do elemento que contém o seletor. Pode ser
a largura total da página, a largura da célula de uma tabela, etc. Exemplos:
P { text-indent: 1 cm }
P {text-indent: 50% }
<P style="text-indent: 1in">
A endentação tratada aqui é apenas para uma linha de texto. Para endentar blocos intei-
ros, deve-se usar as margens (em seção mais a frente).
15.5. line-height
Este atributo é usado para controlar o espaço
que existe antes e depois de uma linha de texto. Ela
especifica a altura total de uma linha de texto. Se você
tem um texto de 10 pontos e uma line-height de
20 pontos (line-height: 2), haverá 5 pontos antes e
5 pontos depois de cada linha de texto (espaço du-
plo). O espaço simples equivale geralmente a line-
height: 120%. Uma line-height menor que o
tamanho da fonte produzirá sobreposição de texto.
Embora ambos os browsers mais populares su-
portem este recurso, ele não ocorre da maneira corre-
ta. Os browsers não acrescentam a mesma quantidade
de espaço antes e depois como esperado.
Um bug no Internet Explorer 3 faz com que ele
interprete valores absolutos (sem unidade) como va-
lores em pixels. Por exemplo, 1.5 indica espaço 1 e
meio ou 150%. No Internet Explorer 3 as linhas ficam
sobrepostas pois o browser interpreta a unidade co-
mo 1.5 pixels. Evite, portanto, usar valores absolutos
(use porcentagens).
A sintaxe é:
line-height: número_absoluto
line-height: comprimento ou unidade
line-height: porcentagem
89
Parte 3 – Folhas de Estilo
Exemplos:
H1 {line-height: 0 } // sobreposição de linhas
H1 {line-height: 2 } // espaço duplo
H1 {line-height: 0.3em }
H1 {line-height: 150% } // espaço 1 e meio
Se você usar um valor percentual menor que 100%, um valor absoluto menor que 1 ou
uma unidade menor que o tamanho da fonte, haverá sobreposição de linhas.
15.6. letter-spacing
A propriedade letter-spacing altera o
espaço entre as letras. A sua sintaxe é:
letter-spacing: normal
letter-spacing: comprimento
90
Parte 3 – Folhas de Estilo
16. Cores
Cor Nome Cód. Decimal Cód. Hexa Cor Nome Cód. Decimal Cód. Hexa
red 255, 0, 0 ff0000 maroon 128, 0, 0 800000
lime 0, 255, 0 00ff00 green 0, 128, 0 008000
blue 0, 0, 255 0000ff navy 0, 0, 128 000080
yellow 255, 255, 0 ffff00 olive 128, 128, 0 808000
aqua 0, 255, 255 00ffff teal 0, 128, 128 008080
fuchsia 255, 0, 255 ff00ff purple 128, 0, 128 800080
white 255, 255, 255 ffffff silver 192, 192, 192 c0c0c0
black 0, 0, 0 000000 gray 0, 0, 0 808080
Há muito mais cores com nomes suportadas pelo Netscape e Internet Explorer. Estas lista-
das são as únicas que fazem parte da especificação oficial do HTML 4. São todas "seguras", ou
seja, fazem parte da paleta básica de 216 cores.
91
Parte 3 – Folhas de Estilo
16.1. color
Define a cor do texto. A propriedade color substitui totalmente o descritor <FONT
COLOR> com vantagens. Pode ser aplicada localmente em um descritor (usando o atributo
style) ou globalmente na página e no site, como qualquer outra propriedade de estilo.
A sintaxe da propriedade color é:
color: nome_de_cor
color: #número_hexadecimal
color: rgb(vermelho, verde, azul)
Exemplos:
H1 { color: green }
P { color: #fe0da4 }
EM { color: rgb (255, 127, 63) }
<EM STYLE="color: rgb (100%, 50%, 25%)">
Os nomes são qualquer nome válido de cor. Se o browser não encontrar o nome ao qual
o estilo se refere, deve exibir a cor default (ou herdada). O símbolo "#" é opcional no código
hexadecimal. A intensidade da cor pode ser expressa em valores absolutos (0 a 255) ou percen-
tagens (0.0-100.0%).
16.2. background-color
As cores de fundo de qualquer elemento podem ser alteradas através da propriedade
background-color. A sintaxe é:
Exemplos:
H1 { background-color: green }
P { background-color: #fe0da4 }
EM { background-color: rgb (255, 127, 63) }
<EM STYLE="background-color: rgb (100%, 50%, 25%)">
92
Parte 3 – Folhas de Estilo
16.3. background-image
Com background-image é possível atribuir a qualquer elemento HTML uma imagem
que será exibida no fundo, assim como as cores de fundo. A sintaxe é:
background-image: none (valor default)
background-image: url(URL_da_imagem)
Exemplos:
H1 { background-image: url(http://www.xyz.com/abc.jpg) }
B {background-image: url(../monstro.gif) navy
<TD STYLE="background-image: url(dinheiro.gif)">...</TD>
As URLs são relativas à localização do arquivo que contém a folha de estilos (pode ser a
própria página ou não). A cor de backup é usada para 'vazar' pelas partes transparentes da ima-
gem ou prevenir contra o não carregamento do fundo (para permitir a leitura em fundo escuro
pode-se usar preto como cor de backup de uma imagem escura).
16.4. background-repeat
CSS permite mais controle ainda sobre a imagem de fundo, facilitando a maneira como a
mesma irá se repetir. A propriedade é background-repeat. Sintaxe:
background-repeat: repeat (default)
background-repeat: repeat-x
background-repeat: repeat-y
background-repeat: no-repeat
Exemplos:
BODY {background-image: url(china.jpg);
background-repeat: repeat-x }
TABLE{background-image: url(corinthians.gif)
background-repeat: no-repeat }
O valor repeat é default e faz com que a imagem ocupe toda a tela. repeat-x faz com
que a imagem seja repetida apenas horizontalmente e repeat-y faz com que ela seja repetida
apenas verticalmente. no-repeat faz com que a imagem não seja repetida de forma alguma
(aparecerá uma imagem apenas no canto superior esquerdo).
Para fazer a imagem aparecer em outros lugares, pode-se usar as propriedades de posi-
cionamento do fundo da tela.
93
Parte 3 – Folhas de Estilo
irá ou não se mover com o texto ou ficar fixo na tela. A segunda permite o posicionamento do
fundo em um local exato da tela. Infelizmente essas duas propriedades não têm suporte uni-
versal pelos browsers comerciais (apenas o Internet Explorer os suporta).
Sintaxe:
background-attachment: fixed
background-attachment: scroll
Exemplo:
BODY {background-image: url (china.jpg);
background-attachment: fixed }
Sintaxe:
background-position: porcentagem_horiz% porcentagem_vert%
background-position: comprimento comprimento
background-position: posição_vertical posição_horizontal
Exemplos:
BODY {background-image: url(china.jpg);
background-repeat: no-repeat;
background-position: 50% 100% }
94
Parte 3 – Folhas de Estilo
Os valores de posição são palavras-chave usadas também aos pares. São equivalentes das
porcentagens básicas de alinhamento. O primeiro par pode ter left (0%), right (100%) ou
center (50%). O segundo par pode ser top (0%), bottom (100%) ou center (50%).
16.6. background
A propriedade background pode ser usada para definir várias características de fundo de
uma única vez. Na sintaxe abaixo, a ordem dos fatores é importante. A sua sintaxe é:
background: background-color background-image background-repeat
background-attachment background-position
Deve haver pelo menos um valor definido, mas qualquer número de valores pode ser a-
tribuído de uma vez.
Exemplos:
BODY {background: url(../duke.gif) white no-repeat fixed 50% 25%}
95
Parte 3 – Folhas de Estilo
17. Propriedades de
classificação
17.1. display
Esta propriedade define como um elemento é mostrado. A propriedade none desliga o e-
lemento e fecha o espaço que o objeto antes ocupava (torna o objeto invisível). block abre
uma nova caixa onde o objeto é posicionado, relativo aos outros blocos, list-item é um blo-
co com um marcador de lista e inline define um elemento como parte de um bloco.
Sintaxe:
display: block | inline | list-item | none
Exemplo:
P {display: list-item}
IMG {display: none} // desliga todas as imagens
17.2. white-space
Define como o espaço em branco do elemento é gerenciado (se as linhas devem ser
quebradas para que apareçam na tela ou não (nowrap) ou se os espaços em branco, tabulações,
etc. devem ser considerados (pre).
white-space: normal | pre | nowrap
96
Parte 3 – Folhas de Estilo
17.3. list-style
Esta propriedade e as propriedades list-style-type, list-style-image e list-
style-position definem atributos para objetos de lista, como tipo de marcador, imagem do
marcador e posição. Esses elementos não são suportados no Netscape.
list-style-type: disc | circle | square | decimal | lower-roman
upper-roman | lower-alpha | upper-alpha | none
list-style-image: url(url_da_imagem)
list-style-position: inside | outside
Exemplo:
list-style-image: url(bullet.gif)
Exemplo:
list-style: url(bullet.gif)
list-style: square outside
97
Parte 3 – Folhas de Estilo
Uma “caixa” é uma propriedade de qualquer elemento de bloco no HTML (H1, P, DIV, etc.
que automaticamente definem seu próprio bloco ou parágrafo). A caixa de um objeto consiste das
partes seguintes:
• O elemento em si (texto, imagem)
• As margens internas do elemento (padding)
• A borda em torno das margens internas (border)
• A margem em torno da borda (margin)
Todo elemento de bloco tem essas propriedades. As propriedades CSS que veremos nes-
ta seção mostrarão como alterá-las. A cor e tamanho da borda podem ser alterados assim co-
mo o fundo (como vimos na seção anterior). A margem externa é sempre transparente mas a
margem interna herda a cor de fundo do objeto.
Também são alteráveis as margens internas e externas, larguras de borda, cor de borda e
estilo de borda de cada um dos quatro lados de uma caixa individualmente, identificados pelos
nomes top, right, bottom e left:
98
Parte 3 – Folhas de Estilo
Exemplo:
margin-top: 1cm; margin-left: 12pt;
A propriedade margin afeta vários aspectos das margens externas de uma vez só. A or-
dem dos fatores é importante. Podem ser incluídos todos quatro valores, apenas um (todas as
margens iguais) ou dois (margens horizontais e verticais). Sintaxe:
margin: margin-top margin-right margin-bottom margin-left
margin: margin-top% margin-right% margin-bottom% margin-left%
margin: espaço_vertical espaço_horizontal
margin: margem_de_todos_os_lados
Exemplos:
margin: 5cm // vale para as quatro margens
margin: 5cm 2cm // 5cm margs verticais, 2cm margs horizontais
margin: 5cm 3cm 2cm 1cm // sent. horário: top, right, bottom, left
// (em cima 5; à direita 3; em baixo 2;...
As margens internas (padding) são definidas usando a propriedade padding (que afeta
todas as margens internas ao mesmo tempo) ou as propriedades padding-top, padding-
bottom, padding-right e padding-left.
Sintaxe:
padding-top: comprimento | porcentagem %
padding-bottom: comprimento | porcentagem %
padding-right: comprimento | porcentagem %
padding-left: comprimento | porcentagem %
A propriedade padding afeta vários aspectos das margens internas de uma vez só. A or-
dem dos fatores é importante. Podem ser incluídos todos quatro valores ou apenas um. Sintaxe:
padding: padding-top padding-right padding-bottom padding-left
padding: padding-top% padding-right% padding-bottom% padding-left%
99
Parte 3 – Folhas de Estilo
18.2. border-width
Pode se controlar vários aspectos das bordas como a sua espessura em cada um dos qua-
tro lados, suas cores (também cada um dos quatro lados) e estilos (idem). Isto pode ser feito de
diversas maneiras. Para que as bordas apareçam é preciso primeiro que o estilo (border-
style) seja definido. Por exemplo:
border-style: solid
A espessura das bordas pode ser controlada através da propriedade border-width, afe-
tando as espessuras de todos os lados da borda, ou individualmente através de border-top-
width, border-bottom-width, border-right-width e border-left-width. Sintaxe:
Exemplos:
border-bottom-width: thick; border-right-width: 5.5px;
border-left-width: 0.2cm
As propriedades das bordas podem ser tratadas em grupo, com border-width. A or-
dem dos fatores é importante. Podem ser incluídos todos os quatro valores, dois (referindo-se
às bordas horizontais e verticais) ou apenas um (afetando todas as bordas). Sintaxe:
border-width: border-top-width border-right-width
border-bottom-width border-left-width
Exemplos:
border-width: 5cm // vale para as quatro bordas
border-width: 5cm 2cm // 5cm verticais, 2cm horizontais
border-width: 5cm 3cm 2cm 1cm // horário: top, right, bottom, left
18.3. border-color
A propriedade border-color é um atalho que permite que se altere a cor de uma ou
de todas as quatro bordas ao redor de um elemento que também podem ser definidas indivi-
dualmente através de border-top-color, border-bottom-color, border-right-color e
border-left-color.
100
Parte 3 – Folhas de Estilo
Exemplos:
border-bottom-color: rgb(231,45,112); border-right-color: 0fa97b;
border-left-color: navy
As propriedades das bordas podem ser tratadas em grupo, com border-color. A or-
dem dos fatores é importante. Podem ser incluídos todos os quatro valores, dois (referindo-se
às bordas horizontais e verticais) ou apenas um (afetando todas as bordas). Sintaxe:
border-color: border-top-color border-right-color
border-bottom-color border-left-color
Cada um dos border-xxx-color acima é uma cor (RGB, hexadecimal ou nome). Pode-
se alterar todas as bordas de uma vez, apenas as duas verticais e horizontais ou as quatro indi-
vidualmente.
Exemplos:
border-color: red // red para as quatro bordas
border-color: rgb(255, 0, 0) // red
border-color: rgb(100%, 0, 0) // red
border-color: red 0000ff // red verticais, 0000ff horizontais
border-color: red blue yellow cyan // 4 cores sentido horário
18.4. border-style
O estilo de cada uma das quatro bordas pode ser alterado com border-style. Também
é possível defini-los individualmente usando border-top-style, border-bottom-style,
border-right-style e border-left-style. São vários os estilos disponíveis (tracejado,
pontilhado, várias versões de 3D, etc.).
border-top-style: none | dotted | dashed | solid | double |
groove | ridge | inset | outset
border-bottom-style: nome de estilo (um dos nomes acima)
border-right-style: nome de estilo
border-left-style: nome de estilo
Exemplos:
border-bottom-style: none border-right-style: solid;
border-left-style: inset
As propriedades das bordas podem ser tratadas em grupo, com border-style. A or-
dem dos fatores é importante. Podem ser incluídos todos os quatro valores, dois (referindo-se
às bordas horizontais e verticais) ou apenas um (afetando todas as bordas). Sintaxe:
border-style: border-top-style border-right-style
border-bottom-style border-left-style
101
Parte 3 – Folhas de Estilo
Exemplos:
border-style: solid none inset outset;
border-style: solid
border-style: inset outset
Cada um dos border-xxx-style acima é um dos seguintes valores: none, dotted, da-
shed, solid, double, groove, ridge, inset, outset. No Netscape e Internet Explorer, funcio-
nam os estilos solid, inset (efeito baixo-relevo) e outset (efeito alto-relevo). No Netscape
solid é default mas no Explorer, o default é none, portanto, uma borda não aparece se a propri-
edade border-style não for definida antes.
18.5. border
As propriedades border-top, border-bottom, border-left e border-right agru-
pam as propriedades de cor, estilo e espessura para cada uma das quatro bordas.
border-top: border-width border-style border-color
border-bottom: border-width border-style border-color
border-left: border-width border-style border-color
border-right: border-width border-style border-color
A propriedade border é uma forma reduzida de definir tudo isto de uma vez só para to-
das as bordas e de forma idêntica (não é possível especificar valores diferentes para as bordas
neste caso). Todos os itens não precisam aparecer, mas a ordem dos fatores é importante:
border: border-width border-style border-color
18.7. float
A propriedade float permite que um bloco qualquer seja posicionado à direita ou es-
querda da janela do browser, fazendo com que o texto restante flua em sua volta. Permite que
qualquer bloco se comporte como uma imagem que faz uso dos atributos align=left e a-
lign=right no HTML. Sintaxe:
102
Parte 3 – Folhas de Estilo
18.8. clear
E finalmente, para evitar que um bloco flua em torno de uma imagem ou bloco que uti-
liza a propriedade float, existe a propriedade clear, que deve ser atribuída a um bloco ou
parágrafo que é afetado pela flutuação de um bloco. Faz a mesma coisa que o atributo clear,
usado no <BR> em HTML, só que aqui ela é suportada em qualquer elemento (bloco ou não).
clear: none | left | right | both
103
Parte 3 – Folhas de Estilo
19. Posicionamento
104
Parte 3 – Folhas de Estilo
<div class="imagem1">
<img src="T1.gif" width=150 height=72 border=1> 1 Posição 0 0
</div>
<div class="imagem2">
<img src="T2.gif" width=150 height=72 border=1> 2 Posição 0 200
</div>
<div class="imagem3">
<img src="T3.gif" width=150 height=72 border=1> 3 Posição -25 -25
</div>
<div class="imagem4">
<img src="T4.gif" width=150 height=72 border=1> 4 Posição 100 0
</div>
Aplicando a seguinte folha de estilos para posicionar as quatro imagens relativamente à sua
localização original obtemos a imagem ao lado. Os retângulos claros indicam a posição original
da imagem:
DIV.imagem1 {
position: relative;
top: 0px;
left: 0px;
}
DIV.imagem2 {
position: relative;
top: 0px;
left: 200px;
}
DIV.imagem3 {
position: relative;
top: -25px;
left: -25px;
}
DIV.imagem4 {
position: relative;
top: 100px;
left: 0px;
}
105
Parte 3 – Folhas de Estilo
DIV.imagem1 {
position: absolute;
top: 0px;
left: 250px;
}
DIV.imagem2 {
position: absolute;
top: 100px;
left: 0px;
}
DIV.imagem3 {
position: absolute;
top: 160px;
left: 120px;
}
DIV.imagem4 {
position: absolute;
top: 200px;
left: -80px;
}
19.2. z-index
A propriedade z-index permite ordenar os objetos em camadas. É um eixo de
profundidade. Para usá-la, basta definir em cada objeto:
z-index: número
onde número é a camada de exibição. Quanto maior o número, mais alta a camada. o corres-
ponde à camada do texto. Se um objeto tiver z-index menor que zero aparecerá atrás do
texto. Se z-index for maior que zero, aparecerá na frente. Quando não é definido ou quando
z-index: 0 o bloco ocupará a mesma camada que o texto.
19.3. visibility
Esta propriedade serve para tornar um bloco visível ou invisível. Difere de display porque
não remove o espaço antes ocupado pela imagem:
visibility: hidden | visible
Exemplo:
IMG {visibility: hidden} // torna invisíveis todas as imagens
106
Parte 3 – Folhas de Estilo
20. Exercícios
2. Qual dos seguintes trechos de código é ilegal dentro de um arquivo .css? Marque uma.
a) span.value {color: maroon}
b) /* <H1>Titulo</H1> */
c) @import url(http://ww.estilos.org/estilo.css);
d) <STYLE>
e) Nenhuma das alternativas é ilegal dentro de um arquivo CSS.
3. Qual das regras abaixo, de uma folha de estilos, declara que os parágrafos e células de da-
dos de tabelas terão texto vermelho?
a) P TD {color: red}
b) P: TD {color: ff0000}
c) P, TD {color: rgb(100%, 0%, 0%)}
d) P; TD {color: rgb(255, 0, 0)}
e) P, TD {color=red}
4. Qual das declarações abaixo, contida em uma página HTML, a vincula à folha de estilos
basico.css, localizada no mesmo diretório que a página?
a) <LINK REL=StyleSheet HREF="basico.css">
b) <LINK REL=StyleSheet SRC="basico.css">
c) <A HREF="basico.css" TITLE="StyleSheet">Folha de estilos</A>
d) <FRAME SRC="basico.css" REL="StyleSheet">
e) <A HREF="basico.css">Folha de estilos</A>
107
Parte 3 – Folhas de Estilo
<div>
<p>Parágrafo</p>
</div>
Quais declarações abaixo, em um bloco <STYLE> do arquivo que contém o trecho acima,
farão com que o texto do parágrafo tenha tamanho 10pt em um browser que suporte fo-
lhas de estilo? Marque uma ou mais.
a) div {font-size: 20pt}
p {font-size: 50%}
b) div {font-size: 10pt}
c) p {font-size: 10pt}
d) div {font-size: 5pt}
p {font-size: 100%}
e) p div {font-size: 10pt}
6. Considere a seguinte folha de estilos, com uma única regra, vinculada a uma página HTML.
P {color: green}
Dentro dessa página, logo depois da instrução que vincula o estilo à página, há um bloco
<STYLE>, com a seguinte regra:
P {color: red}
A página possui dez parágrafos. Um deles atribui um estilo local usando o atributo STYLE,
da forma:
<P STYLE="color: blue">Parágrafo</P>
Supondo que a página seja visualizada em um browser que suporte folhas de estilo CSS,
qual é a cor da maior parte dos parágrafos dessa página?
a) azul (blue)
b) vermelha (red)
c) verde (green)
d) preta (black)
e) indefinida
108
Parte 3 – Folhas de Estilo
Quais das regras de estilo abaixo fará com que o parágrafo seja exibido na cor azul, em um
browser que suporte folhas de estilos CSS?
a) P {color: blue}
b) .sec2 {color: blue}
c) P.novo {color: blue}
d) .sec2 .novo {color: blue}
e) P.sec2 {color: blue}
9. Qual das regras abaixo retira o sublinhado apenas dos links visitados? Marque uma.
a) a: visited {text-decoration: none}
b) a, visited {text-decoration: none}
c) a.visited {text-decoration: none}
d) a visited {text-decoration: none}
e) Nenhuma das regras anteriores.
Conceitos básicos
1. Crie uma folha de estilos, chame-a de basico.css, e a carregue no arquivo StyleTest.html.
2. Nesta folha de estilos, usando o mínimo de declarações possível, declare:
a) que todo H1 tenha fonte Tahoma, ou sans-serif, se Tahoma não existir
b) que todo o texto do corpo (BODY) do arquivo tenha tamanho 10 pontos
c) que todos os H1, H2 e H3 sejam vermelhos
d) que os H1 tenham tamanho 24 pontos
e) que os H2 tenham tamanho 18 pontos
f) que os H3 tenham tamanho 14 pontos
3. Mude a cor do fundo da página para azul marinho (navy) e a cor default do texto para bran-
co em uma única declaração.
109
Parte 3 – Folhas de Estilo
4. Faça com que todo texto marcado em itálico apareça em azul ciano (cyan).
6. Faça com que o primeiro parágrafo do arquivo StyleTest.html tenha texto verde.
7. Faça com que a célula do meio da tabela de StyleTest.html tenha texto vermelho sobre
fundo amarelo (a tabela 3x3 encontra-se no meio da página).
8. Defina classes sec2, sec3, sec31 e sec32 para as seções (<DIV>) do documento Style-
Test.html. As seções estão indicadas em comentários HTML (por exemplo: <!--Seção 2 --
>). Aplique um fundo diferente (imagem ou cor) nessas seções para diferenciá-las das ou-
tras.
10. Faça com que o link ativo (active) fique em negrito; que o link normal tenha tamanho 10pt
e que mostre fundo amarelo quando o mouse estiver sobre ele (hover); e que o link visita-
do não tenha mais cor de fundo mas recupere o sublinhado. Obs: Para fazer um link ainda
não visitado, faça um link para qualquer recurso do sistema de arquivos; para ver o link ati-
vo, clique no link e segure o mouse.
Fontes
Crie uma nova folha de estilos (fontes.css) para aplicar fontes. Vincule (LINK) ou importe-a
(@import) em seus arquivos.
110
Parte 3 – Folhas de Estilo
12. a) Aplique Verdana como fonte default em todo o site. Garanta que, se Verdana não existir,
Arial será usada, e se esta não existir, será usada a default sans-serif. Para testar, mude os
nomes das primeiras fontes para nomes desconhecidos do sistema. b) Teste a compatibili-
dade dos dois browsers em relação ao suporte de fontes com nomes longos (entre aspas)
em folhas de estilo locais e remotas.
13. Faça com que os <B> de seus parágrafos sejam 20% maiores que o texto normal destes
parágrafos.
14. a) Aplique um espaçamento de 1 cm entre palavras de um parágrafo seu texto (isto poderá
não funcionar devido à falta de suporte dos browsers). b) Aplique um espaçamento de 1
cm entre as letras de outro parágrafo. Teste nos dois browsers.
17. Elimine o espaçamento entre os parágrafos (<P>) usando {margin-top: 0pt}, endente a
primeira linha e coloque todos os seus parágrafos, com exceção dos parágrafos da terceira
seção, com alinhamento justificado. O alinhamento deve ser aplicado apenas nos parágra-
fos e não em listas ou tabelas.
Cores
18. Experimente com cores, aplicando cores em textos, backgrounds de diversos componentes
da página, inclusive formulários (<INPUT> e <SELECT>). Use as três formas (url(r, g,
b), rrggbb e nomes) e veja como ocorre o suporte dos browsers em folhas de estilo locais e
externas. Dica: crie uma folha de estilos só para este exercício.
20. Numa outra folha de estilos (para este exercício), posicione a imagem no centro da página,
sem repetições e uma outra imagem no centro da tabela, também sem repetições.
21. Posicione (outra folha de estilos) o rabbit.gif (ou outra imagem) em uma posição a 4cm da
margem esquerda e a 7cm da margem superior. Na seção 2 (sec2), posicione bart.gif, repe-
111
Parte 3 – Folhas de Estilo
Posicionamento e Layout
22. Remova o espaço entre todos os parágrafos de StyleTest.html. Aplique um text-indent de
1cm em cada parágrafo.
23. Faça com que os blocos (parágrafos e cabeçalhos) da seção 3.1 e 3.2 (DIV) tenham 0,3 cm
de margem esquerda e direita, e 0,5cm de margem superior e inferior, em relação às bordas
da seção.
24. Faça com que as seções 3.2 e 3.1 tenham uma margem externa de 0,5 cm em relação à se-
ção 3.
25. Aplique uma borda azul, sólida, de 3mm acima da seção 2 (<DIV>), uma outra, também
de 3mm, abaixo, na cor amarelo. Dos lados, coloque bordas vermelhas, de 5mm.
26. Aplique uma borda verde, de 4mm à esquerda de todos os parágrafos da seção 2. Entre a
borda e o texto deve haver um espaço de 5mm. Entre a borda e a margem da página, mais
5mm (sem levar em conta o offset).
27. Sem usar tabelas, aplique uma largura máxima de 500 pixels em toda a página.
28. Faça com que a seção 3.1 tenha largura máxima de 220 pixels e flutue para a direita, dei-
xando o restante do texto fluir em volta dela.
Posicionamento absoluto
29. Monte o quebra-cabeças do exercício 1, da parte 4 (Recursos Avançados) sem usar tabelas
(usando apenas posicionamento de folhas de estilo).
30. Diagrame a página do exercício 2, da parte 4, sem usar tabelas (usando apenas posiciona-
mento de folhas de estilo).
112
de
4 – Folhas de Estilo
4.1. Introdução
4.1.1. O que são folhas de estilo?
Uma folha de estilos é um conjunto de regras que informa a um programa, responsável pela
formatação de um documento, como organizar a página, como posicionar e expor o texto e,
dependendo de onde é aplicada, como organizar uma coleção de documentos.
A maior parte dos programas de editoração eletrônica e processadores de texto moder-
nos trabalham com folhas de estilos. O processo consiste em definir um rótulo (nome do esti-
lo) para um determinado parágrafo e em seguida alterar os seus atributos. Todo parágrafo que
for rotulado com aquele estilo passará a exibir as características definidas anteriormente. Qual-
quer alteração nos atributos de um estilo afetará todos os parágrafos que estiverem rotulados
com ele.
Esta descrição, que se aplica a estilos em processadores de texto e programas de editora-
ção eletrônica, também vale para a Web. Na Web, os "parágrafos" são blocos marcados por
descritores HTML como <H1>, <P>, etc. Para fazer com que todos os blocos de textos mar-
cados com <H1> em um documento sejam exibidos em tamanho de 48 pontos, basta definir a
regra:
H1 {font-size: 48pt}
O restante deste artigo tratará dos fundamentos da tecnologia de folhas de estilos aplicáveis ao
HTML, chamada de Cascading Style Sheets (folhas de estilo em cascata), mostrando como estabelecer
as regras de estilo para um bloco de texto, uma página ou todo um site. Seções específicas abordarão
cores, imagens, tipologia e posicionamento. Este texto não é completo. Omitimos propriedades e
recursos não suportados nos browsers e nos limitamos àqueles recursos que constam da especifica-
ção CSS1 (não incluímos recursos proprietários nem a maior parte das novidades do CSS2 que não
funcionam nos browsers disponíveis no mercado). Para uma abordagem mais completa, consulte a
documentação oficial do W3C: http://www.w3.org/Style/.
4-2
4 – Folhas de Estilo
4-3
4 – Folhas de Estilo
O uso das folhas de estilo depende da boa estrutura do HTML. A linguagem CSS (é uma
linguagem declarativa) trabalha com os elementos tratando-os como "objetos". Cada parágrafo
<P>, cada <H1>, cada <IMG> é um objeto. Objetos podem ser agrupados de várias formas.
A cada objeto ou grupo de objetos podem ser atribuídas propriedades de estilo definidas em
regras. Por exemplo, considere a seguinte regra: "todo objeto P da classe 'editorial' será azul,
terá tamanho de 12 pontos, espaçamento duplo, alinhamento pela direita e usará a família de
fontes Arial, ou, se esta não existir, Helvetica, ou então a fonte sem-serifa default do sistema".
Um arquivo CSS com apenas a regra acima conteria o texto:
P.editorial {color: 0000ff;
font-size: 12pt;
line-height: 24pt;
text-align: right;
font-family: arial, helvetica, sans-serif}
Se a folha de estilos acima for aplicada a uma página que possua parágrafos <P> rotula-
dos com o nome "editorial" (atributo 'CLASS=editorial'), eles serão formatados de acordo com
as propriedades especificadas se o browser suportar CSS. Se o browser não suportar CSS, a
estrutura será mantida (embora a aparência não seja a ideal) e o usuário conseguirá ter acesso à
informação estruturada, mesmo em um meio de visualização mais limitado.
Quando se usa CSS, são poucas as modificações necessárias no HTML. Não são neces-
sários novos descritores ou extensões. No exemplo acima, teremos que incluir apenas um atri-
buto a mais (o atributo CLASS, do HTML 4) classificando os parágrafos que fazem parte do
nosso 'editorial' (parágrafos que tem uma função diferente dos demais).
A grande vantagem das folhas de estilo é a preservação da estrutura do HTML e um
controle muito melhor do autor sobre a sua aparência na tela do usuário final. Uma página
deverá aparecer da melhor forma possível tanto num PowerPC sofisticado como naquele IBM
PCXT 4.77MHz rodando o Lynx for DOS. O primeiro utilizará todos os recursos gráficos
determinados pelas folhas de estilo. O segundo as ignorará, mas preservará a estrutura e a in-
formação
4-4
4 – Folhas de Estilo
As regras podem estar dentro de um arquivo de texto (ISO Latin1 ou ASCII 8-bit) com
extensão ".css" ou embutidas em um arquivo HTML (as várias maneiras de aplicar estilos a um
arquivo HTML serão vistas na seção seguinte).
Um exemplo de folha de estilos com apenas uma regra foi mostrada na seção anterior:
H1 {font-size: 48pt}
Observe que se usa dois-pontos (:) e não igual (=) para aplicar um valor a uma proprie-
dade. Pode haver mais de uma declaração de estilo para um seletor. Isto pode ser feito em ou-
tro bloco. Cada linha acrescenta ou sobrepõe declarações feitas em linhas anteriores:
H1 { font-size: 24pt }
H1 { color: blue }
H1 { font-size: 18pt }
No trecho acima, o texto marcado com <H1> será azul e terá tamanho de 18pt porque a
regra H1 { font-size: 18pt } ocorreu depois da regra H1 { font-size: 24pt }.
H1 {color: blue;
font-size: 18pt;
font-family: Caslon, serif }
Uma declaração só termina com uma fecha-chaves (}) ou com um ponto-e-vírgula (;).
Dependendo da propriedade, esta pode ter vários valores separados por vírgulas ou valores
compostos com as palavras separadas por espaços:
P { font: 12pt "Times New Roman" bold }
H2 { font-family: Arial, Helvetica, Sans-serif }
4-5
4 – Folhas de Estilo
As aspas devem ser usadas quando uma palavra que tem espaços precisar ser usada. No
exemplo acima, o nome "Times New Roman" deveria ser tratado como o nome de uma fonte
distinta, e não como três valores, o que ocorreria se as aspas não estivessem presentes.
Assim como um seletor pode ter várias propriedades definidas para ele, um mesmo con-
junto de propriedades pode ser aplicada a um grupo de seletores, separando-os com vírgulas:
H1, H2, H3 { color: blue;
font-size: 18pt;
font-family: Arial, Helvetica, Sans-serif }
Não deve haver outras estruturas (a não ser comentários) na linha onde há uma instru-
ção. Exemplos do uso de @import:
@import url(../basico.css)
@import url(http://longe.com/estilos/basico.css)
Pode-se inserir trechos que serão ignorados pelo browser ao interpretar folhas de estilo
usando blocos de comentário. Comentários em folhas de estilos são iguais a comentários em
linguagens como C ou Java: entre /* e */:
/* este texto é ignorado até que seja encontrado
um asterisco seguido por uma barra */
4.2.4. Valores
Os valores que são aplicados às propriedades têm uma sintaxe que depende da proprie-
dade que os usa. Propriedades que envolvem tamanho (tamanho de fontes, espaçamento, etc.)
geralmente recebem valores que consistem de um número e uma unidade ou porcentagem. O
4-6
4 – Folhas de Estilo
sinal de porcentagem ou unidade deve estar junto ao número correspondente sem espaços. Ou
seja, deve-se escrever font-size: 24pt e não font-size: 24 pt.
Cores e arquivos externos podem requerer uma função para serem definidos. São duas
as funções (ou procedimentos) do CSS1: rgb(), que constrói uma cor, e url(), que retorna
um vínculo para uma imagem ou arquivo CSS (usada em instruções @import).
Há quatro maneiras diferentes de especificar cores em CSS: usando o nome do sistema
(red, yellow, blue, black, lightGray), usando seu código RGB hexadecimal (ff0000, ffff00,
0000ff, 34adfc, 80a7a7) ou usando a função rgb(). A função rgb() requer três argumentos
que representam a intensidade dos componentes vermelho (R), verde (G) e azul (B) de uma
cor em forma de luz (não opaca). A intensidade pode ser expressa em valores inteiros de 0
(mínimo) a 255 (máximo) ou em valores fracionários de 0% a 100%. As instruções abaixo de-
finem a mesma cor para um parágrafo:
P {color: red}
P {color: ff0000}
P {color: rgb(100%, 0%, 0%)}
P {color: rgb(255, 0, 0)}
4.2.5. Herança
Os estilos "herdam" propriedades de várias maneiras. Uma das formas é através da pró-
pria hierarquia do HTML. Se você declara propriedades para BODY, todos os descritores se-
rão afetados a não ser que tenham as suas propriedades redefinidas dentro de um novo bloco
de declarações CSS. Se um <I> está dentro de um <P> e todos os <P> são declarados como
tendo a cor vermelha, o <I> também será vermelho a menos que haja um bloco, posterior
àquela declaração, redefinindo as propriedades de <I>, por exemplo:
P {font: 12pt "Times New Roman" bold;
color: red }
I {color: black }
4-7
4 – Folhas de Estilo
Se você definir atributos para os descritores <BODY> ou <HTML>, toda a página será
afetada. No exemplo a seguir, uma cor de texto definida para BODY será usada para colorir
todo o texto do documento, a não ser que sejam sobrepostos por uma regra subseqüente:
BODY {color: navy }
H1, H2 {color: yellow }
Os blocos acima farão com que todo o texto seja azul marinho, exceto aquele marcado
com H1 ou H2, que será amarelo.
Os browsers comerciais têm problemas principalmente com a aplicação de estilos em
BODY, portanto, freqüentemente é preciso mexer nas declarações de estilo, acrescentando
propriedades redundantes para adaptá-los à realidade. No site do W3C (http://www.w3.org)
há links para documentos que analisam essas diferenças entre browsers. O site
http://www.w3.org/Styçe/CSS/Test/ é uma plataforma de testes que pode ser usada para
verificar se um browser suporta ou não determinada propriedade.
4-8
4 – Folhas de Estilo
lo a partir de todos os documentos HTML onde o estilo será aplicado. Não é preciso compilar
ou qualquer coisa do tipo. Depois que as definições estiverem prontas, o estilo estará pronto
para ser usado. Pode ser importado através do descritor LINK:
<HEAD>
(...)
<LINK REL=STYLESHEET
HREF="http://internet-name/mystyles.css"
TYPE="text/css">
</HEAD>
O elemento <LINK> não tem descritor de fechamento e deve ser usado dentro do blo-
co <HEAD>.
Uma segunda forma, permite que estilos sejam aplicados localmente, em uma única pá-
gina, embutindo uma folha de estilos diretamente na página HTML dentro de um bloco for-
mado pelos descritores <STYLE> e </STYLE>. Este método permite que você altere as
propriedades de estilo de uma única página.
A linguagem que é embutida em um bloco <STYLE> é a mesma usada nos arquivos
CSS. <STYLE> ... </STYLE> deve ser usado em <HEAD>. Um atributo type informa o
tipo de arquivo utilizado:
<style type="text/css">
P { font: 12pt "Times New Roman" bold;
color: red }
I { color: black }
</style>
<style type="text/css">
<!--
P { font: 12pt "Times New Roman" bold;
color: red }
I { color: black }
-->
</style>
4-9
4 – Folhas de Estilo
Esta propriedade é mais interessante quando aplicada em um descritor que é usado para
agrupar vários outros, como <DIV>, que divide a página em seções ou <SPAN>, usado em
situações bem específicas. Usar estilos desta forma é pouco diferente de usar atributos locais.
Os benefícios de poder mudar a fonte, cores e outras características em todo o documento
ficam mais difíceis.
Pode-se usar um, dois ou os três métodos ao mesmo tempo. As características definidas
pelos mais específicos sobrepõem as definidas pelos mais genéricos. Por exemplo, suponha
que o arquivo estilos.css contenha apenas as seguintes regras:
H1 { color: green;
font-size: 24pt}
P { color: blue}
Suponha que ele seja carregado na página a seguir que possui um bloco <STYLE> com
uma nova definição de P e H1.
<HEAD>
<link rel=STYLESHEET
href="estilos.css"
type="text/css">
4-10
4 – Folhas de Estilo
Qual estilo irá predominar? Pela regra de que o mais específico sobrepõe o mais geral,
teremos uma página onde os <h1> têm tamanho 24pt (do estilo importado), cor preta (valor
sobreposto pelo estilo da página) e os <p> são vermelhos (sobreposto pelo estilo da página).
Nas duas linhas acima (e nelas apenas), o <h1> será azul marinho (sobrepondo o estilo da
página) e o <p> será preto.
Para alterar as características deste parágrafo agora, pode-se usar o seu ID como seletor,
da forma:
#w779 {color: cyan }
Se isto estiver em um arquivo CSS, todas as páginas que o usam e que tiverem um ele-
mento com o ID #w779 serão afetadas. Se houver mais de um com o mesmo ID apenas o
primeiro será afetado.
Melhor que usar ID é agrupar características semelhantes em classes. Uma classe é uma
variação de um determinado objeto. Por exemplo, um texto teatral pode ter três parágrafos
com apresentação diferente, representando as falas de três personagens. Se quiséssemos que
cada um tivesse uma cor diferente, poderíamos declarar cada um como sendo de uma classe
distinta:
<p class=padre>Eu retiro o que disse, João</p>
<p class=grilo>Retirando ou não retirando, o fato é que o cachorro
enterrou-se em latim</p>
<p class=bispo>Um cachorro? Enterrado em latim? </p>
4-11
4 – Folhas de Estilo
<p class=padre>Enterrado latindo, Senhor Bispo, Au, au, au, não sa-
be? </p>
Para dar a cada parágrafo de um mesmo personagem (mesma classe) os mesmos atribu-
tos, usa-se:
P.grilo { color: maroon }
P.padre { color: black }
P.bispo { color: navy }
Desta maneira, todos os textos que deverão ser lidos pelo personagem "Bispo" estarão
em azul marinho.
Uma classe também pode conter descritores diferentes. Se todos os textos citados por
um certo autor tivessem que estar em outra cor ou fonte, poderíamos criar uma classe sem
citar o descritor:
.verde { color: green }
Todos os descritores que tiverem o atributo CLASS=verde serão afetados, por exemplo:
<P class=verde>, <h3 class=verde>, <table class=verde>, etc.
muda as características dos links não-visitados, ativos e visitados. Assim como qualquer seletor,
os links podem ser combinados com outros descritores:
P, A:link, H2 {color: red}
indica que o EM só terá sua cor alterada se ocorrer dentro de um bloco P da classe "verde".
Os seletores de contexto podem ser bem longos:
.bispo P UL UL LI A.classX:link {font-style: italic }
4-12
4 – Folhas de Estilo
fará com que apenas os links não visitados da classe "classX" que estejam dentro de itens de
lista de segundo nível situados dentro de um parágrafo dentro de um bloco qualquer da classe
"bispo" sejam mostradas em itálico.
5. Folha de estilos embutida no HTML: é a folha de estilos que aparece na página HTML entre os
descritores <style> e </style>.
6. Folha de estilos local: é aquela que é aplicada localmente a um descritor usando o atributo
style="lista de declarações".
7. Estilo definido pelo HTML: atributos e descritores podem provocar alterações na aparência
do texto, por exemplo: <font size>, <big>, <body bgcolor>, <p align=center>, etc.
Um browser que siga a especificação CSS à risca obedece a seguinte ordem de precedên-
cia: 1. Local, 2. Embutida, 3. Vinculada, 4. Importada, 5. HTML, 6. Leitor, 7. Browser
Na prática, as coisas não são tão bonitas. No Internet Explorer para Macintosh, a ordem é
respeitada. Na versão do Internet Explorer 3.0 para Windows, os estilos vinculados ao HTML têm
4-13
4 – Folhas de Estilo
mais importância que os embutidos (o mesmo ocorre com Explorer 4 e Navigator 4). No Netsca-
pe Navigator 4 e Internet Explorer 4, os estilos aplicados via HTML têm precedência máxima (no
Internet Explorer 3 a precedência funciona corretamente, mas não no 4). Com as diferenças exis-
tentes nos browsers de hoje, não vale a pena ainda se aprofundar neste assunto. A solução
ainda é testar, testar, testar antes de colocar no ar.
4.3. Fontes
Fontes são estilos de apresentação consistentes aplicados a alfabetos. Uma fonte consiste de
atributos que alteram a aparência de um símbolo, sem alterar o seu significado. Oferecem as
informações necessárias para que uma letra ou símbolo possa ser representado graficamente.
Os atributos essenciais de uma fonte são:
• Seu tipo (ou família)
• Seu tamanho
• Seu estilo (regular, itálico, outline, etc.)
• Seu peso (normal, negrito, light, black)
Para representar qualquer texto, portanto, é preciso escolher uma fonte, ou seja: um tipo,
um estilo, um peso e um tamanho. Letras maiúsculas e minúsculas não são consideradas fontes
diferentes, pois têm um significado distinto.
Os quatro atributos acima podem ser definidos em CSS através das propriedades font-
family, font-size, font-style e font-weight. Não é preciso definir todas pois sempre
têm valores default. CSS oferece ainda font-variant, que permite considerar outras variações
de uma fonte.
4.3.1. font-family
Uma família de fontes (tipo) é selecionada com a propriedade font-family. Esta pro-
priedade aceita uma lista de valores separados por vírgulas representando nomes de fontes
existentes ou não no sistema do usuário. No final da lista, pode ser incluída uma referência a
uma família genérica, que será usada caso nenhum dos nomes coincida com o nome de uma
fonte do sistema.
A sintaxe é:
font-family: fonte1, fonte2, fonte3, ..., fonte-genérica
Exemplos:
H1 { font-family: garamond }
H2 { font-family: arial, helvetica, sans-serif }
H3 { font-family: courier, "courier new", monospaced }
H4 { font-family: monospaced }
4-14
4 – Folhas de Estilo
As fontes sans-serif e monospaced são nomes genéricos. Não se referem a uma fonte
em particular mas a um grupo genérico. Os outros são serif, cursive e fantasy.
O browser usará a primeira fonte da lista se a encontrar. Se não encontrar, irá procurar a
fonte seguinte.
Se o nome de uma fonte tiver mais de uma palavra, este deverá ser colocado entre aspas.
As aspas podem ser apóstrofes simples (') ou aspas duplas ("). Os apóstrofes são necessários
quando for preciso especificar estilos dentro de um atributo HTML:
<p style="font-family: 'times new roman', sans-serif">...</p>
4.3.2. font-size
O tamanho de uma fonte é alterado usando font-size. Pode ser especificado em valo-
res absolutos ou relativos. Para especificar um valor absoluto, pode-se usar:
font-size: número(pt | px | cm | mm | pc | in)
font-size: xx-small|x-small|small|medium|large|x-large|xx-large
O tamanho também pode ser especificado relativo ao elemento no qual o atual objeto
está contido.
font-size: tamanho_relativo (smaller, larger)
font-size: comprimento (em ou ex)
font-size: porcentagem%
Exemplos:
H1 { font-size: 24pt}
H1 { font-size: x-large}
H1 { font-size: smaller}
H1 { font-size: 1.5em}
H1 { font-size: 150%}
<H1 style="font-size: 1cm">
Os tamanhos de pontos devem ser especificados como valores inteiros (mesmo se usa-
dos cm ou in). Os browsers podem formatar os tamanhos de forma diferente e os mesmos
podem ser alterados pelos usuários nos browsers atuais. As unidades válidas são: pt (pontos),
px (pixels), pc (paicas), cm (centímetros), mm (milímetros) e in (polegadas).
4-15
4 – Folhas de Estilo
Os tamanhos absolutos chamados pelo nome (xx-small, etc.) correspondem aos tama-
nhos de 1 a 7 do descritor <font size> e podem variar de acordo com a família de fontes usada
(variam bastante entre plataformas também). Veja um exemplo comparativo e o resultado no
Internet Explorer para Windows:
<style>
p {font-family: serif}
.t1 {font-size: xx-small}
.t2 {font-size: x-small}
.t3 {font-size: small}
.t4 {font-size: medium}
.t5 {font-size: large}
.t6 {font-size: x-large}
.t7 {font-size: xx-large}
</style>
(...)
<p><span class=t1>xx-small</span> |
<span class=t2>x-small</span> |
<span class=t3>small</span> |
<span class=t4>medium</span> |
<span class=t5>large</span> |
<span class=t6>x-large</span> |
<span class=t7>xx-large</span> <br>
<font size="1">size=1</font> |
<font size="2">size=2</font> |
<font size="3">size=3</font> |
<font size="4">size=4</font> |
<font size="5">size=5</font> |
<font size="6">size=6</font> |
<font size="7">size=7</font> |</p>
4-16
4 – Folhas de Estilo
<body>
<div class=sec>Este é o texto desta seção.
<h1>2 vezes maior</h1>
<p>Este é um parágrafo da seção. O texto tem 50% do tamanho do texto
da seção.</p>
</div>
As porcentagens de 50% e 200% são aplicadas na fonte atual, que é a fonte do bloco que
contém os dois elementos (<DIV>), e que tem tamanho 18pt. O resultado é que o <H1> será
exibido em tamanho 26pt e <P> em tamanho 9pt.
Exemplos:
H1 { font-style: italic }
I { font-style: normal }
<p style="font-style: oblique">...</p>
Sintaxe:
4-17
4 – Folhas de Estilo
Exemplos:
H1 { font-weight: normal }
B { font-weight: 900 }
<b> ... <b style="font-weight: bolder">...</b> ... </b>
A palavra oblique deve fazer com que fontes chamadas de "oblique" (se existirem no
sistema) sejam usadas, assim como ocorre com fontes "italic". A rigor, italic é uma fonte
distinta da normal, e não, meramente uma versão inclinada da mesma. Os browsers, porém,
não encontrando um equivalente "italic", "oblique", "kursiv" ou similar irão inclinar o texto,
simulando um itálico.
Os valores numéricos para font-weight oferecem um controle excepcional sobre o pe-
so da fonte na tela, embora isto esteja limitado aos níveis disponíveis nas fontes instaladas (pa-
ra um mesmo nome de fonte). Na prática, dos 9 níveis disponíveis de peso, se consegue 4 ou 5
níveis diferentes de mais pesado ou mais leve. 700 é o "bold" típico e 400 é o "normal".
O exemplo a seguir ilustra o efeito com a fonte "Tahoma" (Windows):
<style type=text/css>
P {font-family: tahoma;
font-size: 18pt;}
.b100 {font-weight: 100}
.b200 {font-weight: 200}
.b300 {font-weight: 300}
.b400 {font-weight: 400}
.b500 {font-weight: 500}
.b600 {font-weight: 600}
.b700 {font-weight: 700}
.b800 {font-weight: 800}
.b900 {font-weight: 900}
.nor {font-weight: normal}
.bol {font-weight: bold}
</style>
(...)
<p><span class=b100>100</span>
<span class=b200>200</span>
<span class=b300>300</span>
<span class=b400>400</span>
<span class=b500>500</span>
<span class=nor>normal</span><br>
<span class=b600>600</span><br>
<span class=b700>700</span>
<span class=b800>800</span>
<span class=bol>bold</span><br>
<span class=b900>900</span></p>
4-18
4 – Folhas de Estilo
Os valores lighter e bolder especificam pesos de fontes relativos a algum valor her-
dado. Eles avançam ou retrocedem na escala de 100 a 900 relativos aos pesos de fontes.
4.3.4. font-variant
Atualmente a única opção disponível para esta propriedade é small-caps, que deve co-
locar o texto selecionado em maiúsculas, porém menores que as capitulares. Na prática, até as
maiúsculas são reduzidas no Internet Explorer.
Sintaxe:
font-variant: small-caps
Exemplos:
<style>
.sm {font-variant: small-caps}
.tc {font-size: 120%}
</style>
</head>
<body>
<p>Um texto simples sem SmallCaps...</p>
<p class=sm>Um texto simples com SmallCaps...</p>
<p>Os small-caps acima, no Internet Explorer 4, são falsos. As le-
tras maiúsculas não deveriam ter sido afetadas.</p>
<p><span class=sm><span class=tc>U</span>m texto simples com <span
class=tc>S</span>mall<span class=tc>C</span>aps... verdadei-
ros</span>.</p>
4-19
4 – Folhas de Estilo
Exemplos:
H1 {font: italic 700 24pt Tahoma, Arial, sans-serif }
4.4.1. text-transform
A propriedade text-transform realiza transformações no formato caixa-alta ou caixa-
baixa do texto. Sintaxe:
text-transform: capitalize
text-transform: uppercase
text-transform: lowercase
text-transform: none (valor default)
Exemplos:
H1 {text-transform: capitalize}
Capitalize coloca a primeira letra de cada palavra em maiúsculas. Uppercase coloca tudo
em maiúsculas e lowercase coloca tudo em minúsculas. None remove qualquer transformação
deixando o texto da forma como foi definido antes das transformações.
<style>
p {font-weight: bold}
span {font-weight: normal}
.non {text-transform: none}
.upp {text-transform: uppercase}
4-20
4 – Folhas de Estilo
4.4.2. text-decoration
A propriedade text-decoration permite colocar (ou tirar) sublinhados, linhas sobre e
atravessando o texto, etc. Sintaxe:
text-decoration: underline (default em links)
text-decoration: overline
text-decoration: line-through
text-decoration: blink
text-decoration: none (default)
Exemplos:
h1 {text-decoration: overline}
<a href="algumlugar.html"
style="text-decoration: none">Link sem sublinhado</a>
<style>
.und {text-decoration: underline}
.ovr {text-decoration: overline}
.blk {text-decoration: blink}
.lin {text-decoration: line-through}
.non, .non a {text-decoration: none}
</style>
4-21
4 – Folhas de Estilo
(...)
<p><span class=und>Underline. <a href="#">Link</a></span> -----
<span class=ovr>Overline. <a href="#">Link</a></span></p>
<p><span class=blk>Blink. <a href="#">Link</a></span> -----
<span class=lin>Line-through. <a href="#">Link</a></span> -----
<span class=non>None. <a href="#">Link</a></span></p>
4-22
4 – Folhas de Estilo
4.4.4. text-indent
A propriedade text-indent se aplica a elementos de bloco e realiza a endentação da
primeira linha. A sua sintaxe é:
text-indent: comprimento
text-indent: porcentagem
A porcentagem ocorre em relação à largura do elemento que contém o seletor. Pode ser
a largura total da página, a largura da célula de uma tabela, etc. Exemplos:
P { text-indent: 1 cm }
P {text-indent: 50% }
<P style="text-indent: 1in">
A endentação tratada aqui é apenas para uma linha de texto. Para endentar blocos intei-
ros, deve-se usar as margens (em seção mais a frente).
4.4.5. line-height
Este atributo é usado para controlar o espaço
que existe antes e depois de uma linha de texto. Ela
especifica a altura total de uma linha de texto. Se você
tem um texto de 10 pontos e uma line-height de
20 pontos (line-height: 2), haverá 5 pontos antes e
5 pontos depois de cada linha de texto (espaço du-
plo). O espaço simples equivale geralmente a line-
height: 120%. Uma line-height menor que o
tamanho da fonte produzirá sobreposição de texto.
Embora ambos os browsers mais populares su-
portem este recurso, ele não ocorre da maneira corre-
ta. Os browsers não acrescentam a mesma quantidade
de espaço antes e depois como esperado.
Um bug no Internet Explorer 3 faz com que ele
interprete valores absolutos (sem unidade) como va-
lores em pixels. Por exemplo, 1.5 indica espaço 1 e
meio ou 150%. No Internet Explorer 3 as linhas ficam
sobrepostas pois o browser interpreta a unidade co-
mo 1.5 pixels. Evite, portanto, usar valores absolutos
(use porcentagens).
A sintaxe é:
4-23
4 – Folhas de Estilo
line-height: número_absoluto
line-height: comprimento ou unidade
line-height: porcentagem
Exemplos:
H1 {line-height: 0 } // sobreposição de linhas
H1 {line-height: 2 } // espaço duplo
H1 {line-height: 0.3em }
H1 {line-height: 150% } // espaço 1 e meio
Se você usar um valor percentual menor que 100%, um valor absoluto menor que 1 ou
uma unidade menor que o tamanho da fonte, haverá sobreposição de linhas.
4.4.6. letter-spacing
A propriedade letter-spacing altera o
espaço entre as letras. A sua sintaxe é:
letter-spacing: normal
letter-spacing: comprimento
4.5. Cores
Com as propriedades de cores, podemos controlar as cores de várias partes da página, do
texto, do fundo da página e de elementos HTML. Além disso, podemos aplicar imagens de
fundo em qualquer elemento, não só no elemento BODY como já se faz em HTML.
As cores definidas em CSS, assim como em HTML, podem ser especificadas por um
número em hexadecimal (representando um código RGB) ou por um nome. Além dessas duas
formas, podem ainda ser especificadas por três números decimais, representando também o
código RGB da cor.
4-24
4 – Folhas de Estilo
Os códigos RGB informam a quantidade de luz vermelha, verde e azul que compõe a
cor, respectivamente. Cada cor pode ter 16 níveis de intensidade: 0 a 256 (00 a FF, em hexade-
cimal). O total de combinações possíveis é de 16.777.216 cores.
A exibição correta das cores depende da capacidade do vídeo onde serão vistas. Poucos
sistemas têm capacidade de mostrar mais que 65.536 cores simultâneas. A maioria só mostra
256.
A tabela abaixo relaciona em negrito os 16 nomes padrão, suportados por todos os
browsers que exibem cores, e seus respectivos códigos RGB em hexadecimal e decimal.
Cor Nome Cód. Decimal Cód. Hexa Cor Nome Cód. Decimal Cód. Hexa
red 255, 0, 0 ff0000 maroon 128, 0, 0 800000
lime 0, 255, 0 00ff00 green 0, 128, 0 008000
blue 0, 0, 255 0000ff navy 0, 0, 128 000080
yellow 255, 255, 0 ffff00 olive 128, 128, 0 808000
aqua 0, 255, 255 00ffff teal 0, 128, 128 008080
fuchsia 255, 0, 255 ff00ff purple 128, 0, 128 800080
white 255, 255, 255 ffffff silver 192, 192, 192 c0c0c0
black 0, 0, 0 000000 gray 0, 0, 0 808080
Há muito mais cores com nomes suportadas pelo Netscape e Internet Explorer. Estas lista-
das são as únicas que fazem parte da especificação oficial do HTML 4. São todas "seguras", ou
seja, fazem parte da paleta básica de 216 cores.
4.5.1. color
Define a cor do texto. A propriedade color substitui totalmente o descritor <FONT
COLOR> com vantagens. Pode ser aplicada localmente em um descritor (usando o atributo
style) ou globalmente na página e no site, como qualquer outra propriedade de estilo.
A sintaxe da propriedade color é:
color: nome_de_cor
color: #número_hexadecimal
color: rgb(vermelho, verde, azul)
Exemplos:
H1 { color: green }
P { color: #fe0da4 }
EM { color: rgb (255, 127, 63) }
<EM STYLE="color: rgb (100%, 50%, 25%)">
Os nomes são qualquer nome válido de cor. Se o browser não encontrar o nome ao qual
o estilo se refere, deve exibir a cor default (ou herdada). O símbolo "#" é opcional no código
4-25
4 – Folhas de Estilo
hexadecimal. A intensidade da cor pode ser expressa em valores absolutos (0 a 255) ou percen-
tagens (0.0-100.0%).
4.5.2. background-color
As cores de fundo de qualquer elemento podem ser alteradas através da propriedade
background-color. A sintaxe é:
Exemplos:
H1 { background-color: green }
P { background-color: #fe0da4 }
EM { background-color: rgb (255, 127, 63) }
<EM STYLE="background-color: rgb (100%, 50%, 25%)">
4.5.3. background-image
Com background-image é possível atribuir a qualquer elemento HTML uma imagem
que será exibida no fundo, assim como as cores de fundo. A sintaxe é:
background-image: none (valor default)
background-image: url(URL_da_imagem)
Exemplos:
H1 { background-image: url(http://www.xyz.com/abc.jpg) }
B {background-image: url(../monstro.gif) navy
<TD STYLE="background-image: url(dinheiro.gif)">...</TD>
As URLs são relativas à localização do arquivo que contém a folha de estilos (pode ser a
própria página ou não). A cor de backup é usada para 'vazar' pelas partes transparentes da ima-
gem ou prevenir contra o não carregamento do fundo (para permitir a leitura em fundo escuro
pode-se usar preto como cor de backup de uma imagem escura).
4.5.4. background-repeat
CSS permite mais controle ainda sobre a imagem de fundo, facilitando a maneira como a
mesma irá se repetir. A propriedade é background-repeat. Sintaxe:
4-26
4 – Folhas de Estilo
Exemplos:
BODY {background-image: url(china.jpg);
background-repeat: repeat-x }
TABLE{background-image: url(corinthians.gif)
background-repeat: no-repeat }
O valor repeat é default e faz com que a imagem ocupe toda a tela. repeat-x faz com
que a imagem seja repetida apenas horizontalmente e repeat-y faz com que ela seja repetida
apenas verticalmente. no-repeat faz com que a imagem não seja repetida de forma alguma
(aparecerá uma imagem apenas no canto superior esquerdo).
Para fazer a imagem aparecer em outros lugares, pode-se usar as propriedades de posi-
cionamento do fundo da tela.
Exemplo:
BODY {background-image: url (china.jpg);
background-attachment: fixed }
Sintaxe:
background-position: porcentagem_horiz% porcentagem_vert%
background-position: comprimento comprimento
background-position: posição_vertical posição_horizontal
Exemplos:
BODY {background-image: url(china.jpg);
background-repeat: no-repeat;
background-position: 50% 100% }
4-27
4 – Folhas de Estilo
4.5.6. background
A propriedade background pode ser usada para definir várias características de fundo de
uma única vez. Na sintaxe abaixo, a ordem dos fatores é importante. A sua sintaxe é:
background: background-color background-image background-repeat
background-attachment background-position
Deve haver pelo menos um valor definido, mas qualquer número de valores pode ser a-
tribuído de uma vez.
Exemplos:
BODY {background: url(../duke.gif) white no-repeat fixed 50% 25%}
4-28
4 – Folhas de Estilo
4.6.1. display
Esta propriedade define como um elemento é mostrado. A propriedade none desliga o e-
lemento e fecha o espaço que o objeto antes ocupava (torna o objeto invisível). block abre
uma nova caixa onde o objeto é posicionado, relativo aos outros blocos, list-item é um blo-
co com um marcador de lista e inline define um elemento como parte de um bloco.
Sintaxe:
display: block | inline | list-item | none
Exemplo:
P {display: list-item}
IMG {display: none} // desliga todas as imagens
4.6.2. white-space
Define como o espaço em branco do elemento é gerenciado (se as linhas devem ser
quebradas para que apareçam na tela ou não (nowrap) ou se os espaços em branco, tabulações,
etc. devem ser considerados (pre).
white-space: normal | pre | nowrap
4.6.3. list-style
Esta propriedade e as propriedades list-style-type, list-style-image e list-
style-position definem atributos para objetos de lista, como tipo de marcador, imagem do
marcador e posição. Esses elementos não são suportados no Netscape.
list-style-type: disc | circle | square | decimal | lower-roman
upper-roman | lower-alpha | upper-alpha | none
list-style-image: url(url_da_imagem)
list-style-position: inside | outside
Exemplo:
list-style-image: url(bullet.gif)
4-29
4 – Folhas de Estilo
Exemplo:
list-style: url(bullet.gif)
list-style: square outside
Todo elemento de bloco tem essas propriedades. As propriedades CSS que veremos nes-
ta seção mostrarão como alterá-las. A cor e tamanho da borda podem ser alterados assim co-
mo o fundo (como vimos na seção anterior). A margem externa é sempre transparente mas a
margem interna herda a cor de fundo do objeto.
Também são alteráveis as margens internas e externas, larguras de borda, cor de borda e
estilo de borda de cada um dos quatro lados de uma caixa individualmente, identificados pelos
nomes top, right, bottom e left:
4-30
4 – Folhas de Estilo
Exemplo:
margin-top: 1cm; margin-left: 12pt;
A propriedade margin afeta vários aspectos das margens externas de uma vez só. A or-
dem dos fatores é importante. Podem ser incluídos todos quatro valores, apenas um (todas as
margens iguais) ou dois (margens horizontais e verticais). Sintaxe:
margin: margin-top margin-right margin-bottom margin-left
margin: margin-top% margin-right% margin-bottom% margin-left%
margin: espaço_vertical espaço_horizontal
margin: margem_de_todos_os_lados
Exemplos:
margin: 5cm // vale para as quatro margens
margin: 5cm 2cm // 5cm margs verticais, 2cm margs horizontais
margin: 5cm 3cm 2cm 1cm // sent. horário: top, right, bottom, left
// (em cima 5; à direita 3; em baixo 2;...
As margens internas (padding) são definidas usando a propriedade padding (que afeta
todas as margens internas ao mesmo tempo) ou as propriedades padding-top, padding-
bottom, padding-right e padding-left.
Sintaxe:
padding-top: comprimento | porcentagem %
padding-bottom: comprimento | porcentagem %
padding-right: comprimento | porcentagem %
padding-left: comprimento | porcentagem %
A propriedade padding afeta vários aspectos das margens internas de uma vez só. A or-
dem dos fatores é importante. Podem ser incluídos todos quatro valores ou apenas um. Sintaxe:
padding: padding-top padding-right padding-bottom padding-left
padding: padding-top% padding-right% padding-bottom% padding-left%
4-31
4 – Folhas de Estilo
4.7.2. border-width
Pode se controlar vários aspectos das bordas como a sua espessura em cada um dos qua-
tro lados, suas cores (também cada um dos quatro lados) e estilos (idem). Isto pode ser feito de
diversas maneiras. Para que as bordas apareçam é preciso primeiro que o estilo (border-
style) seja definido. Por exemplo:
border-style: solid
A espessura das bordas pode ser controlada através da propriedade border-width, afe-
tando as espessuras de todos os lados da borda, ou individualmente através de border-top-
width, border-bottom-width, border-right-width e border-left-width. Sintaxe:
Exemplos:
border-bottom-width: thick; border-right-width: 5.5px;
border-left-width: 0.2cm
As propriedades das bordas podem ser tratadas em grupo, com border-width. A or-
dem dos fatores é importante. Podem ser incluídos todos os quatro valores, dois (referindo-se
às bordas horizontais e verticais) ou apenas um (afetando todas as bordas). Sintaxe:
border-width: border-top-width border-right-width
border-bottom-width border-left-width
Exemplos:
border-width: 5cm // vale para as quatro bordas
border-width: 5cm 2cm // 5cm verticais, 2cm horizontais
border-width: 5cm 3cm 2cm 1cm // horário: top, right, bottom, left
4.7.3. border-color
A propriedade border-color é um atalho que permite que se altere a cor de uma ou
de todas as quatro bordas ao redor de um elemento que também podem ser definidas indivi-
dualmente através de border-top-color, border-bottom-color, border-right-color e
border-left-color.
4-32
4 – Folhas de Estilo
Exemplos:
border-bottom-color: rgb(231,45,112); border-right-color: 0fa97b;
border-left-color: navy
As propriedades das bordas podem ser tratadas em grupo, com border-color. A or-
dem dos fatores é importante. Podem ser incluídos todos os quatro valores, dois (referindo-se
às bordas horizontais e verticais) ou apenas um (afetando todas as bordas). Sintaxe:
border-color: border-top-color border-right-color
border-bottom-color border-left-color
Cada um dos border-xxx-color acima é uma cor (RGB, hexadecimal ou nome). Pode-
se alterar todas as bordas de uma vez, apenas as duas verticais e horizontais ou as quatro indi-
vidualmente.
Exemplos:
border-color: red // red para as quatro bordas
border-color: rgb(255, 0, 0) // red
border-color: rgb(100%, 0, 0) // red
border-color: red 0000ff // red verticais, 0000ff horizontais
border-color: red blue yellow cyan // 4 cores sentido horário
4.7.4. border-style
O estilo de cada uma das quatro bordas pode ser alterado com border-style. Também
é possível defini-los individualmente usando border-top-style, border-bottom-style,
border-right-style e border-left-style. São vários os estilos disponíveis (tracejado,
pontilhado, várias versões de 3D, etc.).
border-top-style: none | dotted | dashed | solid | double |
groove | ridge | inset | outset
border-bottom-style: nome de estilo (um dos nomes acima)
border-right-style: nome de estilo
border-left-style: nome de estilo
Exemplos:
border-bottom-style: none border-right-style: solid;
border-left-style: inset
As propriedades das bordas podem ser tratadas em grupo, com border-style. A or-
dem dos fatores é importante. Podem ser incluídos todos os quatro valores, dois (referindo-se
às bordas horizontais e verticais) ou apenas um (afetando todas as bordas). Sintaxe:
border-style: border-top-style border-right-style
border-bottom-style border-left-style
4-33
4 – Folhas de Estilo
Exemplos:
border-style: solid none inset outset;
border-style: solid
border-style: inset outset
Cada um dos border-xxx-style acima é um dos seguintes valores: none, dotted, da-
shed, solid, double, groove, ridge, inset, outset. No Netscape e Internet Explorer, funcio-
nam os estilos solid, inset (efeito baixo-relevo) e outset (efeito alto-relevo). No Netscape
solid é default mas no Explorer, o default é none, portanto, uma borda não aparece se a propri-
edade border-style não for definida antes.
4.7.5. border
As propriedades border-top, border-bottom, border-left e border-right agru-
pam as propriedades de cor, estilo e espessura para cada uma das quatro bordas.
border-top: border-width border-style border-color
border-bottom: border-width border-style border-color
border-left: border-width border-style border-color
border-right: border-width border-style border-color
A propriedade border é uma forma reduzida de definir tudo isto de uma vez só para to-
das as bordas e de forma idêntica (não é possível especificar valores diferentes para as bordas
neste caso). Todos os itens não precisam aparecer, mas a ordem dos fatores é importante:
border: border-width border-style border-color
4.7.7. float
A propriedade float permite que um bloco qualquer seja posicionado à direita ou es-
querda da janela do browser, fazendo com que o texto restante flua em sua volta. Permite que
qualquer bloco se comporte como uma imagem que faz uso dos atributos align=left e a-
lign=right no HTML. Sintaxe:
4-34
4 – Folhas de Estilo
4.7.8. clear
E finalmente, para evitar que um bloco flua em torno de uma imagem ou bloco que uti-
liza a propriedade float, existe a propriedade clear, que deve ser atribuída a um bloco ou
parágrafo que é afetado pela flutuação de um bloco. Faz a mesma coisa que o atributo clear,
usado no <BR> em HTML, só que aqui ela é suportada em qualquer elemento (bloco ou não).
clear: none | left | right | both
4.8. Posicionamento
O posicionamento de objetos em HTML pode ser conseguido em termos absolutos ou
relativos usando CSS 2. As propriedades permitem o posicionamento em três dimensões (hori-
zontal, vertical e em camadas). Embora os recursos de posicionamento não façam parte do
CSS1, tanto o Netscape Navigator 4 como o Internet Explorer 4 o suportam.
4-35
4 – Folhas de Estilo
<div class="imagem1">
<img src="T1.gif" width=150 height=72 border=1> 1 Posição 0 0
</div>
<div class="imagem2">
<img src="T2.gif" width=150 height=72 border=1> 2 Posição 0 200
</div>
<div class="imagem3">
<img src="T3.gif" width=150 height=72 border=1> 3 Posição -25 -25
</div>
<div class="imagem4">
<img src="T4.gif" width=150 height=72 border=1> 4 Posição 100 0
</div>
Aplicando a seguinte folha de estilos para posicionar as quatro imagens relativamente à sua
localização original obtemos a imagem ao lado. Os retângulos claros indicam a posição original
da imagem:
DIV.imagem1 {
position: relative;
top: 0px;
left: 0px;
}
4-36
4 – Folhas de Estilo
DIV.imagem2 {
position: relative;
top: 0px;
left: 200px;
}
DIV.imagem3 {
position: relative;
top: -25px;
left: -25px;
}
DIV.imagem4 {
position: relative;
top: 100px;
left: 0px;
}
4-37
4 – Folhas de Estilo
DIV.imagem1 {
position: absolute;
top: 0px;
left: 250px;
}
DIV.imagem2 {
position: absolute;
top: 100px;
left: 0px;
}
DIV.imagem3 {
position: absolute;
top: 160px;
left: 120px;
}
DIV.imagem4 {
position: absolute;
top: 200px;
left: -80px;
}
4.8.2. z-index
A propriedade z-index permite ordenar os objetos em camadas. É um eixo de
profundidade. Para usá-la, basta definir em cada objeto:
z-index: número
onde número é a camada de exibição. Quanto maior o número, mais alta a camada. o corres-
ponde à camada do texto. Se um objeto tiver z-index menor que zero aparecerá atrás do
texto. Se z-index for maior que zero, aparecerá na frente. Quando não é definido ou quando
z-index: 0 o bloco ocupará a mesma camada que o texto.
4.8.3. visibility
Esta propriedade serve para tornar um bloco visível ou invisível. Difere de display porque
não remove o espaço antes ocupado pela imagem:
visibility: hidden | visible
Exemplo:
IMG {visibility: hidden} // torna invisíveis todas as imagens
4-38
4 – Folhas de Estilo
4.9. Exercícios
4.9.1. Testes sobre Folhas de Estilo
1. Qual das seguintes regras de estilo está incorreta? Marque uma.
a) a:link {color: rgb(0%,40%,40%)}
b) div.code pre {margin-bottom: 0px}
c) body {font-size: 0.5cm, color: yellow, background: black}
d) .botcor {font-size: 16pt; font-family: tahoma, sans-serif;}
e) Estão todas corretas.
2. Qual dos seguintes trechos de código é ilegal dentro de um arquivo .css? Marque uma.
a) span.value {color: maroon}
b) /* <H1>Titulo</H1> */
c) @import url(http://ww.estilos.org/estilo.css);
d) <STYLE>
e) Nenhuma das alternativas é ilegal dentro de um arquivo CSS.
3. Qual das regras abaixo, de uma folha de estilos, declara que os parágrafos e células de da-
dos de tabelas terão texto vermelho?
a) P TD {color: red}
b) P: TD {color: ff0000}
c) P, TD {color: rgb(100%, 0%, 0%)}
d) P; TD {color: rgb(255, 0, 0)}
e) P, TD {color=red}
4. Qual das declarações abaixo, contida em uma página HTML, a vincula à folha de estilos
basico.css, localizada no mesmo diretório que a página?
a) <LINK REL=StyleSheet HREF="basico.css">
b) <LINK REL=StyleSheet SRC="basico.css">
c) <A HREF="basico.css" TITLE="StyleSheet">Folha de estilos</A>
d) <FRAME SRC="basico.css" REL="StyleSheet">
e) <A HREF="basico.css">Folha de estilos</A>
Quais declarações abaixo, em um bloco <STYLE> do arquivo que contém o trecho acima,
farão com que o texto do parágrafo tenha tamanho 10pt em um browser que suporte fo-
lhas de estilo? Marque uma ou mais.
a) div {font-size: 20pt}
p {font-size: 50%}
b) div {font-size: 10pt}
4-39
4 – Folhas de Estilo
c) p {font-size: 10pt}
d) div {font-size: 5pt}
p {font-size: 100%}
e) p div {font-size: 10pt}
6. Considere a seguinte folha de estilos, com uma única regra, vinculada a uma página HTML.
P {color: green}
Dentro dessa página, logo depois da instrução que vincula o estilo à página, há um bloco
<STYLE>, com a seguinte regra:
P {color: red}
A página possui dez parágrafos. Um deles atribui um estilo local usando o atributo STYLE,
da forma:
<P STYLE="color: blue">Parágrafo</P>
Supondo que a página seja visualizada em um browser que suporte folhas de estilo CSS,
qual é a cor da maior parte dos parágrafos dessa página?
a) azul (blue)
b) vermelha (red)
c) verde (green)
d) preta (black)
e) indefinida
Quais das regras de estilo abaixo fará com que o parágrafo seja exibido na cor azul, em um
browser que suporte folhas de estilos CSS?
a) P {color: blue}
b) .sec2 {color: blue}
c) P.novo {color: blue}
d) .sec2 .novo {color: blue}
e) P.sec2 {color: blue}
9. Qual das regras abaixo retira o sublinhado apenas dos links visitados? Marque uma.
a) a: visited {text-decoration: none}
b) a, visited {text-decoration: none}
4-40
4 – Folhas de Estilo
Conceitos básicos
1. Crie uma folha de estilos, chame-a de basico.css, e a carregue no arquivo StyleTest.html.
2. Nesta folha de estilos, usando o mínimo de declarações possível, declare:
a) que todo H1 tenha fonte Tahoma, ou sans-serif, se Tahoma não existir
b) que todo o texto do corpo (BODY) do arquivo tenha tamanho 10 pontos
c) que todos os H1, H2 e H3 sejam vermelhos
d) que os H1 tenham tamanho 24 pontos
e) que os H2 tenham tamanho 18 pontos
f) que os H3 tenham tamanho 14 pontos
3. Mude a cor do fundo da página para azul marinho (navy) e a cor default do texto para bran-
co em uma única declaração.
4. Faça com que todo texto marcado em itálico apareça em azul ciano (cyan).
6. Faça com que o primeiro parágrafo do arquivo StyleTest.html tenha texto verde.
4-41
4 – Folhas de Estilo
7. Faça com que a célula do meio da tabela de StyleTest.html tenha texto vermelho sobre
fundo amarelo (a tabela 3x3 encontra-se no meio da página).
8. Defina classes sec2, sec3, sec31 e sec32 para as seções (<DIV>) do documento Style-
Test.html. As seções estão indicadas em comentários HTML (por exemplo: <!--Seção 2 --
>). Aplique um fundo diferente (imagem ou cor) nessas seções para diferenciá-las das ou-
tras.
10. Faça com que o link ativo (active) fique em negrito; que o link normal tenha tamanho 10pt
e que mostre fundo amarelo quando o mouse estiver sobre ele (hover); e que o link visita-
do não tenha mais cor de fundo mas recupere o sublinhado. Obs: Para fazer um link ainda
não visitado, faça um link para qualquer recurso do sistema de arquivos; para ver o link ati-
vo, clique no link e segure o mouse.
Fontes
Crie uma nova folha de estilos (fontes.css) para aplicar fontes. Vincule (LINK) ou importe-a
(@import) em seus arquivos.
12. a) Aplique Verdana como fonte default em todo o site. Garanta que, se Verdana não existir,
Arial será usada, e se esta não existir, será usada a default sans-serif. Para testar, mude os
nomes das primeiras fontes para nomes desconhecidos do sistema. b) Teste a compatibili-
dade dos dois browsers em relação ao suporte de fontes com nomes longos (entre aspas)
em folhas de estilo locais e remotas.
13. Faça com que os <B> de seus parágrafos sejam 20% maiores que o texto normal destes
parágrafos.
4-42
4 – Folhas de Estilo
14. a) Aplique um espaçamento de 1 cm entre palavras de um parágrafo seu texto (isto poderá
não funcionar devido à falta de suporte dos browsers). b) Aplique um espaçamento de 1
cm entre as letras de outro parágrafo. Teste nos dois browsers.
17. Elimine o espaçamento entre os parágrafos (<P>) usando {margin-top: 0pt}, endente a
primeira linha e coloque todos os seus parágrafos, com exceção dos parágrafos da terceira
seção, com alinhamento justificado. O alinhamento deve ser aplicado apenas nos parágra-
fos e não em listas ou tabelas.
Cores
18. Experimente com cores, aplicando cores em textos, backgrounds de diversos componentes
da página, inclusive formulários (<INPUT> e <SELECT>). Use as três formas (url(r, g,
b), rrggbb e nomes) e veja como ocorre o suporte dos browsers em folhas de estilo locais e
externas. Dica: crie uma folha de estilos só para este exercício.
20. Numa outra folha de estilos (para este exercício), posicione a imagem no centro da página,
sem repetições e uma outra imagem no centro da tabela, também sem repetições.
21. Posicione (outra folha de estilos) o rabbit.gif (ou outra imagem) em uma posição a 4cm da
margem esquerda e a 7cm da margem superior. Na seção 2 (sec2), posicione bart.gif, repe-
tindo somente na vertical, afastado 11cm da margem esquerda e iniciando 1 cm abaixo da
margem superior.
Posicionamento e Layout
22. Remova o espaço entre todos os parágrafos de StyleTest.html. Aplique um text-indent de
1cm em cada parágrafo.
23. Faça com que os blocos (parágrafos e cabeçalhos) da seção 3.1 e 3.2 (DIV) tenham 0,3 cm
de margem esquerda e direita, e 0,5cm de margem superior e inferior, em relação às bordas
da seção.
4-43
4 – Folhas de Estilo
24. Faça com que as seções 3.2 e 3.1 tenham uma margem externa de 0,5 cm em relação à se-
ção 3.
25. Aplique uma borda azul, sólida, de 3mm acima da seção 2 (<DIV>), uma outra, também
de 3mm, abaixo, na cor amarelo. Dos lados, coloque bordas vermelhas, de 5mm.
26. Aplique uma borda verde, de 4mm à esquerda de todos os parágrafos da seção 2. Entre a
borda e o texto deve haver um espaço de 5mm. Entre a borda e a margem da página, mais
5mm (sem levar em conta o offset).
27. Sem usar tabelas, aplique uma largura máxima de 500 pixels em toda a página.
28. Faça com que a seção 3.1 tenha largura máxima de 220 pixels e flutue para a direita, dei-
xando o restante do texto fluir em volta dela.
Posicionamento absoluto
29. Monte o quebra-cabeças do exercício 1, do livro 3 (Além do HTML) sem usar tabelas (u-
sando apenas posicionamento de folhas de estilo).
30. Diagrame a página do exercício 2, do livro 3, sem usar tabelas (usando apenas posiciona-
mento de folhas de estilo).
4-44
Css Página 1
CSS
Sumário
Introdução ao CSS......................................................................................................................... 4
O que mais posso fazer com CSS? ................................................................................................ 6
Como funciona as CSS.................................................................................................................. 7
Método 1: In-line (o atributo style) ........................................................................................... 8
Método 2: Interno (a tag style) .................................................................................................. 8
Método 3: Externo (link para uma folha de estilos) .................................................................. 8
Prática:....................................................................................................................................... 9
Cores e fundos ........................................................................................................................... 9
Cor do primeiro plano: a propriedade 'color'............................................................................. 9
A propriedade 'background-color' ........................................................................................... 10
Image de fundo fixa [background-attachment] ....................................................................... 11
Posição da imagem de fundo [background-position] .............................................................. 12
Compilando [background]....................................................................................................... 13
Fontes .......................................................................................................................................... 13
Família de fontes [font-family] ............................................................................................... 14
nome para famílias de fontes ................................................................................................... 14
nome para famílias genéricas .................................................................................................. 14
Estilo da fonte [font-style]....................................................................................................... 15
Fonte variante [font-variant] ................................................................................................... 15
Peso da fonte [font-weight] ..................................................................................................... 15
Tamanho da fonte [font-size] .................................................................................................. 15
Compilando [font] ................................................................................................................... 16
Textos ...................................................................................................................................... 16
Indentação de texto [text-indent]............................................................................................. 16
Alinhamento de textos [text-align] .......................................................................................... 16
Decoração de textos [text-decoration]..................................................................................... 17
Espaço entre letras [letter-spacing] ......................................................................................... 17
Transformação de textos [text-transform] ............................................................................... 17
Links........................................................................................................................................ 18
O que é pseudo-classe? ........................................................................................................... 18
Pseudo-classe: link .............................................................................................................. 19
Css Página 2
Pseudo-classe: visited.......................................................................................................... 19
Pseudo-classe: active ........................................................................................................... 19
Pseudo-classe: hover ........................................................................................................... 19
Exemplo 1: Efeito quando o ponteiro está sobre o link....................................................... 19
Exemplo 1a: Espaçamento entre as letras ........................................................................... 19
Exemplo 1b: UPPERCASE e lowercase ............................................................................. 20
Exemplo 2: Removendo sublinhado dos links .................................................................... 20
Identificando e agrupando elementos (classes e id) .................................................................... 21
Agrupando elementos com uso de classe ................................................................................ 21
Identificando um elemento com uso de id .............................................................................. 22
Agrupando elementos (span e div) .......................................................................................... 23
Agrupando com <span> ...................................................................................................... 23
Agrupando com <div> ........................................................................................................ 23
Box Model................................................................................................................................... 24
O box model em CSS .............................................................................................................. 25
Margin e padding .................................................................................................................... 26
Definindo margin de um elemento .......................................................................................... 26
Definindo padding de um elemento ........................................................................................ 27
Bordas ......................................................................................................................................... 27
A espessura das bordas [border-width] ................................................................................... 28
As cores das bordas [border-color] ......................................................................................... 28
Tipos de bordas[border-style] ................................................................................................. 28
Exemplos de definição de bordas ............................................................................................ 28
Compilando [border] ............................................................................................................... 30
Altura e largura ........................................................................................................................... 30
Atribuindo largura [width] ...................................................................................................... 30
Atribuindo altura [height]........................................................................................................ 30
Flutuando elementos (floats) ................................................................................................... 31
Outro exemplo : colunas ......................................................................................................... 32
A propriedade clear ..................................................................................................................... 32
Posicionando elementos .......................................................................................................... 33
O princípio de posicionamento CSS ........................................................................................... 33
Posicionamento absoluto ......................................................................................................... 34
Posicionamento relativo .......................................................................................................... 35
Css Página 3
Usando z-index (Layers) ............................................................................................................. 35
BIBLIOGRAFIA: ............................................................................................................................. 36
Introdução ao CSS
CSS significa Cascading Style Sheetes (Folhas de Estilo em Cascata). Não seria
ótimo fazer layouts na sua página sem ter que alterar o HTML toda vez que quisesse
mudar?
Nesta introdução vamos ter uma breve introdução ao CSS para ter uma idéia de
como o CSS é prático. Podemos dizer que o CSS é a melhor metade do HTML.
Codificando, não há melhor parceria: HTML é responsável pelo trabalho pesado (a
estrutura), enquanto CSS dá o toque de elegância (layout).
CSS pode ser adicionado com uso do atributo style. Por exemplo, você pode
definir o tipo e o tamanho da fonte em um parágrafo:
Css Página 4
No exemplo acima usamos o atributo style para definir o tipo de fonte usado
(com a propriedade font-family) e o tamanho da fonte (com a propriedade font-size).
Notar que no último parágrafo do exemplo definimos tanto o tipo como o tamanho da
fonte separado por um ponto e vírgula.
Uma das funcionalidades mais inteligentes das CSS é a possibilidade de
controlar o layout de um arquivo central. Em lugar de se usar o atributo style em cada
tag, você pode dizer ao navegador como deve ser o layout de todos os textos em uma
página:
<html>
<head>
<title>Minha primeira página CSS</title>
<style type="text/css">
h1 {font-size: 30px; font-family: arial}
h2 {font-size: 15px; font-family: courier}
p {font-size: 8px; font-family: times new roman}
</style>
</head>
<body>
<h1>Minha primeira página CSS</h1>
<h2>Bem vindo à minha primeira página CSS</h2>
<p>Aqui você verá como funciona CSS</p>
</body>
</html>
<html>
<head>
<title>Minha primeira página CSS</title>
<style type="text/css">
h1 {font-size: 30px; font-family: arial}
h2 {font-size: 15px; font-family: courier}
p {font-size: 8px; font-family: times new roman}
</style>
</head>
<body>
<h1>Minha primeira página CSS</h1>
<h2>Bem vindo à minha primeira página CSS</h2>
<p>Aqui você verá como funciona CSS</p>
</body>
</html>
Css Página 5
O que mais posso fazer com CSS?
CSS faz muito mais do que definir tipos e tamanhos de fontes. Por exemplo, você pode
adicionar cores, fundos e estilos de texto. A seguir alguns exemplos para prática:
Além de cores, tipos de fontes, etc., CSS pode ser usado para controlar a
configuração e a apresentação da página (margens, flutuações, alinhamentos,
larguras, alturas, etc.) Controlando os diferentes elementos com CSS você será capaz de
criar layouts elegantes e precisos.
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX
Css Página 6
(o texto) preenche o espaço deixado à direita. Com a propriedade position, você pode
posicionar um elemento em qualquer lugar da página, com precisão:
Você não aprende CSS em 10 minutos. É preciso se dedicar um tempo para estudar.
Mas não é nada difícil, vamos ver nas próximas páginas o que você precisa saber sobre
as CSS.
Nesta lição você aprenderá a desenvolver sua primeira folha de estilos. Você verá o
básico sobre o modelo CSS e que código é necessário para usar CSS em um documento
HTML.
Muitas das propriedades usadas em Cascading Style Sheets (CSS) são semelhantes
àquelas do HTML. Se você está acostumado a usar HTML para layout irá reconhecer
muitos dos códigos que usaremos.
A sintaxe básica das CSS
Suponha que desejamos uma cor de fundo vermelha para a página web.
<body bgcolor="#FF0000">
Como você pode notar os códigos HTML e CSS são mais ou menos parecidos. O
exemplo acima serve também para demonstrar o fundamento do modelo CSS:
Mas, onde colocamos o código CSS? É isto que veremos a seguir. Aplicando CSS a um
documento HTML Você pode aplicar CSS a um documento de três maneiras distintas.
Os três métodos de aplicação estão exemplificados a seguir. Recomendo que você foque
no terceiro método, ou seja o método externo. O método externo além de ser menos
confuso para trabalhar por não estar junto com o HTML ele não ficará amostra se
alguém olhar o código fonte da sua página pelo browser, pois estará ‘escondido’ no
servidor onde está hospedando o seu site.
Css Página 7
Método 1: In-line (o atributo style)
Uma maneira de aplicar CSS é pelo uso do atributo style do HTML. Tomando como
base o exemplo mostrado anteriormente à cor vermelha para o fundo da página pode ser
<html>
<head>
<title>Exemplo</title>
</head>
<body style="background-color: #FF0000;">
<p>Esta é uma página com fundo vermelho</p>
</body>
</html>
<html>
<head>
<title>Exemplo</title>
<style type="text/css">
body {background-color: #FF0000;}
</style>
</head>
<body>
<p>Esta é uma página com fundo vermelho</p>
</body>
</html>
O que você tem a fazer é criar um link no documento HTML (índex.html) para a folha
de estilos (estilo.css). O link é criado em uma simples linha de código HTML como
mostrado a seguir:
<html>
<head>
<title>Meu documento</title>
<link rel="stylesheet" type="text/css" href="style/style.css" />
Css Página 8
</head>
<body>
Este link informa ao navegador para usar o arquivo CSS na renderização e apresentação
do layout do documento HTML.
A coisa realmente inteligente disto é que vários documentos HTML podem lincar para
uma mesma folha de estilos. Em outras palavras isto significa que um simples arquivo
será capaz de controlar a apresentação de muitos documentos HTML.
Esta técnica pode economizar uma grande quantidade de trabalho. Se por exemplo, você
quiser trocar a cor do fundo de um site com 100 páginas, a folha de estilos evita que
você edite manualmente uma a uma as páginas para fazer a mudança nos 100
documentos HTML. Usando CSS a mudança se fará em uns poucos segundos trocando-
se a cor em uma folha de estilos central.
Prática:
1 - Dentro do editor e crie dois arquivos — um arquivo HTML e um arquivo CSS —
com os seguintes conteúdos:
Index.html
<html>
<head>
<title>Meu documento</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1>Minha primeira folha de estilos</h1>
</body>
</html>
estilo.css
body {
background-color: #FF0000;
}
Cores e fundos
Você vai aprender agora como aplicar cores de primeiro plano e cores de fundo no seu
website. Abordaremos ainda os métodos avançados de controle e posicionamento de
imagens de fundo.
Css Página 9
h1 {
color: #ff0000;
}
As cores podem ser definidas pelo seu valor hexadecimal como no exemplo acima
(#ff0000), com uso do nome da cor ("red") ou ainda pelo seu valor rgb (rgb(255,0,0)).
A propriedade 'background-color'
A propriedade background-color define a cor do fundo de um elemento. O elemento
<body> contém todo o conteúdo de um documento HTML. Assim, para mudar a cor de
fundo da página, devemos aplicar a propriedade background-color ao elemento <body>.
Você pode aplicar cores de fundo para outros elementos, inclusive para cabeçalhos e
textos. No exemplo abaixo foram aplicadas diferentes cores de fundo para os elementos
<body> e <h1>.
body {
background-color: #FFCC66;
}
h1 {
color: #990000;
background-color: #FC9804;
}
Obs.: Note que foram aplicadas duas propriedades ao elemento <h1> separadas por um
ponto e vírgula.
body {
background-color: #FFCC66;
background-image: url("imagem.gif");
}
h1 {
color: #990000;
background-color: #FC9804;
}
Obs.: Note como foi especificado o caminho para a imagem usando url("imagem.gif").
Isto significa que a imagem está localizada no mesmo diretório da folha de estilos. Pode
ser escolhido um outro diretório para gravar as imagens e o caminho seria
url("../images/imagem.gif") ou até mesmo hospedá-la na Internet:
url("http://www.html.net/imagem.gif").
Css Página 10
Por exemplo, o código mostrado a seguir é para que a imagem não se repita na tela:
body {
background-color: #FFCC66;
background-image: url("butterfly.gif");
background-repeat: no-repeat;
}
h1 {
color: #990000;
background-color: #FC9804;
}
body {
background-color: #FFCC66;
background-image: url("butterfly.gif");
background-repeat: no-repeat;
background-attachment: fixed;
}
h1 {
color: #990000;
background-color: #FC9804;
}
Css Página 11
Posição da imagem de fundo [background-position]
Por padrão uma imagem de fundo é posicionada no canto superior esquerdo da tela. A
propriedade background-position permite alterar este posicionamento padrão e colocar a
imagem em qualquer lugar na tela. Existem várias maneiras de definir o posicionamento
da imagem na tela definindo valores para background-position. Todas elas se utilizam
de um sistema de coordenadas. Por exemplo, os valores '100px 200px' posiciona a
imagem a 100px do topo e a 200px do lado esquerdo da janela do navegador. As
coordenadas podem ser expressas em percentagem da largura da janeja, em unidades
fixas (pixels, centímetros, etc.) ou pode-se usar as palavras top, bottom, center, left e
right. A figura a seguir ilustra o modelo de coordenadas:
body {
background-color: #FFCC66;
background-image: url("butterfly.gif");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: right bottom;
}
Css Página 12
h1 {
color: #990000;
background-color: #FC9804;
}
Compilando [background]
A propriedade background é uma abreviação para todas as propriedades listadas
anteriormente. Com background você declara várias propriedades de modo abreviado,
economizando digitação e alguns bites, além de tornar a folha de estilo mais fácil de se
ler e entender.
Por exemplo, observe as cinco linhas a seguir:
background-color: #FFCC66;
background-image: url("butterfly.gif");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: right bottom;
}
background-color
background-image
background-repeat
background-attachment
background-position
Se uma das propriedades não for declarada ela assume automaticamente o seu valor
default. Por exemplo, a propriedade background-attachment e background-position não
foram declaradas no código mostrado a seguir:
As duas propriedades não declaradas assumirão o valor default que como você já sabe
são: a imagem rola na tela e será posicionada no canto superior esquerdo (que são os
valores default para as propriedades não declaradas).
Fontes
Estudaremos as fontes e como aplicá-las usando CSS. Veremos como criar situações
para que determinada fonte seja visualizada pelo usuário mesmo não estando instalada
em seu sistema operacional.
Css Página 13
Família de fontes [font-family]
A propriedade font-family é usada para definir uma lista de fontes e sua prioridade para
apresentação de um elemento em uma página. Se a primeira fonte da lista não estiver
instalada na máquina do usuário, deverá ser usada a segunda e assim por diante até ser
encontrada uma fonte instalada. Existem dois tipos de nomes para definir fontes: nomes
para famílias de fontes e nomes para famílias genéricas. Os dois são explicados a seguir:
Ao listar fontes para seu website, comece com aquela preferida, seguindo-se algumas
alternativas para ela. É recomendável encerrar a listagem das fontes com uma fonte
genérica. Assim fazendo, em último caso a página será renderizada com fonte da mesma
família das que foram especificadas quando todas as demais estiverem indisponíveis na
máquina do usuário. A seguir mostramos um exemplo de listagem de fontes:
Cabeçalhos <h1> serão renderizados com fonte "Arial". Se o usuário não tiver a font
Arial instalada, será usada a fonte "Verdana". Se ambas estiverem indisponíveis na
máquina do usuário será usada uma fonte da família sans-serif.
Css Página 14
Notar que para especificar a fonte "Times New Roman" foram usadas aspas. Isto é
necessário para fontes com nomes compostos e que contenham espaços entre os nomes.
h1 {font-variant: small-caps;}
h2 {font-variant: normal;}
h1 {font-size: 30px;}
h2 {font-size: 12pt;}
h3 {font-size: 120%;}
p {font-size: 1em;}
Existe uma diferença fundamental entre as quatro unidades adotadas no exemplo acima.
As unidades 'px' e 'pt' são absolutas, enquanto '%' e 'em' permitem ao usuário ajustar o
Css Página 15
tamanho das fontes ao seu gosto e necessidade. Para fazer seu site acessível a todos,
você deverá usar unidades como '%' ou 'em'.
Compilando [font]
Usar font é uma abreviação que permite definir várias propriedades em uma só. Veja a
seguir quatro linhas de código usadas para definir propriedades de fonte para um
parágrafo <p>:
p {
font-style: italic;
font-weight: bold;
font-size: 30px;
font-family: arial, sans-serif;
}
p {
font: italic bold 30px arial, sans-serif;
}
A ordem dos valores para font é a mostrada a seguir:
font-style
font-variant
font-weight
font-size
font-family
Textos
Formatar e estilizar textos é um item chave para qualquer web designer. Nesta lição
você será apresentado às interessantes oportunidades que as CSS proporcionam para
adicionar layout aos textos. Serão discutidadas as propriedades listadas abaixo:
p {
text-indent: 30px;
}
Css Página 16
th {
text-align: right;
}
td {
text-align: center;
}
p {
text-align: justify;
}
h1 {
text-decoration: underline;
}
h2 {
text-decoration: overline;
}
h3 {
text-decoration: line-through;
}
h1 {
letter-spacing: 6px;
}
p {
letter-spacing: 3px;
}
capitalize
Capitaliza a primeira letra de cada palavra. Por exemplo: "john doe" transforma-se para
"John Doe".
uppercase
Css Página 17
Converte todas as letras para maiúscula. Por exemplo: "john doe" transforma-se
para"JOHN DOE".
lowercase
Converte todas as letras para minúscula. Por exemplo: "JOHN DOE" transforma-se
para"john doe".
none
Sem trasformações - o texto é apresentado como foi escrito no código HTML. Para
exemplificar vamos usar uma lista de nomes. Os nomes estão marcados com o elemento
<li> (item de lista). Vamos supor que desejamos os nomes capitalizados e os cabeçalhos
em letras maiúsculas. Ao consultar o exemplo sugerido para este código dê uma olhada
no HTML da página e observe que os textos no código foram escritos com todas as
letras em minúsculas.
h1 {
text-transform: uppercase;
}
li {
text-transform: capitalize;
}
Links
Você pode aplicar aos links tudo que aprendeu nas lições anteriores (mudar cores,
fontes, sublinhados, etc). A novidade aqui é que você pode definir as propriedades de
maneira diferenciada de acordo com o estado do link ou seja visitado, não visitado,
ativo ou com o ponteiro do mouse sobre o link. Isto possibilita adicionar interessantes
efeitos ao seu website. Para estilizar estes efeitos você usará as chamadas pseudoclasses.
O que é pseudo-classe?
Uma pseudo-classe permite estilizar levando em conta condições diferentes ou eventos
ao definir uma propriedade de estilo para uma tag HTML. Vamos ver um exemplo.
Como você já sabe, links são marcados no HTML com tags <a>. Podemos então usar a
como um seletor CSS:
a {
color: blue;
}
Um link pode ter diferentes estados. Por exemplo, pode ter sido visitado ou não
visitado. Você usará pseudo-classes para estilizar links visitados e não visitados.
a:link {
color: blue;
}
a:visited {
color: red;
}
Use as pseudo-classes a:link e a:visited para estilizar links não visitados e visitados
respectivamente. Links ativos são estilizados com a pseudo-classe a:active e a:hover,
esta última é a pseudo-classe para links com o ponteiro do mouse sobre ele.
Css Página 18
A seguir explicaremos com mais detalhes e exemplificação, as quatro pseudo-classes.
Pseudo-classe: link
A pseudo-classe :link é usada para links não visitados.
No exemplo a seguir links não vistados serão na cor verde.
a:link {
color: green;
}
Pseudo-classe: visited
A pseudo-clases: visited é usada para links visitados. No exemplo a seguir links
visitados serão na cor amarela:
a:visited {
color: yellow;
}
Pseudo-classe: active
A pseudo-classe :active é usada para links ativos.
No exemplo a seguir links ativos terão seu fundo na cor vermelha:
a:active {
background-color: red;
}
Pseudo-classe: hover
A pseudo-classe :hover é usada para quando o ponteiro do mouse está sobre o link. Isto
pode ser usado para conseguir efeitos bem interessantes. Por exemplo, podemos mudar
a cor do link para laranja e o texto para itálico quando o ponteiro do mouse passa sobre
ele, o código CSS para estes efeitos é o mostrado a seguir:
a:hover {
color: orange;
font-style: italic;
}
a:hover {
letter-spacing: 10px;
Css Página 19
font-weight:bold;
color:red;
}
a:hover {
text-transform: uppercase;
font-weight:bold;
color:blue;
background-color:yellow;
}
Você deve estudar com muito cuidado a necessidade de retirar o sublinhado dos
links, pois isto poderá reduzir signifcativamente a usabilidade do website. As
pessoas estão acostumadas com links na cor azul e sublinhados e sabem que ali há um
texto a ser clicado. Se você muda a cor e retira o sublinhado dos links, poderá confundir
seus visitantes e em conseqüência não retirar o máximo dos conteúdos do seu website.
Feita esta ressalva, é muito fácil retirar o sublinhado dos links. Conforme explicado na
lição anterior, a propriedade text-decoration pode ser usada para definir se o texto é ou
não sublinhado. Para remover o sublinhado, basta definir o valor none para a
propriedade text-decoration.
a {
text-decoration:none;
}
Css Página 20
Identificando e agrupando elementos (classes e id)
Em alguns casos você deseja aplicar estilos a um elemento ou grupo de elementos em
particular. Nesta lição veremos como usar class e id para estilizar elementos. Como
definir uma cor para um determinado cabeçalho, diferente da cor usada para os demais
cabeçalhos do website? Como agrupar links em diferentes categorias e estilizar cada
categoria diferentemente? Estas são algumas das questões que vamos ver agora.
Queremos que os links para vinho branco sejam na cor amarela, para vinho tinto na cor
vermelha e os demais links na página permaneçam na cor azul.
Para conseguir isto, dividimos os links em duas categorias. Isto é feito atribuindo uma
classe para cada link, usando o atributo class.
Vamos especificar esta classe no exemplo a seguir:
a {
color: blue;
}
a.whitewine {
color: #FFBB00;
}
a.redwine {
Css Página 21
color: #800000;
}
<li><a href="cs.htm" class="redwine">Cabernet Sauvignon</a></li>
<li><a href="me.htm" class="redwine">Merlot</a></li>
<li><a href="pn.htm" class="redwine">Pinot Noir</a></li>
</ul>
Como mostrado no exemplo acima, pode-se definir propriedades para estilização dos
elementos pertencentes a uma determinada classe usando um .nomedaclasse na folha de
estilos do documento.
<h1>Capítulo 1</h1>
...
<h2>Capítulo 1.1</h2>
...
<h2>Capítulo 1.2</h2>
...
<h1>Capítulo 2</h1>
...
<h2>Capítulo 2.1</h2>
...
<h3>Capítulo 2.1.2</h3>
...
Vamos supor que o cabeçalho do capítulo 1.2 deva ser na cor vermelha. Isto pode ser
feito conforme mostrado na folha de estilo a seguir:
#c1-2 {
color: red;
}
Css Página 22
Como mostrado no exemplo acima, podemos definir propriedades para um elemento
específico usando um seletor #id na folha de estilos para o documento.
Vamos supor que queremos enfatizar na cor vermelha os benefícios apontados na frase.
Para isto marcamos os benefícios com <span>. A cada span atribuímos uma class, e
estilizamos na folha de estilos:
A folha de estilos:
span.beneficio {
color:red;
}
É claro que você pode usar id para estilizar o elemento <span>. Mas, como você deve
estar lembrado, deverá usar uma única id para cada um os três elementos <span>,
conforme foi explicado na lição anterior.
<div id="democrats">
Css Página 23
<ul>
<li>Franklin D. Roosevelt</li>
<li>Harry S. Truman</li>
<li>John F. Kennedy</li>
<li>Lyndon B. Johnson</li>
<li>Jimmy Carter</li>
<li>Bill Clinton</li>
</ul>
</div>
<div id="republicans">
<ul>
<li>Dwight D. Eisenhower</li>
<li>Richard Nixon</li>
<li>Gerald Ford</li>
<li>Ronald Reagan</li>
<li>George Bush</li>
<li>George W. Bush</li>
</ul>
</div>
#democrats {
background:blue;
}
#republicans {
background:red;
}
Nos exemplos mostrados acima usamos somente <div> e <span> para simples
estilizações, tais como cores de textos e de fundos. Contudos estes dois elementos
possibilitam estilizações bem mais avançadas como veremos adiante nas lições deste
tutorial.
Box Model
O box model (modelo das caixas) em CSS, descreve os boxes (as caixas) geradas pelos
elementos HTML. O box model, detalha ainda, as opções de ajuste de margens, bordas,
padding e conteúdo para cada elemento. Abaixo apresentamos um diagrama
representando a estrutura de construção do box model:
Css Página 24
O box model em CSS
<h1>Article 1:</h1>
<p>All human beings are born free
and equal in dignity and rights.
They are endowed with reason and conscience
and should act towards one another in a
spirit of brotherhood</p>
Definindo estilos para cores e fontes o exemplo pode ser apresentado como a seguir:
O exemplo contém dois elementos: <h1> e <p>. O box model para os dois
elementos é mostrado a seguir:
Css Página 25
Embora possa parecer um pouco complicado, a ilustração mostra como cada um dos
elementos é contido em um box (uma caixa). Boxes que podem ser ajustados e
controlados via CSS.
Margin e padding
Na lição anterior vimos o box model. Nesta lição veremos como controlar a
apresentação de um elemento definindo as propriedades margin e padding.
Css Página 26
As CSS são mostradas abaixo:
body {
margin-top: 100px;
margin-right: 40px;
margin-bottom: 10px;
margin-left: 70px;
}
body {
margin: 100px 40px 10px 70px;
}
As margens para a maioria dos elementos pode ser definida conforme o exemplo acima.
Podemos então, por exemplo, definir margens para todos os parágrafos <p>:
body {
margin: 100px 40px 10px 70px;
}
p {
margin: 5px 50px 5px 50px;
}
h1 {
background: yellow;
}
h2 {
background: orange;
}
h1 {
background: yellow;
padding: 20px 20px 20px 80px;
}
h2 {
background: orange;
padding-left:120px;
}
Bordas
Bordas podem ser usadas para muitas coisas, por exemplo, como elemento
Css Página 27
decorativo ou para servir de linha de separação entre duas coisas. CSS proporciona
infinitas possibilidades de uso de bordas na página.
Tipos de bordas[border-style]
Existem vários tipos de bordas disponíveis para escolha. A seguir apresentamos 8 tipos
diferentes de bordas e como elas são renderizadas Internet Explorer 5.5. Todos os
exemplos são mostrados na cor "gold" e com espessura "thick", mas você pode usar
qualquer cor e espessura ao seu gosto.
Os valores none ou hidden podem ser usados quando não se deseja a existência de
bordas.
Css Página 28
h1 {
border-width: thick;
border-style: dotted;
border-color: gold;
}
h2 {
border-width: 20px;
border-style: outset;
border-color: red;
}
p {
border-width: 1px;
border-style: dashed;
border-color: blue;
}
ul {
border-width: thin;
border-style: solid;
border-color: orange;
}
É possível ainda definir propriedades especialmente para as bordas top, bottom, right ou
left (superior, inferior, direita e esquerda). Veja o exemplo a seguir:
h1 {
border-top-width: thick;
border-top-style: solid;
border-top-color: red;
border-bottom-width: thick;
border-bottom-style: solid;
border-bottom-color: blue;
border-right-width: thick;
border-right-style: solid;
Css Página 29
border-right-color: green;
border-left-width: thick;
border-left-style: solid;
border-left-color: orange;
}
Compilando [border]
Assim como para muitas outras propriedades, você pode usar uma declaração abreviada
para bordas. Vamos a um exemplo:
p {
border-width: 1px;
border-style: solid;
border-color: blue;
}
p {
border: 1px solid blue;
}
Altura e largura
Até agora ainda não fizemos qualquer consideração sobre as dimensões dos elementos
com que trabalhamos. Nesta lição veremos como é fácil atribuir uma altura e uma
largura para um elemento.
div.box {
width: 200px;
border: 1px solid black;
background: orange;
}
div.box {
height: 500px;
width: 200px;
border: 1px solid black;
background: orange;
}
Css Página 30
Flutuando elementos (floats)
Um elemento pode ser 'flutuado' à esquerda ou à direita com uso da propriedade float.
Isto significa que o box e seu conteúdo são deslocados para a direita ou para a esquerda
do documento (ou do bloco container). A figura a seguir ilustra o princípio de float:
textoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtexto
<div id="picture">
<img src="bandeiradobrasil.jpg" alt="Bandeira do Brasil">
</div>
<p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
xxxxxxxxxxxxxxxxxxxxxxxxx...</p>
Para conseguir o efeito mostrado, basta definir uma largura para o box que o contém e
declarar para ele float: left;
#picture {
float:left;
width: 100px;
}
Css Página 31
Outro exemplo : colunas
Floats podem ser usados para construir colunas em um documento. Para criar as colunas
estruturamos as colunas no código HTML usando <div> como mostrado a seguir:
<div id="column1">
<p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...</p>
</div>
<div id="column2">
<p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...</p>
</div>
<div id="column3">
<p>xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...</p>
</div>
A seguir definimos a largura de cada coluna, por exemplo 33%, e declaramos float: left;
para cada uma das colunas:
#column1 {
float:left;
width: 33%;
}
#column2 {
float:left;
width: 33%;
}
#column3 {
float:left;
width: 33%;
}
A propriedade clear
A propriedade clear é usada para controlar o comportamento dos elementos que se
seguem aos elementos floats no documento.
Por padrão, o elemento subsequente a um float, ocupa o espaço livre ao lado do
elemento flutuado. Veja no exemplo acima que o texto deslocou-se automaticamente
para o lado da foto de Bill Gates.
A propriedade clear pode assumir os valores left, right, both ou none. A regra geral é:
se clear, for por exemplo definido both para um box, a margem superior deste box será
posicionada sempre abaixo da margem inferior dos boxes flutuados que estejam antes
dele no código.
<div id="picture">
<img src="bandeiradobrasil.jpg" alt="Bandeira do Brasil">
</div>
<h1>Bandeira do Brasil</h1>
<p class="floatstop">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...</p>
Css Página 32
Para evitar que o texto se posicione no espaço livre deixado pela foto do Bandeira do
Brasil basta adicionar a seguinte regra CSS:
#picture {
float:left;
width: 100px;
}
.floatstop {
clear:both;
}
Posicionando elementos
Com posicionamento CSS podemos colocar um elemento em uma posição exata na
página. Combinado com floats (ver lição 13), o posicionamento abre muitas
possibilidades para criação de layouts precisos e avançados.
h1 {
position:absolute;
top: 100px;
left: 200px;
}
Css Página 33
O resultado é mostrado a seguir:
Como você pode ver, posicionar com CSS é uma técnica precisa para colocar
elementos. É muito mais fácil do que usar tabelas, imagens transparentes e tudo mais.
Posicionamento absoluto
Um elemento posicionado absolutamente não cria nenhum espaço no documento. Isto
significa que não deixa nenhum espaço vazio após ser posicionado. Para posicionar um
elemento de forma absoluta a propriedade position deve ser definida para absolute.
Você pode então usar as propriedades left, right, top, e bottom para definir as
coordenadas e posicionar o elemento. Para exemplificar o posicionamento absoluto
escolhemos colocar quatro boxes nos quatro cantos da página:
#box1 {
position:absolute;
top: 50px;
left: 50px;
}
#box2 {
position:absolute;
top: 50px;
right: 50px;
}
#box3 {
position:absolute;
bottom: 50px;
right: 50px;
}
#box4 {
position:absolute;
bottom: 50px;
left: 50px;
}
Css Página 34
Posicionamento relativo
Para posicionar um elemento de forma relativa a propriedade position deve ser definida
para relative. A diferença entre os dois tipos de posicionamento é a maneira como o
posicionamento é calculado. O posicionamento para posição relativa é calculado com
base na posição original do elemento no documento. Isto significa uma
movimentação do elemento para a esquerda, para a direita, para cima ou para baixo.
Assim fazendo o elemento ocupa um espaço após ser posicionado.
Como exemplo de posicionamento relativo vamos tentar posicionar três imagens
relativamente as suas posições originais na página. Notar como as imagens deixam um
espaço vazio nas suas posições originais no documento:
#bola1 {
position:relative;
left: 350px;
bottom: 150px;
}
#bola2 {
position:relative;
left: 150px;
bottom: 500px;
}
#bola3 {
position:relative;
left: 50px;
bottom: 700px;
}
Css Página 35
No caso mostrado, os números índice estão em uma seqüência direta (de 1-5), contudo o
mesmo resultado poderia ser obtido com uso de 5 diferentes números, não em
seqüência. O que conta é a cronologia dos números (a ordem).
#ten_of_diamonds {
position: absolute;
left: 100px;
bottom: 100px;
z-index: 1;
}
#jack_of_diamonds {
position: absolute;
left: 115px;
bottom: 115px;
z-index: 2;
}
#queen_of_diamonds {
position: absolute;
left: 130px;
bottom: 130px;
z-index: 3;
}
#king_of_diamonds {
position: absolute;
left: 145px;
bottom: 145px;
z-index: 4;
}
#ace_of_diamonds {
position: absolute;
left: 160px;
bottom: 160px;
z-index: 5;
}
O método é simples, mas as possibilidades são muitas. Você pode colocar imagens
sobre textos, texto sobre texto, etc.
BIBLIOGRAFIA:
http://www.w3.org/International/O-charset.pt-br.php
http://www.w3c.br/divulgacao/guiasreferencia/xhtml1/#mod-eventos
http://www.w3schools.com/css/
http://pt.wikipedia.org/wiki/Cascading_Style_Sheets
http://pt-br.html.net/tutorials/css/
Css Página 36
CSS CURSO W3C ESCRITÓRIO BRASIL
ÍNDICE
1. CSS 5
O que é CSS? 5
2. Seletores complexos 7
O que é um seletor? 7
Exemplo de funcionamento 8
3. Gradiente 11
“Stops” ou definindo o tamanho do seu gradiente 12
4. Columns 15
column-count 15
column-width 15
column-gap 16
5. Transform 2D 17
CSS Transform na prática 17
Várias transformações em um único elemento 18
transform-origin 18
6. Transições e animações 21
O básico: propriedade transition 21
Propriedade animation e regra keyframe 24
Definindo ciclos 28
7. Bordas 31
Dividindo a imagem 31
Comportamento da imagem 32
Aplicação 32
8. Múltiplos backgrounds 35
10. Cores 45
RGBA 45
RGBA e a diferença da propriedade OPACITY 45
currentColor 47
11. Paged media 49
@page 49
Terminologia e Page Model (modelo de página) 50
Page box 50
Page area 51
Margin box 51
Page sheet 51
Non-printable area - Área não impressa 52
Área de impressão 52
Propriedade size 52
auto 52
landscape 52
portrait 52
Page-size 53
12. @font-face 55
Compatibilidade 56
Kit de sobrevivência 56
13. Presentation-levels 57
Como funciona o modelo 57
A propriedade presentation-level 58
1. CSS
O que é CSS?
O CSS formata a informação entregue pelo HTML. Essa informação pode ser qualquer coisa: ima-
gem, texto, vídeo, áudio ou qualquer outro elemento criado. Grave isso: CSS formata a informação.
Essa formatação na maioria das vezes é visual, mas não necessariamente. No CSS Aural, nós ma-
nipulamos o áudio entregue ao visitante pelo sistema de leitura de tela. Nós controlamos volume,
profundidade, tipo da voz ou em qual das caixas de som a voz sairá. De certa forma você está for-
matando a informação que está em formato de áudio e que o visitante está consumindo ao entrar
no site utilizando um dispositivo ou um sistema de leitura de tela. O CSS prepara essa informação
O HTML5 trouxe poucas novidades para os desenvolvedores client-side. Basicamente foram cria-
das novas tags, o significado de algumas foi modificado e outras tags foram descontinuadas. As no-
vidades interessantes mesmo ficaram para o pessoal que conhece Javascript. As APIs que o HTML5
disponibilizou são sem dúvida uma das features mais aguardadas por todos estes desenvolvedores.
Diferentemente do CSS3 que trouxe mudanças drásticas para a manipulação visual dos elementos
do HTML.
Com o CSS que nós conhecemos podemos formatar algumas características básicas: cores, back-
ground, características de font, margins, paddings, posição e controlamos de uma maneira muito
Você deve pensar: “mas com todas as características nós conseguimos fazer sites fantásticos, com
design atraente e com a manutenção relativamente simples”. E eu concordo com você, mas outras
trutura do HTML;
SEO;
Com as atualizações do CSS3 e com os browsers atualizando o suporte do CSS2.1, nós entramos em
patamar onde sem dúvida o CSS é a arma mais poderosa para o designer web. Segue uma pequena
lista dos principais pontos que podemos controlar nesse novo patamar:
5) bordas arredondadas;
7) manipulação de opacidade;
8) controle de rotação;
9) controle de perspectiva;
10) animação;
seletor {
propriedade: valor;
}
A propriedade é a característica que você deseja modificar no elemento. O valor é o valor referente
a esta característica. Se você quer modificar a cor do texto, o valor é um Hexadecimal, RGBA ou até
mesmo o nome da cor por extenso. Até aqui, nada diferente. Muitas vezes você não precisa apren-
der do que se trata a propriedade, basta saber que existe e se quiser decorar, decore. Propriedades
são criadas todos os dias e não é um ato de heroísmo você saber todas as propriedades do CSS e
Os seletores são a alma do CSS e você precisa dominá-los. É com os seletores que você irá escolher
um determinado elemento dentro todos os outros elementos do site para formatá-lo. Boa parte da
inteligência do CSS está em saber utilizar os seletores de uma maneira eficaz, escalável e inteligente.
O que é um seletor?
O seletor representa uma estrutura. Essa estrutura é usada como uma condição para determinar
Seletores encadeados e seletores agrupados são a base do CSS. Você os aprende por osmose duran-
te o dia a dia. Para você lembrar o que são seletores encadeados e agrupados segue um exemplo
abaixo:
div p strong a {
color: red;
}
Você agrupa elementos separados por vírgula para que herdem a mesma formatação.
Estes seletores são para cobrir suas necessidades básicas de formatação de elementos. Eles fazem o
simples. O que vai fazer você trabalhar menos, escrever menos código CSS e também menos códi-
Os seletores complexos selecionam elementos que talvez você precisaria fazer algum script em
Javascript para poder marcá-lo com uma CLASS ou um ID para então você formatá-lo. Com os
seletores complexos você consegue formatar elementos que antes eram inalcançáveis.
Exemplo de funcionamento
Imagine que você tenha um título (h1) seguido de um parágrafo (p). Você precisa selecionar todos
os parágrafos que vem depois de um título h1. Com os seletores complexos você fará assim:
h1 + p {
color:red;
}
Esses seletores é um dos mais simples e mais úteis que eu já utilizei em projetos por aí. Não precisei
adicionar uma classe com JQuery, não precisei de manipular o CMS para marcar esse parágrafo,
bilidades aqui porque podem haver modificações, novos formatos ou outros formatos que podem
ser descontinuados. Para ter uma lista sempre atualizada, siga o link no final da tabela.
elemento[atr=”x”] Elemento que tenha um atributo com um valor específico igual a “x”. 2
elemento[atr~=”x”] Elemento com um atributo cujo valor é uma lista separada por espa- 2
string “x”.
string “x”.
elemento[atr|=”en”] Um elemento que tem o atributo específico com o valor que é sepa- 2
child(n)
child(n)
texto.
checkboxes.
browsers mais novos como Safari, Opera, Firefox e Chrome já aceitam essa feature e você pode
utilizá-la hoje. Os Internet Explorer atuais (8 e 9) não reconhecem ainda, contudo você poderá
utilizar imagens para estes browsers que não aceitam essa feature. Você pode perguntar: “Mas já
que terei o trabalho de produzir a imagem do gradiente, porque não utilizar imagens para todos os
browsers?“ Lembre-se que se utilizar uma imagem, o browser fará uma requisição no servidor bus-
cando essa imagem, sem imagem, teremos uma requisição a menos, logo o site fica um pouquinho
mais rápido. Multiplique isso para todas as imagens de gradiente que você fizer e tudo realmente
Deixe para que os browsers não adeptos baixem imagens e façam mais requisições.
div {
width:200px;
height:200px;
background-color: #FFF;
/* Firefox 3.6+ */
background-image: -moz-linear-gradient(green, red);
/* Opera 11.10+ */
background-image: -o-linear-gradient(green, red);
}
Atenção: Até que os browsers implementem de vez essa feature, iremos utilizar seus prefixos.
Nesse caso nós temos que definir um STOP, para que o browser saiba onde uma cor deve terminar
para começar a outra. Perceba o 20% ao lado da cor vermelha. O browser calcula quanto é 20% da
altura (ou largura dependendo do caso) do elemento, e começa o gradiente da cor exatamente ali.
/* Firefox 3.6+ */
background-image: -moz-linear-gradient(green, red 20%);
/* Opera 11.10+ */
background-image: -o-linear-gradient(green, red 20%);
Veja o resultado:
Se colocarmos um valor para o verde, nós iremos conseguir efeitos que antes só conseguiríamos no
/* Firefox 3.6+ */
background-image: -moz-linear-gradient(green 10%, red 20%);
/* Opera 11.10+ */
background-image: -o-linear-gradient(green 10%, red 20%);
Perceba que o tamanho da transição vai ficando menor à medida que vamos aumentando as por-
hoje não havia maneira de fazer isso de maneira inteligente com CSS e o grupo de propriedades
column-count
A propriedade column-count define a quantidade de colunas terá o bloco de textos.
column-width
Com a propriedade column-width definimos a largura destas colunas.
Fiz alguns testes aqui e há uma diferença entre o Firefox 3.5 e o Safari 4 (Public Beta).
imagine que você tenha uma área disponível para as colunas de 100px. Ou seja, você tem um div
com 100px de largura (width). E você define que as larguras destas colunas (column-width) sejam
de 45px. Logo, haverá 10px de sobra, e as colunas irão automaticamente ter 50px de largura, preen-
Já no Safari, acontece o seguinte: se você define um column-width, as colunas obedecem a esse va-
lor e não preenchem o espaço disponível, como acontece na explicação do W3C e como acontece
venha a calhar, assim, ficamos com os dois resultados citados, que são bem úteis para nós de qual-
quer maneira.
column-gap
A propriedade column-gap cria um espaço entre as colunas, um gap.
Utilizamos aqui os prefixos -moz- e -webkit-, estas propriedades não funcionam oficialmente em
nenhum browser. Mas já podem ser usados em browsers como Firefox e Safari.
5. TRANSFORM 2D
A propriedade transform manipula a forma com que o elemento aparecerá na tela. Você pode-
propriedade transform. Os browsers que suportam essa propriedade, a suportam com o prefixo
especificado.
scale
O valor scale modificará a dimensão do elemento. Ele aumentará proporcionalmente o tama-
nho do elemento levando em consideração o tamanho original do elemento.
skew
Skew modificará os ângulos dos elementos. Você pode modificar os ângulos individualmente
dos eixos X e Y como no código abaixo:
-webkit-transform: skewY(30deg);
-webkit-transform: skewX(30deg);
translation
O translation moverá o elemento no eixo X e Y. O interessante é que você não precisa se pre-
ocupar com floats, positions, margins e etc. Se você aplica o translation, ele moverá o objeto
e pronto.
rotate
O rotate rotaciona o elemento levando em consideração seu ângulo, especialmente quando o
ângulo é personalizado com o transform-origin.
img {
-webkit-transform: skew(30deg); /* para webkit */
-moz-transform: skew(30deg); /* para gecko */
-o-transform: skew(30deg); /* para opera */
transform: skew(30deg); /* para browsers sem prefixo */
}
Para utilizarmos vários valores ao mesmo tempo em um mesmo elemento, basta definir vários va-
img {
-webkit-transform: scale(1.5) skew(30deg); /* para webkit */
-moz-transform: scale(1.5) skew(30deg); /* para gecko */
-o-transform: scale(1.5) skew(30deg); /* para opera */
transform: scale(1.5) skew(30deg); /* para browsers sem prefi-
xo */
}
transform-origin
A propriedade transform-origin define qual o ponto do elemento a transformação terá origem. A
img {
-webkit-transform-origin: 10px 10px; /* para webkit */
-moz-transform-origin: 10px 10px; /* para webkit */
-o-transform-origin: 10px 10px; /* para webkit */
transform-origin: 10px 10px; /* para webkit */
}
Como padrão as transições sempre acontecem tendo como ponto de âncora o centro do objeto.
Há algumas situações que pode ser que você queira modificar essa âncora, fazendo com que por
exemplo, a rotação aconteça em algum dos cantos do elemento. O código de exemplo acima fará
com que a transformação aconteça a partir dos 10px do topo no canto esquerdo. Veja a compara-
A propriedade transform fica mais interessante quando a utilizamos com a propriedade transition,
pessoal do WaSP organizou todo o movimento dos Padrões Web fazendo com que todos os desen-
volvedores, fabricantes de browsers e até mesmo o W3C acreditassem no poder dos padrões não
houve grandes atualizações no CSS. Praticamente formatávamos font, background, cor, tamanhos
A propriedade transition, a regra keyframe e outras propriedades vieram vitaminar a função que
o CSS tem perante o HTML acrescentando maneiras de produzirmos animações e transições. Não
estou dizendo que você fará animações complicadas, com diversos detalhes técnicos e etc. Para
esse tipo de resultado existem outras ferramentas, incluindo Canvas e SVG, que com certeza farão
um trabalho melhor com menos esforço. Mas é fato que as animações via CSS nos ajudará a levar a
Lembrando que o nível de suporte de algumas dessas técnicas ainda é muito baixo. A propriedade
transition funciona em boa parte dos browsers atuais. Mas a regra keyframe que nos permite con-
trolar as fases de uma animação ainda é muito restrito. Para uma tabela mais atual e detalhada de
suporte e compatibilidade, faça uma procura no Google. Onde for possível demonstrarei o código
a {
color: white;
background: gray;
}
No código definimos que o link terá sua cor de texto igual a preta e seu background será cinza.
branco para o preto e que a cor de background mude de cinza para vermelho. O código abaixo faz
exatamente isso:
a {
color: white;
background: gray;
}
a:hover {
color: black;
background: red;
}
O problema é que a transição é muito brusca. O browser apenas modifica as características entre os
dois blocos e pronto. Não há nenhuma transição suave entre os dois estados.
Podemos fazer a mudança de um estado para outro utilizando a propriedade transition. Suponha
características do link com uma pequena transição de meio segundo. O código seria como se segue
abaixo:
a:hover {
color: black;
background: red;
-webkit-transition: 0.5s;
}
Dessa forma a transição apenas acontece quando o hover é ativado. O problema é que ao tirar o
mouse, o browser volta bruscamente para as características iniciais. Para modificar isso basta inse-
a {
color: white;
background: gray;
-webkit-transition: 0.5s;
}
a:hover {
color: black;
background: red;
-webkit-transition: 0.5s;
}
O que a propriedade transition faz é comparar os valores das propriedades em comum entre os dois
estados do link ou de qualquer outro elemento, assim ela modifica suavemente os valores quando
há a ativação da função. Esta é uma técnica simples e que serve para manipularmos transições bá-
Agora suponha que em um bloco há uma determinada propriedade que no outro bloco não há,
a {
border:1px solid orange;
color: white;
background: gray;
-webkit-transition: 0.5s;
}
a:hover {
color: black;
background: red;
-webkit-transition: 0.5s;
}
Nesse caso o browser detecta que há uma propriedade no primeiro estado, mas não no segundo,
por isso ele não faz a transição desta propriedade, apenas das propriedades em comuns.
<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<meta charset=”utf-8”>
<title>CSS Transition</title>
<style type=”text/css” media=”screen”>
a {
color:white;
background:gray;
-webkit-transition: 0.5s linear;
}
a:hover {
color:black;
background:red;
-webkit-transition: 0.5s linear;
}
</style>
</head>
<body>
</body>
</html>
browser qual o valor inicial e o valor final para que ele aplique a transição automaticamente, con-
trolamos praticamente apenas o tempo de execução. Para termos mais controle sobre a animação
@-webkit-keyframes rodar {
from {
-webkit-transform:rotate(0deg);
}
to {
-webkit-transform:rotate(360deg);
}
}
O código acima define um valor inicial e um valor final. Agora vamos aplicar esse código a um
O código HTML até agora é este. Fiz apenas um div e defini este keyframe:
<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<title></title>
<meta charset=”utf-8”>
<style>
@-webkit-keyframes rodaroda {
from {
-webkit-transform:rotate(0deg);
}
to {
-webkit-transform:rotate(360deg);
}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
Primeiro você define a função de animação, no caso é o nosso código que define um valor inicial de
0 graus e um valor final de 360 graus. Agora vamos definir as características deste DIV.
div {
width:50px;
height:50px;
margin:30% auto 0;
background:black;
}
Nas primeiras linhas defini qual será o estilo do div. Ele terá uma largura e uma altura de 50px. A
margin de 30% do topo garantirá um espaço entre o objeto e o topo do documento, e background
preto.
shortcode bem simples. Veja a tabela logo a seguir para entender o que cada propriedade significa:
Propriedade Definição
duration
function Existem uma série de valores possíveis e que pode ser que o seu navegador
ainda não suporte, mas são eles: ease, linear, ease-in, ease-out, ease-in-out,
ber>, <number>)]*
animation- Define o número de vezes que o ciclo deve acontecer. O padrão é um, ou
interation-count seja, a animação acontece uma vez e pára. Pode ser também infinito defi-
animation-play- Define se a animação está acontecendo ou se está pausada. Você poderá por
state exemplo, via script, pausar a animação se ela estiver acontecendo. Os valo-
animation-delay Define quando a animação irá começar. Ou seja, você define um tempo
imediatamente.
Voltando para o nosso código, vamos aplicar algumas dessas propriedades:
div {
width:50px;
height:50px;
margin:30% auto 0;
background:black;
-webkit-animation-name: rodaroda;
-webkit-animation-duration: 0.5s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
-webkit-animation-direction: alternate;
Veja que na propriedade animation-name chamamos o mesmo nome que demos na nossa função
de keyframe logo no começo da explicação. Depois definimos uma duração de ciclo de meio se-
gundo. Definimos que o comportamento da animação será linear, e com a propriedade animation-
iteration-count definimos que ele girará infinitamente. E por último definimos pelo animation-di-
rection que a animação deverá ser alternada, ou seja, o DIV girará para um lado, e quando alcançar
Podemos melhorar esse código utilizando a versão shortcode, que é mais recomendado. Veja a or-
div {
width:50px;
height:50px;
margin:30% auto 0;
background:black;
Definindo ciclos
Nós definimos no keyframe do nosso último exemplo apenas um início e um fim. Mas e se quisés-
semos que ao chegar na metade da animação o nosso elemento ficasse com o background verme-
lho? Ou que ele mudasse de tamanho, posição e etc.? É aí onde podemos flexibilizar melhor nosso
keyframe definindo as fases da animação. Por exemplo, podemos dizer para o elemento ter uma cor
de background diferente quando a animação chegar aos 10% do ciclo, e assim por diante.
Veja o exemplo:
@-webkit-keyframes rodaroda {
0% {
-webkit-transform:rotate(0deg);
}
50% {
background:red;
-webkit-transform:rotate(180deg);
}
100% {
-webkit-transform:rotate(360deg);
}
}
Definimos acima que o início da animação o elemento começará na posição normal, 0 graus.
Quando a animação chegar aos 50% do ciclo, o elemento deverá ter girado para 180 graus e o ba-
ckground dele deve ser vermelho. E quando a animação chegar a 100% o elemento deve ter girado
ao todo 360 graus e o background, como não está sendo definido, volta ao valor padrão, no nosso
caso black, que foi definido no CSS onde formatamos este DIV.
Logo nosso elemento girará pra sempre e ficará alternando a cor de fundo de preto para vermelho.
Fiz um exemplo bem simples modificando apenas o background, mas você pode muito bem definir
mero de estágios: 5%, 10%, 12%, 16% e etc... Adequando as fases da animação às suas necessidades.
Há exemplos muito interessantes na internet onde podemos ver todo o poder das animações feitas
pela CSS. Veja o exemplo que fizemos aqui neste texto no endereço: http://migre.me/4ubym
vivíamos antes de conhecê-la. É muito mais fácil entender testando na prática, por isso sugiro que
se você estiver perto de um computador, faça testes enquanto lê este texto. A explicação pode não
Esta propriedade ainda está em fase de testes pelos browsers, por isso utilizaremos os prefixos para
ver os resultados.Utilizarei apenas o prefixo do Safari, mas o Firefox já entende essa propriedade
muito bem.
A sintaxe do border-image se divide em três partes: 1) URL da imagem que será utilizada. 2)
Tamanho do slice das bordas. 3) Como o browser irá aplicar a imagem na borda.
a {
display:block;
width:100px;
-webkit-border-image: url(border.gif) 10 10 10 10 stretch;
}
Acima definimos uma imagem com o nome de border.gif, logo depois definimos o width de cada
uma das bordas do elemento. A sintaxe é igual a outras propriedades com 4 valores: top, right, bot-
tom, left. E logo depois colocamos qual o tipo de tratamento que a imagem vai receber.
Dividindo a imagem
Para posicionar a imagem devidamente em seu objeto o browser divide a imagem em 9 seções:
superior esquerdo, o 3 no canto superior direito e assim por diante. Se você fizer o teste, a imagem
aparecerá no elemento como se estivesse desproporcional. Isso é normal porque a imagem deve
Comportamento da imagem
O comportamento da imagem é a parte mais importante porque define como o centro da imagem
(no caso do nosso exemplo a seção de número 5), irá ser tratada. Há vários valores, mas que é mais
simples de se entender é a stretch, que estica e escala a imagem para o tamanho do elemento aplica-
do. Há outros valores como round e repeat. Mas hoje alguns browsers não tem tanto suporte e aca-
bam ou ignorando esses valores ou como no caso do Safari e o Chrome, interpretam o round como
o repeat. Vamos nos concentrar com o stretch e você entenderá como funciona a propriedade.
Aplicação
Vamos utilizar a imagem abaixo para aplicar a propriedade. Iremos fazer um botão ao estilo iPho-
ne. A coisa é simples e sugiro que você faça testes individualmente brincando com os valores das
bordas e com diversas outras imagens para ver como funciona o recurso.
Irei aplicar o estilo em um link. O código que irei aplicar segue abaixo:
a {
display:block;
width:100px;
text-align:center;
font:bold 13px verdana, arial, tahoma, sans-serif;
text-decoration:none;
color:black;
}
Para inserir a imagem, colocamos as duas linhas abaixo:
border-width:10px;
-webkit-border-image: url(button.png) 10 stretch;
Defini com a primeira linha que a borda teria 10px de largura com a propriedade border-width. Na
segunda linha define que a imagem utilizada seria a button.png, que as áreas da imagem teriam que
se estender por 10px, e o valor stretch define que a imagem cobrirá o elemento inteiro, o resultado
segue abaixo:
Para você ver como tudo ali é meio estranho. Se eu diminuir o valor de 10 do border-image, que é
o valor que define quanto a imagem deve se estender nas bordas, veja como fica:
Temos o border-width definindo a largura da borda, mas não temos nenhum valor dizendo quanto
Os efeitos são bem estranhos quando esses valores estão mal formatados. Por isso, teste na prática
essa propriedade para que não haja problemas a implementar em seus projetos. O pulo da gato,
lados? Você sabe que para criar algo parecido você não pode utilizar uma imagem só. A solução
até hoje seria criar 4 elementos divs aninhados (ou seja, um dentro do outro) e aplicar um pedaço
deste background em cada um destes elementos para dar a sensação de um background único. O
resultado é interessante mas o meio que isso é feito não é nada bonito. Você era obrigado a declarar
4 elementos “inúteis“ no seu HTML apenas para compensar um efeito visual. A possibilidade de
atribuirmos múltiplos backgrounds em apenas um elemento é a feature que vai ajudá-lo a não sujar
seu código.
A sintaxe para múltiplos backgrounds é praticamente idêntica a sintaxe para definir um back-
div {
width:600px;
height:500px;
background:
url(img1.png) top left repeat-X,
url(img2.png) bottom left repeat-Y;
}
Definimos apenas uma propriedade background, o valor dessa propriedade em vez de conter ape-
nas um valor como normalmente fazemos, poderá haver vários, com suas respectivas definições de
res tem problemas crossbrowser ou por falta de recursos mais avançados. Mas se você parar para
pensar, apenas uma propriedade cuida dessa parte, que é a propriedade float. De longe, para mim,
o float é a propriedade mais importante que há no CSS. Se o IE não soubesse o que é float, até hoje
nós não estaríamos fazendo sites com CSS. O float cuida de toda a diagramação do site, desde os
elementos que definirão as áreas mestres do site até os pequenos detalhes de imagens e ícones.
efeitos que a propriedade float causa nos elementos próximos. Se você pede para duas colunas fica-
rem flutuando à esquerda e outra coluna à direita, o rodapé sobe. Ou se você coloca um elemento
envolvendo outros elementos com float, esse elemento perde a altura. Estes são problemas corri-
queiros que já tem soluções inteligentes e que não apresentam chateações mais graves.
Infelizmente o float não é o ideal para a diagramação e organização dos elementos do layout. Ele
resolve muitos problemas, mas deixa a desejar em diversos sentidos. O float está completamente
ligado a ordem dos elementos no HTML. Existem técnicas que você consegue fazer quase que
qualquer organização visual sem encostar no código HTML. Mas há outras necessidades que in-
variavelmente você precisará modificar a ordem dos elementos no meio do HTML para que a
diagramação do site saia conforme o esperado. Essa organização do HTML pode alterar desde pro-
gramação server-side e até resultados de SEO e acessibilidade. Por isso é interessante que o HTML
fique organizado de forma que ele supre as necessidades dessas bases. Sua organização visual deve
Tendo em vista estes e outros problemas o W3C criou um novo módulo. Na verdade ele não é o
único, e nem pode ser para que tenhamos diversas formas de trabalhar. O módulo em questão é
chamado de Template Layout. Esse módulo consiste em uma forma de criarmos e organizarmos os
tres e grid a ser seguido. 2) Formatação de font, cores, background, bordas etc.
Essa política é chamada de template-based positioning (não tem nada a ver com a propriedade
position, pelo contrário é uma alternativa) que dá ao elemento uma grid invisível para alinhar seus
elementos descendentes.
Porque o layout deve se adaptar em diferentes janelas e tamanhos de papéis, as colunas e linhas do
•P áginas complexas com múltiplas barras de navegação em áreas com posições fixas como
publicidade, submenus e etc.
• Formulários complexos, onde o alinhamento de labels e campos podem ser facilmente defi-
nidos com as propriedades deste módulo com a ajuda das propriedades de margin, padding
e tables.
• GUIs, onde botões, toolbars, labels, ícones etc, tem alinhamentos complexos e precisam estar
sempre alinhados caso o tamanho ou a resolução da tela mudam.
• Medias que são paginadas, como medias de impressão onde cada página são divididos em
áreas fixas para conteúdos de gêneros diferentes.
Template-based positioning são uma alternativa para a propriedade position com o valor abso-
lute. Antigamente lembro-me que quase todos os desenvolvedores tentavam organizar e diagra-
mar layouts utilizando position. Não que seja errado, mas definitivamente não é a melhor for-
ma. Costumo dizer em meus cursos e palestras que position é para detalhes. Nada muito grande,
mas para pequenos detalhes. Usamos position para posicionarmos elementos que não tem rela-
ção direta com sua posição no código HTML. Ou seja, não importa onde o elemento esteja, o
seus elementos. O mapeamento dos slots é feito com duas propriedades que já conhecemos que
este módulo adiciona mais alguns valores e funcionalidades, são as propriedades position e display.
A propriedade display irá definir como será o Grid. Quantos slots e etc.
<div class=”geral”>
<nav class=”menu”>...</nav>
<aside class=”menulateral”>...</aside>
<aside class=”publicidade”>...</aside>
<article class=”post”>...</article>
<footer>...</footer>
</div>
Agora iremos definir a posição destes elementos. O código CSS seria assim:
.geral {
display: “aaa”
“bcd”
“eee”;
}
nav.menu {position:a;}
aside.menulateral {position:b;}
aside.publicidade {position:d;}
article.post {position:c;}
footer {position:e;}
Aqui o elemento display trabalha como um table, onde seu conteúdo será colocando em colunas
e linhas. A única diferença é que o número de linhas e colunas não dependem do conteúdo é fixa
não importa.
Existem alguns valores para que você trabalhe: letra, @ (arroba) e “.” (pronto).
Cada letra diferente é um slot de conteúdo diferente. O @ define um sinal para um slot padrão. E o
Quando repetimos as letras como no exemplo anterior, tanto na horizontal quanto na vertical, é
formado um slot único que se expande para o tamanho da quantidade de slots. Lembra do colspan
Não é possível fazer um slot que não seja retangular ou vários slots com a mesma letra. Um templa-
te sem letra nenhuma também não é possível. Um template com mais de um @ também é proibido.
Se houverem esses erros a declaração é ignorada pelo browser.
Pra definir a altura da linha (row-height) podemos utilizar o valor padrão “auto”, que define altura
que a altura da linha é feito de acordo com a quantidade de conteúdo no slot. Você pode definir um
valor fixo para a altura. Não é possível definir um valor negativo. Quando definimos um * (asterís-
co) para a altura, isso quer dizer que todas as alturas de linha serão iguais.
A largura da coluna (col-width) é definida com valores fixos, como o row-height. Podemos definir
também o valor de * que funciona exatamente igual ao altura de linha, mas aplicados a largura da
coluna. Há dois valores chamados max-content e min-content que fazem com que a largura seja
determinada de acordo com o conteúdo. Outro valor é o minmax(p,q) que funciona assim: a lar-
gura das colunas são fixadas para ser maiores ou iguais a p e menores ou iguais a q. Pode haver um
espaço branco (white space) em volta de p e q. Se q > p, então q é ignorado e o minmax(p,q) é trata-
Para definir a altura dos slots, utilizamos uma sintaxe diretamente na propriedade display. Veja
display: “a a a” /150px
“b c d”
“e e e” / 150px
100px 400px 100px;
display: “a a a” /150px
“b c d”
“e e e” /150px
100px 400px 100px;
Ou seja, a primeira coluna do grid terá 100px de largura, a segunda 400px e a terceira 100px.
As medidas que coloquei ao lado, iniciando com uma / (barra) definem a altura das linhas. Logo a
primeira linha terá 150px e a terceira linha também. A linha do meio, como não tem altura definida
O espaço entre as colunas são definidos com “.” (pontos). Veja o exemplo abaixo:
display: “a a a” /150px
“. . .” /50px
“b c d”
“. . .” /50px
“e e e” /150px
100px 400px 100px;
Isso quer dizer que entre as colunas do grid haverá um espaço em branco de 50px de altura. Veja a
plate. Você escreve apenas uma letra por elemento. Vários elementos podem ser colocados em um
Abaixo veja uma imagem que pegamos diretamente do exemplo do W3C. O layout é muito simples:
<ul id=”nav”>
<li>navigation</li>
</ul>
<div id=”content”>
<div class=”module news”>
<h3>Weather</h3>
<p>There will be weather</p>
</div>
<div class=”module sports”>
<h3>Football</h3>
<p>People like football.</p>
</div>
<div class=”module sports”>
<h3>Chess</h3>
<p>There was a brawl at the chess tournament</p>
</div>
<div class=”module personal”>
<h3>Your Horoscope</h3>
<p>You’re going to die (eventually).</p>
</div>
<p id=”foot”>Copyright some folks</p>
</div>
Agora veja o CSS com toda a mágica:
body {
display: “a b”
10em *;
}
#nav {
position: a;
}
#content {
position: b;
display: “c . d . e “
“. . . . . “ /1em
“. . f . . “
* 1em * 1em *;
}
.module.news {position: c;}
.module.sports {position: d;}
.module.personal {position: e;}
#foot {position: f;}
Lembre-se que não importa a posição dos elementos no código. E essa é a mágica. Podemos or-
ganizar o código HTML de acordo com nossas necessidades e levando em consideração SEO,
Pseudo-elemento ::slot()
Você pode formatar um slot especifico simplesmente declarando-o no CSS. Suponha que você
queira que um determinado slot tenha um fundo diferente, alinhamento e etc... Essa formatação
será aplicada diretamente no slot e não no elemento que você colocou lá. Fica mais simples de se
formatar porque você não atrela um estilo ao elemento e sim ao slot. Se você precisar posicionar
RGBA
Normalmente em web trabalhamos com cores na forma de hexadecimal. É a forma mais comum
e mais utilizada desde os primórdios do desenvolvimento web. Mesmo assim, há outros formatos
menos comuns que funcionam sem problemas, um destes formatos é o RGB. O RGB são 3 con-
juntos de números que começam no 0 e vão até 255 (0% até 100%), onde o primeiro bloco define
a quantidade de vermelho (Red), o segundo bloco a quantidade de verde (Green) e o último bloco
a quantidade de azul (Blue). A combinação destes números formam todas as cores que você pode
imaginar.
No HTML o RGB pode ser usado em qualquer propriedade que tenha a necessidade de cor, como:
p {
background:rgb(255,255,0);
padding:10px;
font:13px verdana;
}
Até então nós só podíamos escrever cores sólidas, sem nem ao menos escolhermos a opacidade
dessa cor. O CSS3 nos trouxe a possibilidade de modificar a opacidade dos elementos via pro-
priedade opacity. Lembrando que quando modificamos a opacidade do elemento, tudo o que está
contido nele também fica opaco e não apenas o background ou a cor dele. Veja o exemplo abaixo
e compare as imagens.
Agora com o bloco branco, marcado com um P, com opacidade definida. Perceba que o back-
Isso é útil mas dificulta muito quando queremos que apenas a cor de fundo de um determinado
elemento tenha a opacidade modificada. É aí que entra o RGBA. O RGBA funciona da mesma
forma que o RGB, ou seja, definindo uma cor para a propriedade. No caso do RGBA, além dos 3
canais RGB (Red, Green e Blue) há um quarto canal, A (Alpha) que controla a opacidade da cor.
Nesse caso, podemos controlar a opacidade da cor do background sem afetar a opacidade dos ou-
tros elementos:
Veja um exemplo de código aplicado abaixo:
p {
background:rgba(255,255,0, 0.5);
padding:10px;
font:13px verdana;
}
O último valor é referente ao canal Alpha, onde 1 é totalmente visível e 0 é totalmente invisível. No
currentColor
O valor currentColor é muito simples de se entender e pode ser muito útil para diminuirmos o
retrabalho em alguns momentos da produção. Imagine que o currentColor é uma variável cujo seu
valor é definido pelo valor da propriedade color do seletor. Veja o código abaixo:
p {
background:red;
padding:10px;
font:13px verdana;
color: green;
border:1px solid green;
}
Note que o valor da propriedade color é igual ao valor da cor da propriedade border.
Há uma redundância de código, que nesse caso é irrelevante, mas quando falamos de dezenas de
arquivos de CSS modulados, com centenas de linhas cada, essa redundância pode incomodar a
seletor o valor da propriedade color. Veja o código abaixo para entender melhor:
p {
background:red;
padding:10px;
font:13px verdana;
color: green;
border:1px solid currentColor;
}
Veja que apliquei o valor currentColor onde deveria estar o valor de cor da propriedade border.
Agora, toda vez que o valor da propriedade color for modificado, o currentColor aplicará o mesmo
Isso funciona em qualquer propriedade que faça utilização de cor como background, border, etc.
Obviamente não funciona para a propriedade color. O currentColor também não funciona em se-
letores separados, ou seja, você não consegue atrelar o valor da propriedade color ao currentColor
de outro seletor.
11. PAGED MEDIA
Com certeza você já deve ter tentado ler um livro ou uma apostila em algum site na web e preferiu
imprimir o texto para ler off-line, no papel por ser mais confortável ou por ser mais prático quando
não se está conectado. Existem vários motivos para que um leitor queira imprimir o conteúdo de
um site, principalmente sites com textos longos e pesados. Durante muito tempo o principal mo-
tivo era que ler na tela do computador era cansativo. Hoje isso ainda é um problema, mas com o
avanço das telas e do aparecimento das tablets no mercado, você consegue passar mais tempo na
frente de uma tela lendo grandes quantidades de texto. O problema é que geralmente a organização
Outro problema comum é que nós desenvolvedores não temos uma maneira fácil de formatar pági-
nas. Na verdade temos, mas é um pouco de gambiarra e claro, não é maneira correta. A especifica-
ção de Paged Media traz nos possibilita formatar as páginas, transparências (aqueles “plásticos“ que
usamos com retroprojetores) ou até mesmo páginas que serão vistas pelo monitor. Controlaremos
Nota: Para você não se confundir, quando digo páginas, quero dizer páginas físicas, de papel, não
@page
Definiremos com CSS3 um modelo de página que especifica como o documento será formatado
em uma área retangular, chamada de page box, com larguras e alturas limitadas. Nem sempre o
page box tem referência correspondente para uma folha de papel física, como normalmente conhe-
cemos em diversos formatos: folhas, transparências e etc. Esta especificação formata o page box,
mas é o browser ou o meio de acesso que o usuário está utilizando que tem a responsabilidade de
caixa retangular que será sua área de impressão. Isso é como se fosse um viewport do browser.
Como qualquer outro box, a page box tem margin, border, padding e outras áreas. O conteúdo e as
A área de conteúdo do page box é chamada de area da página ou page area. O conteúdo do docu-
mento flui na área de página. Os limites da área da página na primeira página estabelece o retângu-
A área da margem da page box é dividido em 16 caixas de margem ou margin boxes. Você pode
definir para cada caixa de margem sua própria borda, margem, padding e áreas de conteúdo.
Normalmente essas caixas de margem são usadas para definir headers e footers do documento.
As propriedades do page box são determinadas pelas propriedades estabelecidas pelo page context,
o qual é a regra de CSS @page. Para definir a largura e altura de uma page box não se usa as pro-
priedades width e height. O tamanho da page box é especificada utilizando a propriedade size no
page context.
Page box
O page box é onde tudo acontece. Tenha em mente que o page box é o viewport das medias impres-
sas. É lá que conterá as áreas de margem, padding, border e onde o texto será consumido.
A largura e altura do page box é determinada pela propriedade size. Em um caso simples, o page
box tem a largura e a altura de uma folha. Entretanto em casos complexos onde page box difere
das folhas de papel em valores e orientações já que você pode personalizar de acordo com sua
necessidade.
Page area
Margin box
Margin boxes contém boxes para header e footer. São conjunto de 16 boxes onde você pode inserir
conteúdo útil como número da página, título do livro, etc, etc, etc. Essas áreas ficam fora do Page
area. Cada um tem suas margins, paddings e bordas individuais. Veja o diagrama abaixo para vi-
sualizar melhor.
Page sheet
A folha, a página, a superfície que será impresso o conteúdo. A ilustração abaixo mostra a repre-
A área de não impressão é a área onde o dispositivo de impressão não é capaz de imprimir. Esta
área depende do dispositivo que você está utilizando. O page box fica dentro da área de impressão.
Área de impressão
tamanho da page sheet menos a área de não impressão. Como a área de não impressão, a área útil
de impressão depende muito do dispositivo. O dispositivo pode ajustar o conteúdo para que seja
impresso sem problemas nessa área. Cada dispositivo tem seu meio de ajuste.
Propriedade size
A propriedade size especifica o tamanho e a orientação da área do de conteúdo, o page box. O ta-
manho do page box pode ser definida com valores absolutos (px) ou relativos (%). Você pode usar
auto
O page box irá ter o tamanho e orientação do page sheet escolhido pelo usuário.
landscape
Define que a página será impressa em modo paisagem. O page box neste caso tem o mesmo ta-
manho da página, mas o lado maior é o horizontal. Se o tamanho da página não for definido, o
portrait
Define que a página será impressa em modo retrato. O page box neste caso tem o mesmo tamanho
da página, mas o lado maior é o vertical. Se o tamanho da página não for definido, o tamanho é
@page {
size: auto; /* auto is the valor padrão */
margin: 10%; /* margem */
}
Como nessa caso a margem é variável, ela está sendo relativa às dimensões da página. Logo se a
página uma A4, com as dimensões: 210mm x 297mm, as margens serão 21mm e 29.7mm.
Outro exemplo:
@page {
size: 210mm 297mm; /* definem o page-sheet para um tamanho de A4
*/
}
Page-size
O page-size pode ser especificado utilizando um dos media names abaixo. Isso é o equivalente a
utilizar os valores escritos diretamente na propriedade size. Contudo é muito melhor utilizar o
Formato Descrição
A5 A página deve ser definida para o tamanho ISO A5: 148mm x 210mm.
A4 A página deve ser definida para o tamanho ISO A4: 210 mm x 297 mm.
A3 A página deve ser definida para o tamanho ISO A3: 297mm x 420mm.
B5 A página deve ser definida para o tamanho ISO B3 media: 176mm x 250mm.
B4 A página deve ser definida para o tamanho ISO B4: 250mm x 353mm.
letter A página deve ser definida para o tamanho papel carta: 8.5 pol x 11 pol
@page {
size: A4 landscape;
}
O W3C tem uma especificação muito extensa que pode ser encontrada aqui:
Para que isso funcione, nós disponibilizamos as fontes necessárias em seu servidor e linkamos estas
fontes no arquivo CSS. A sintaxe é bem simples e tem suporte a todos os navegadores, com algumas
ressalvas.
@font-face {
font-family: helveticaneue;
src: url(helveticaNeueLTStd-UltLt.otf);
}
Na primeira linha você customiza o nome da font que você usará durante todo o projeto. Na segun-
da linha definimos a URL onde o browser procurará o arquivo da font para baixar e aplicar no site.
Suponha que o usuário tenha a font instalada, logo ele não precisa baixar a font, assim podemos
indicar para que o browser possa utilizar o arquivo da própria máquina do usuário. Menos requi-
@font-face {
font-family: helveticaneue;
src: local(HelveticaNeueLTStd-UltLt.otf),
url(HelveticaNeueLTStd-UltLt.otf);
}
Typography extensions
Format)
Compatibilidade
As versões 7, 8 e 9 do Internet Explorer aceitam o @font-face apenas se a font for EOT. Você pode
encontrar qualquer conversor online que esse problema é resolvido. Você pode converter suas fon-
tes para EOT diretamente no Font Squirrel. O Safari, Firefox, Chrome e Opera aceitam fontes em
TTF e OTF.
Para suprir a necessidade de atenção do Internet Explorer, você precisa especificar a URL da font
.eot para que o Internet Explorer possa aplicar a font corretamente. A sintaxe fica desta forma:
@font-face {
font-family: helveticaneue;
src: url(helveticaNeueLTStd-UltLt.eot);
src: url(helveticaNeueLTStd-UltLt.otf);
}
Kit de sobrevivência
O Font Squirrel fez um pequeno favor para toda a comunidade. É um sisteminha que con-
verte suas fontes para os formatos necessários e te devolve para você utilizar em seus sites:
http://migre.me/4qST9
13. PRESENTATION-LEVELS
A informação na web é reutilizada de diversas maneiras. Toda informação publicada é reutilizada
por diversos meios de acesso, seja o seu browser, leitor de tela ou robôs de busca. O HTML propor-
ciona essa liberdade para a informação. Por ser uma linguagem muito simples, podemos reutilizar
a informação marcada com HTML em diversos meios de acesso. Mas o HTML não cuida da forma
com que o usuário vai visualizar a informação em seu dispositivo. O HTML apenas exibe a infor-
mação. A maneira que o usuário consome essa informação é diferente em cada um dos meios de
acesso e dispositivos. É aí que entra todo o poder do CSS. O CSS formata a informação para que
ela possa ser acessível em diversos usar agents (meios de acesso). Se você acessa o site do seu banco
pelo monitor de 22’’ da sua casa ou pelo seu celular, a informação tem que aparecer bem organizada
Além disso podemos apresentar a informação de diversas formas em um mesmo dispositivo. Por
exemplo: você pode ver uma galeria de imagens da maneira convencional, clicando nas thumbs das
fotos ou ver em forma de slideshow. Podemos levar essas experiências para websites de conteúdo
textual também. A especificação de presentation-levels é uma das especificações que levam o usu-
ário a terem conteúdo mostrados de uma outra forma da qual estamos acostumados. É muito útil
para apresentações de slides, com efeitos, transições e etc ou qualquer documento que seria mais
bem apresentado no formato de apresentação, como uma proposta, documentos técnicos e etc.
O EPL pode ser explicito em uma folha de estilo ou calculado automaticamente baseado na posição
do elemento pela estrutura do documento. É assim que o browser calcula para mostrar os elemen-
level, at-level e above-level. Dependendo da pontuação de EPL que o browser dá, o elemento fica
em um determinado nível. Essas pseudo-classes podem e devem ser modificadas via CSS.
A propriedade presentation-level
A propriedade presentation-level define como os valores de apresentação (EPL) de um determi-
nado objeto devem ser calculados. São três valores possíveis: números inteiros, increment e same.
Quando colocamos increment, o valor do objeto aumenta um ponto em relação ao objeto anterior.
Suponha que há duas LI em uma UL. A primeira LI tem o valor de 1, a segunda tem valor de 2 e
assim por diante.
Quando definimos o valor same, o browser computa o mesmo valor do objeto anterior.
<!DOCTYPE html>
<html>
<body>
<h1>strategies</h1>
<h2>our strategy</h2>
<ul>
<li>divide</li>
<li>conquer
<p>(in that order)</p>
</li>
</ul>
<h2>their strategy</h2>
<ul>
<li>obfuscate</li>
<li>propagate</li>
</ul>
</body>
</html>
Vamos definir o CSS de presentation-levels para esse HTML adicionado o código CSS:
@media projection {
h1 { page-break-before: always }
li { presentation-level: increment }
:below-level { color: black }
:at-level { color: red }
:above-level { color: silver }
}
Mas o mais importante é a propriedade presentation-level que definimos para a LI. Isso quer dizer
As três pseudo-classes que falamos no começo do texto: below-level, at-level, above-level, que for-
mata os elementos que foram mostrados anteriores, o que elemento que está sendo mostrado e o
próximo elemento.
Sendo assim, o browser calcula a pontuação de cada um dos elementos utilizados no exemplo
<h1>strategies</h1> 0
<h2>our strategy</h2> 0
<ul> 0
<li>divide</li> 1
<li>conquer</li> 2
</ul> 0
<h2>their strategy</h2> 0
<ul> 0
<li>obfuscate</li> 1
<li>propagate</li> 2
</ul> 0
<!DOCTYPE html>
<html>
<style>
@media projection {
h1 { presentation-level: 0; }
h2 { presentation-level: 1; }
h3 { presentation-level: 2; }
body * { presentation-level: 3; }
:above-level { display: none; }
}
</style>
<body>
<h1>strategies</h1>
<h2>our strategy</h2>
<ul>
<li>divide</li>
<li>conquer</li>
</ul>
<h2>their strategy</h2>
<ul>
<li>obfuscate</li>
<li>propagate</li>
</ul>
</body>
</html>
Perceba que agora definimos no CSS que tudo dentro de body tem o valor de 3. Logo o H1 que foi
Definimos também display:none; para os próximos elementos. Agora veja a pontuação aplicada:
HTML Valor de EPL
<h1>strategies</h1> 3
<h2>our strategy</h2> 2
<ul> 0
<li>divide</li> 0
<li>conquer</li> 0
</ul> 0
<h2>their strategy</h2> 2
<ul> 0
<li>obfuscate</li> 0
<li>propagate</li> 0
</ul> 0
http://www.w3.org/TR/css3-preslev/