Como embutir código PHP em arquivos CSS

Prefácio

Já sentiu vontade de colocar condicionais no CSS? Já precisou colocar um belo de um IF do seu PHP dentro de uma folha de estilos pra resolver um problemão?

Pois então lhe mostro duas formas que podem resolver o seu problema! :D

Método 1

Este método é mais simples e utiliza um arquivo de extensão php apenas com um cabeçalho modificado. Basta adicionar um header dizendo ao navegador que o Content-type desse arquivo é text/css.

Vamos aproveitar pra passar um parâmetro (GET) para o arquivo! Caso exista e possua determinado valor, vamos trocar a cor do fundo da página!

Supondo que o nosso arquivo seja estilos.php, a estrutura ficaria mais ou menos assim:

<?php header('Content-type:text/css'); ?>

body {
   background-color: <?php echo (isset($_GET['fundo']) && $_GET['fundo'] == 'verde') ? '#0f0' /* Verde */ : '#00f' /* Azul */; ?>
}

E na hora de puxar o CSS para o seu HTML, vamos adicionar um parâmetro indicando que queremos o fundo verde. Caso apague ou altere o valor, o fundo ficará azul:

<link rel="stylesheet" type="text/css" media="screen" href="estilos.php?fundo=verde" />

Método 2

Já este modo é um pouquinho mais trabalhoso, mas permite que você mantenha seus arquivos com extensão css. Detalhe que só funciona com o Apache. Se você utiliza outro servidor, terá que procurar uma alternativa.

Crie um arquivo .htaccess (ou utilize um já existente) no diretório do arquivo css. Para fazer a mágica, apenas utilize a seguinte linha de código:

[code]AddType application/x-httpd-php .css[/code]

Isso fará com que o Apache interprete os arquivos .css daquele diretórios como arquivos PHP. Aí é só mandar ver! :-)

Conclusão

Espero que tenham gostado e que a dica tenha sido útil!

Um abraço a todos e fiquem com Deus.
Rafael Jaques

  • Olá,

    Muito do que a gente precisa de versatilidade no CSS já existe no LESS: http://lesscss.org/

    []'s

    Rafael Goulart

  • massa já usei os dois metodos e utiliza-lo pelo .htaccess traz uma facilidade futura caso vc tenha mais de um arquivo para trabalho.

    Parabéns pelo POST

  • Muito bacana, de verdade, valew a dica!

  • Sempre ajudando quando a gente precisa, parabéns pelo belo artigo, via me ajudar no meu blog novo.

  • Nit

    Pessoal, estou com um problema. Acredito q seja alguma configuração no tema, mas alguém poderia me ajudar? eu uso todas essas configurações sempre, mas no tema especifico que estou usando com as configurações de link personalizado a pagina fica assim http://meusite.info/clientes#go_page_now, se eu colocar no browser http://meusite.info/clientes ele cai na pagina, mas aparece esse #go_page_now ou clientes#go_page_73 na frente do endereço, as vezes as paginas não mudam quando clicadas, acredito que seja por esse motivo. Obs: no cabeçalho fica meusite|clinete mas no broweser fica como clientes#go_page_73 ou http://meusite.info/clientes#go_page_now. Se alguém poder me acender uma luz, ficarei muito grata.

    Obrigada!

  • Sobre esta resposta: “Sim, o PHP é pesado para ser chamado toda hora que for carregar o CSS, seria interessante cachear esse CSS em um arquivo .css mesmo.” Sou novato: o que significa cachear o css no arquivo .css? Um abraço.

    • Cache é um sistema que armazena uma cópia já compilada do seu arquivo.

      Você pode fazer isso no seu próprio servidor (utilizando alguma ferramenta do apache ou algo assim) ou então com um sistema de cache do PHP… Ou até mesmo um sistema de cache desenvolvido por ti.

      Só teria que estudar isso, porque não é algo que se explica em poucas linhas, mas o conceito básico é criar uma versão que não precisa ser compilada sempre que é executado…

      Só que se tu for ver, esse sistema aí é justamente para que seja sempre compilado, dependendo do usuário. Então tem que ver o que melhor se encaixa pra ti.

      Boa sorte!

  • Jeferson Rossini

    cara o tópico e meio antigo mais estou tendo problemas com o htacess… não esta pegando o
    AddHandler application/x-httpd-php .css … não sei oque fazer, uso uma hospedagem da hostgator, se alguem puder ajudar.. obg.

  • Thiago Cavali

    Olá, quando utilizei o arquivo .php como css da página que estou criando o html e o body da página criaram uma diferença de tamanho. Isso fez com que ficasse um tipo de "borda" ao fundo da minha página. Quando utilizava o css sem php isso não ocorria. Alguma sugestão sobre como contornar esse problema? Obrigado.

  • Jorge

    Deu certo utilizando o metodo 1. Porem, o problema é que se o usuario digitar na barra de endereco o endereco de onde esta o arquivo estilos.php, ele conseguira ver tudo que esta no arquivo, pois sera impresso na pagina. Alguma solucao pra isso?

    • Não sei se entendi. Se você incluir a URL completa, o arquivo PHP sempre será interpretado, não deixando vazar nenhum código.
      Caso você se refira ao CSS propriamente dito, não há o que fazer. Sempre que um código HTML, CSS, JS ou qualquer outro tipo de client-side está presente em uma página, o usuário sempre pode acessar seu conteúdo. A diferença é que com a extensão PHP sempre será acessado o resultado da interpretação do código.