Desenvolvimento

Teste 13 - Observações sobre CSS

Notas Gerais

  • A maioria das pessoas não sabe que os browsers são deliberadamente projetados para assegurarem que cada tabela sofra download como uma entidade única. Portanto, nada do material contido numa tabela é mostrado até que todo o conteúdo desta tabela tenha sido recebido pela máquina do cliente e esteja disponível para visualização.
  • Folhas de estilo externas são tratadas como arquivos separados pelo browser. Quando o browser navega para uma nova página, usando a mesma folha de estilo, o arquivo de estilos externo não precisa passar novamente pelo download. As páginas que usam arquivos .CSS externos são, portanto, carregadas de forma mais rápida.
  • Quando uma dimensão nula (0) é usada, não é necessário especificar as unidades. 0px é o mesmo que 0. Não faz sentido atribuir uma unidade de medida quando o comprimento é zero, pois zero é a mesma distância em qualquer unidade de medida.
  • O valor relativo de unidade em é idêntico a um tamanho de 100%, ou seja, o tamanho da letra maiúscula "M". A medida ex, bem menos usada, corresponde à altura da letra minúscula "x".
  • Os efeitos das margens horizontais são cumulativos. As margens verticais, pelo contrário, não são cumulativas. Se houver dois elementos empilhados um sobre o outro, o espaçamento vertical entre eles corresponderá ao maior valor entre o estilo margin-bottom do elemento de cima e o estilo margin-top do elemento de baixo.
  • Todos os browsers aplicam um espaçamento padrão de 50 pixels ao lado esquerdo de uma lista. Este espaçamento é entendido de forma diferente entre os vários browsers existentes, sendo às vezes executado como margin e às vezes como padding. Por isso, sempre que estes estilos forem aplicados ao lado esquerdo de uma lista, deve-se assegurar de especificar ambos (usualmente colocando padding: 0 e usando margin para obter o efeito desejado.
  • Relativo ao estilo border, o valor hidden tem o mesmo efeito que none, exceto quando ele é aplicado ao layout de tabelas.

  • As cores nos computadores são formadas pela combinação de três tonalidades básicas (Red, Green e Blue), em várias intensidades. A seguir estão todos os meios possíveis de se definir uma mesma cor em CSS:
    • color: blue
    • color: rgb(0, 0, 255)
    • color: rgb(0%, 0%, 100%)
    • color: #0000ff
    • color: #00f
  • Todos os browsers têm valores default para as seguintes famílias de fontes genéricas:
    • serif
    • sans-serif
    • monospace
    • cursive
    • fantasy
    É prática comum colocar como última especificação numa declaração de fonte uma das classes genéricas acima, como garantia de último recurso caso todas as fontes com prioridade maior não estejam disponíveis no computador do usuário.
  • Agrupamento de propriedades de borda:
    • border: 2px ridge yellow
    • border: border-width border-style color
  • Agrupamento de propriedades de fonte:
    • font: italic small-caps bolder 13px/1em Arial, 'Comic Sans MS', sans-serif
    • font: [font-style] [font-variant] [font-weight] font-size/[line-height] font-family
    Os valores nos colchetes são opcionais. Os três primeiros (style, variant e weight) podem ser especificados em qualquer ordem. font-size é obrigatório. Caso especificado, line-height deve vir logo após font-size, devidamente precedido por uma barra (/). Por último, especifica-se a família de fontes font-family.
  • Agrupamento de propriedades de background:
    • background: transparent url(images/gifs/bg1.gif) no-repeat fixed top center
    • background: background-color background-image background-repeat background-position background-attachment
    Os cinco valores para background podem ser declarados em qualquer ordem, desde que sejam separados por espaços. As propriedades não especificadas assumem o seu valor default.
    O valor default de background-color é transparent, que não é herdado. Os valores possíveis para background-repeat são repeat (default), no-repeat, repeat-x e repeat-y.
    Os dois valores possíveis para background-attachment são fixed e scroll, sendo que este último é o default.
    A propriedade background-position é especial, pois permite que sejam especificados até dois valores, separados por espaços. Cada um deles pode ser uma medida de comprimento (pixels, pontos, etc.), uma porcentagem ou uma constante para o alinhamento horizontal (left, center, right) ou vertical (top, center, bottom). A especificação de apenas um valor refere-se somente ao posicionamento horizontal, com o alinhamento vertical assumindo o valor de 50%. Com duas medidas ou porcentagens, a primeira delas refere-se à horizontal e a segunda à vertical. Valores negativos são permitidos.
    Quando uma única constante é especificada, a outra dimensão é center por default. A ordem de especificação para duas constantes é irrelevante. É possível misturar valores de comprimento com porcentagens. Constantes e números, no entanto, não podem ser misturados.

O estilo display

Block level element - um exemplo deste tipo de elemento é o cabeçalho (heading, <h1>, <h2>, <h3>, etc.). Este elemento ocupa todo o espaço horizontal do objeto em que reside, por default. Logo, se a este elemento for aplicada uma propriedade background-color, ela será aplicada a todo o bloco horizontal que contém o cabeçalho. Por default, o estilo display destes elementos é igual a block.

Cabeçalho <h5> com background-color: #f6f
Mesmo cabeçalho, agora com o estilo display: inline

Aparentemente, nenhum estilo padding ou margin do elemento surte efeito quando display: inline é utilizado. Isso corresponde à idéia de 'dentro da linha' que a palavra inline implica.

Se para o estilo display for atribuído o valor none, o elemento não é mostrado, e o espaço que ele normalmente ocuparia é colapsado (excluído da visualização). Isto diferencia o estilo display: none de visibility: hidden, comumente usado para esconder o elemento, preservando o espaço que ele normalmente ocuparia se estivesse visível.

Sobre o posicionamento






Esta camada possui a definição de estilo position: relative. A definição do estilo position faz com que seja possível posicionar qualquer outra camada dentro desta. Caso não exista a definição de position, qualquer camada declarada internamente usa como referência o posicionamento do objeto externo à camada que a contém.

Há pequenas diferenças na visualização do posicionamento, decorrentes das diferenças entre os browsers e do uso da declaração DOCTYPE no início do documento.

Eis o código pertinente para as camadas mostradas acima:

<div style="position: absolute; left: 35px; top: 35px; background-color: #ff0">
    <p>Este é um parágrafo ...</p>
    <div style="position: absolute; left: 30px; top: 30px; background-color: #999">
        <p>Este é um parágrafo ...</p>
    <div>
<div>

Este é um parágrafo de uma camada posicionada absolutamente, contida numa camada com o estilo position: relative.

Este é um parágrafo de uma camada subordinada à camada amarela, também posicionada absolutamente.

Seletores CSS

Universal Selector
* {color: red}
Um estilo sem seletor (definido apenas pelo apóstrofo *) se aplica a todos os elementos de todos os tipos na página.

Element Selector
body {color: black; background-color: white}
É o seletor mais comum, pois se aplica a apenas um tipo de elemento HTML, sem qualificadores ou extensões.

Class Selector
 .special   {font-family: verdana, arial, sans-serif}
p.exclusive {font-family: verdana, arial, sans-serif}
Para definir uma classe basta acrescentar um ponto diante do seu nome. Não é permitido espaço entre o ponto e o nome da classe.
No primeiro exemplo acima, não há elemento HTML associado à classe special, logo a classe pode ser associada a qualquer elemento HTML da página.
Já a classe do segundo exemplo (exclusive) se aplica apenas ao elemento de parágrafo (<p>), e não tem efeito algum se usada com qualquer outro elemento da página.
Um elemento HTML pode pertencer a múltiplas classes se desejado, como mostrado no exemplo abaixo:
<p class="special exciting">Paragraph with 2 classes!</p>

ID Selector
#unique {font-size: 10px}
Este seletor é identificado pelo uso do caracter #, e sobrescreve quaisquer estilos definidos através do uso de uma classe. Os IDs são únicos no documento, não sendo permitido mais do que um elemento HTML com a mesma identificação de ID.

-------- Todos os seletores abaixo referem-se à especificação CSS2 --------
Pseudo-Element Selector
p:first-letter {font-face: Gothic, serif; font-size: 250%; float: left}
O seletor "pseudo-element" é único dentro da especificação CSS, já que ele não possui elemento ou atributo equivalente em HTML. A especificação CSS define apenas três destes seletores:
  • first-letter refere-se à primeira letra do elemento espeficado, sendo geralmente usado com tags de parágrafo (<p>).
  • first-line refere-se à primeira sentença do elemento (ou seria à primeira linha mostrada pelo browser, que é alterada sempre que o usuário redimensiona a sua janela de visualização?).
  • first-child refere-se ao primeiro elemento descendente do elemento ao qual é aplicado, de acordo com a hierarquia do documento HTML.
Pseudo-Class Selector
a:hover   {color: #fc0}
a:visited {color: blue}
div.code:hover {background-color: #000}
Um seletor "pseudo-class" aplica-se a todo o elemento em que é declarado, mas apenas sob certas condições. O usuário deve interagir com o elemento para que ele seja afetado pelos estilos definidos pela "pseudo-classe".
Além das duas pseudo-classes mostradas, a especificação CSS2 define ainda :active, :focus, :link e :lang().
O primeiro exemplo acima (:hover) faz com que todas as âncoras <a> recebam o estilo color: #fc0 quando o mouse desliza por cima do elemento.
O segundo exemplo (:visited) altera a cor de todas as âncoras <a> visitadas para o azul.
O terceiro exemplo aplica uma pseudo-classe à classe code exclusiva aos elementos <div>. Importante: o Internet Explorer 6 suporta apenas pseudo-classes de âncoras, e o terceiro exemplo não funciona neste browser especificamente.

Descendant Selector
li em {font-size: 16px; color: green}
Um "descendant selector" restringe a aplicabilidade dos estilos selecionados aos descendentes do elemento primário declarado. São usados espaços para separar os tipos de elementos concatenados.
No exemplo, todos os elementos de ênfase (<em>) que estiverem dentro de um item de uma lista (<li>) recebem fontes de 16 pixels e cor verde.

Parent-Child Selector
body > p {font-weight: bold}
Um "parent-child selector" faz com que uma regra de estilo se aplique a tags que obedecem uma seqüência específica de hierarquia entre elementos pais e filhos, num caso especial de "descendant selector".
No exemplo, todas as tags <p> que forem descendentes imediatas do elemento <body> recebem caracteres em negrito. Este estilo não se aplicará a nenhum elemento <p> que estiver inserido dentro de tags <div> ou <table>, por exemplo, muito embora estas tags estejam dentro de <body>.

Adjacent Selector
h1 + h2 {margin-top: 15px}
Adjacência se refere à seqüência em que elementos aparecem num documento HTML. No caso deste seletor, é a colocação dos elementos no documento que interessa, e não as suas relações hierárquicas.
No exemplo, o elemento <h2> colocado exatamente após um elemento <h1> é quem vai receber uma margem adicional de 11 pixels. Qualquer elemento <h2> subseqüente não receberá estilo algum. Um elemento <h2> que viesse depois de uma tag <p> localizada abaixo de um cabeçalho <h1> também não seria afetado.

Attribute Selectors
Depois eu escrevo sobre estes, são um pouco complicados e quase nunca usados (principalmente devido à incompatibilidade com o IE).