A linguagem de marcação HTML ( Hyper Text Markup Language) foi desenvolvida e aperfeiçoada até tornar-se tal como a conhecemos nos dias atuais a partir de uma "invenção" devida a pesquisadores, para trafégo de seus textos e informações de natureza científica.
Assim, o embrião do HTML surgiu para servir a uma comunidade bastante restrita (a de cientistas). Com a introdução gradativa de novas tags e aplicações específicas àquela linguagem de marcação, HTML tornou-se o padrão mundial de exibição de conteúdo na Web.
E, já com várias inovações o HTML era usado para construção de páginas Web, que no início limitavam-se a exibir informações contidas nos documentos Web. A evolução vinha atropelando tudo com uma avalanche de novos aplicativos, facilidades, softwares, hardware e etc.
E o HTML não passou ao largo, pelo contrário, a simples linguagem de marcação destinada a apresentar conteúdos carecia de uma maior flexibilidade no sentido de manipular visualmente os conteúdos Web. Novas tags e atributos foram inventados tais como a tag <font> e o atributo "color" que permitiam alterar a aparência de textos. Assim nasceu a "estilização" dos conteúdos Web. E a evolução trazendo novas descobertas, corre célere neste dinamismo alucinante que estamos testemunhando.
Novas tags e novos atributos de estilo são introduzidos no HTML. Com isso, a velha linguagem de marcação passou a exercer uma dupla função na exibição de conteúdos. A função de exibir o conteúdo e a função de estilizá-lo (dar-lhe a aparência visual).
Mas, esta dupla função do HTML, paradoxalmente que possa parecer acabou trazendo sérios problemas aos projetistas Web.
O crescimento e sofisticação dos documentos Web publicados na Internet, estavam fugindo do controle de seus criadores.
Para uma idéia concreta do a que me refiro imagine a seguinte situação: seu melhor cliente telefona às 17:00h da tarde de uma sexta-feira (sempre ligam nesta hora para solicitar alguma coisa não é mesmo?) e diz o seguinte; "teremos uma reunião aqui na empresa, na segunda-feira às 0800h com um potencial comprador e é nossa intenção fazer uma apresentação dos nossos produtos através do site que você criou e mantém. Seguindo uma sugestão do nosso departamento de marketing precisamos mudar a cor de todos os títulos no site de verde para vermelho, pois que esta é a cor principal da marca do nosso comprador e com isso pretendemos fixar uma cumplicidade subliminar. Isto é bem simples de fazer, não é? Afinal é só mudar a cor! Dá para você "botar no ar" até às 19:30h ? Quero dar uma olhadinha antes de encerrar o expediente. OK?
Claro que você concorda e responde que vai providenciar rapidinho, afinal é só para mudar a cor. Mas, são 180 páginas no site! E os títulos são tags de cabeçalho deste tipo: <h1><font color="#00FF00">Texto do título</font></h1> Supondo uma média de 3 títulos por página, você tem um total de 540 tags <font> para editar e mudar o atributo "color". E se o seu cliente tivesse pedido para mudar a cor dos textos, e do fundo? Bem, este exemplo simples dá uma dimensão de um dos problemas criados com a mistura de marcação com estilização!
Cada vez mais ficava evidente que a mistura de marcação com estilização que maravilhou os projetistas Web no início, tornara-se uma grande dor de cabeça. E é claro, a solução passava por dissociar linguagem de marcação da estilização.
Desta necessidade, eu diria mesmo uma imposição, nasceu as CSS, sigla em inglês para "Cascading Style Sheet" que em português foi traduzido para Folha de Estilo em Cascata".
A partir de então, para conseguir esta dissociação, usaremos os elementos (tags) HTML exclusivamente para marcar e estruturar o conteúdo do documento. Nenhum elemento HTML será usado para alterar o visual, ou seja estilizar o conteúdo. A tarefa de estilização ficará a cargo das CSS que nada mais é do que um arquivo independente do arquivo HTML no qual são declaradas propriedades e valores de estilização para os elementos do HTML. Estas declarações de estilo quer sejam estruturadas em um arquivo externo com extensão .css quer sejam declaradas de outros modos (incorporadas, importadas, inline) contém todas as regras de estilo para os elementos do documento HTML.
Voltando àquela situação criada no item anterior, agora você mudaria a cor de TODOS os cabeçalhos <h1> em TODO o site em CINCO SEGUNDOS. Às 19:20h você retorna a ligação do cliente e pede para a secretária avisá-lo de que "já está no ar", sem maiores traumas, correrias e estresses. Ah e mais, mesmo que o site tivesse 1.800 páginas e não as 180 da situação criada, você gastaria os mesmos cinco segundos.
A idéia, a filosofia mesmo, de projeto web aponta para uso amplo das CSS, ainda não explorada em toda sua potencialidade por ocorrências de incompatibilidades de certas propriedades CSS com navegadores mais antigos e até mesmo com as interpretações diferentes das CSS por parte das aplicações de usuários de fabricantes distintos.
Há uma tendência (e torcemos para que se concretize) de que as novas tecnologias voltadas para o desenvolvimento, não só das variadas aplicações de usuário como também de softwares e hardwares, atendam e se enquadrem dentro das recomendações e especificações dos órgãos normatizadores com ênfase para a W3C.
Quando o projeto Web em todas as suas incontáveis variantes seguir a normatização e padronização recomendada pelos órgãos oficiais, teremos uma Web muito mais fácil, dinâmica e agradável.
Que estilo será aplicado, quando há mais de um estilo especificado para um elemento HTML?
Aqui entra o efeito cascata que nada mais é do que uma prioridade definida segundo regras conforme abaixo mostrado, onde o número quatro tem a prioridade a mais elevada:
1. Estilo default do browser; 2. Folha de Estilo Externa (importada e linkada); 3. Folha de Estilo Incorporada (definida na tag < head> do documento); 4. Estilo inline (dentro de um elemento HTML)
Assim, um estilo inline (dentro de um elemento HTML) tem a prioridade a mais elevada, o que significa que prevalecerá sobre aquele definido na tag <head> e este sobre o definido em uma Folha de Estilo Externa, e este sobre um inerente ao browser por default.