Posts com a tag: "CSS"

Rodapé sempre no fim da página (sem javascript)

Para o novo site da Hiperquímica(que ainda não foi ao ar) precisei de uma solução para manter o rodapé sempre no fim da página, independente da quantidade de conteúdo que viria antes. Uma pesquisa rápida no Google me levou até algumas alternativas que utilizavam javascript[bb] (não me agradaram nem um pouco) e outras que utilizavam somente CSS.

As alternativas com CSS em sua maioria utilizavam duas propriedades para o rodapé: “position:absolute” e “bottom:0″. O problema dessa solução é que se redimensionarmos a janela do navegador, o rodapé sobrepõe o conteúdo, veja um exemplo dessa aplicação.

Procurando em sites gringos, encontrei uma solução interessante no qrayg.com. Adaptei o arquivo e disponibilizei um exemplo com código-fonte mais enxuto, confira!

O arquivo com exemplo dessa solução está bem simples, então acredito que não haverá dúvidas. Mas se precisarem de algum esclarecimento, é só comentar!

Definindo a linguagem padrão do estilo aplicado no HTML

Geralmente inserimos folhas de estilo externas ou utilizamos o atributo style para inserir informações de estilo no HTML. A tag link é a opção mais utilizada e recomendada para inserir folhas de estilo externas, por exemplo:

<link href="cute.css" rel="stylesheet" type="text/css"/ >

Repare que nesse caso é informada qual a linguagem utilizada no estilo, através do type=”text/css”. Agora se você está utilizando o atributo style para estilos inline, o user agent pode não saber qual a linguagem utilizada no estilo aplicado. Ou se uma empresa desenvolver uma nova linguagem de estilos e um novo mime-type por exemplo, seria difícil impor e assegurar o funcionamento na plataforma de distribuição que temos hoje. Entretanto, existe uma maneira.

Se você precisar especificar uma linguagem padrão para todos os estilos aplicados no seu site, você pode utilizar uma meta tag no cabeçalho da sua página:

<meta http-equiv="Content-Style-Type" content="text/css"/>

E você pode inserir essa informação no header HTTP:

Content-Style-Type: text/css

Caso você utilize um servidor Apache, a partir da versão 2.0 você pode usar mod_headers e mod_setenvif no arquivo geral de configuração ou trabalhar a nível de diretório através do .htaccess:

SetEnvIf response Content-Type [text/html|application/xhtml+xml] html-content=1
Header add “Content-Style-Type: text/css” env=html-content

Vale lembrar que essas configurações não são ativadas por padrão na base de configuração do Apache[bb], se você quiser utilizá-las, deve ativá-las manualmente.

Obs: Este artigo é a tradução de um post do blog da W3C. Incluí alguns links para ajudar que, em alguns casos, podem refletir a minha opnião e de outros autores. Se houver dúvidas, comente!

Utilizando seletores de atributo no Internet Explorer 6

Uma das maiores utilidades dos seletores de atributo talvez seja estilizar formulários sem a utilização de classes. Entretanto, essa é uma técnica pouquíssima utilizada pois o Internet Explorer 6 e suas versões inferiores não interpretam o uso de seletores CSS.

Para estilizar o botão submit de um formulário utilizando seletores de atributo, podemos escrever o CSS da seguinte maneira:

input[type=submit] { propriedades }

Mas como o IE6 não interpreta esse código, geralmente aplica-se uma classe no submit do formulário ao invés de utilizar os seletores.


<form>
<label for="username">Nome</label><input type="text" id="username" />
<input type="submit" class=”submitButton” />
</form>

Pesquisando sobre seletores de atributo, encontrei este link no Shayna.com com um javascript que simula o uso de seletores de atributo no IE6. Basicamente, ele faz o que eu disse anteriormente, inclui uma classe para cada um dos elementos input existentes na página.

Para utilizá-lo, copie esse código e salve como ie6css.js.


function changeClasses(currentdoc) {
var inputElements = currentdoc.getElementsByTagName('input');
for (var i=0; i<inputElements.length; i++) {
if(inputElements[i].type == “submit”) {
inputElements[i].className = inputElements[i].className + ” submit”;
} else if (inputElements[i].type == “checkbox”) {
inputElements[i].className = inputElements[i].className + ” checkbox”;
} else if (inputElements[i].type == “radio”) {
inputElements[i].className = inputElements[i].className + ” radio”;
} else if (inputElements[i].type == “text”) {
inputElements[i].className = inputElements[i].className + ” textbox”;
}
}
}

E inclua esse código no cabeçalho da sua página:


<head>
<!--[if lt IE 6]><script type=”text/javascript” src=”assets/js/ie6css.js” ></script><![endif]–>
</head>
<body onload=”changeClasses(document)”>

</body>

Na verdade, o javascript só elimina o nosso trabalho de incluir uma classe para os elementos. Ele busca todos os input do html e inclui classes relativas ao tipo de cada input.

  • Para type=”submit” inclui uma classe submitbutton;
  • Para type=”checkbox” inclui uma classe checkbox;
  • Para type=”radio” inclui uma classe radio;
  • Para type=”text” inclui uma classe textbox;

Assim sendo, você precisa aplicar um estilo para cada uma das classes no seu arquivo CSS. Por exemplo:

input[type=submit],
input.submitbutton { propriedades }

Particularmente eu acho mais fácil incluir as classes manualmente, até porque se o internauta estiver com o javascript[bb] desabilitado corre-se o risco de perder alguma formatação.

Mas, de repente, pode ser útil em alguma situação específica.

Topo