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:

AddType application/x-httpd-php .css

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

9 respostas para “Como embutir código PHP em arquivos CSS”

  1. Olá,

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

    []'s

    Rafael Goulart

  2. Flávio disse:

    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

  3. Adriano disse:

    Muito bacana, de verdade, valew a dica!

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

  5. Nit disse:

    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!

  6. polly pocket disse:

    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.

    • Rafael Jaques disse:

      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!

  7. Jeferson Rossini disse:

    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.

  8. Thiago Cavali disse:

    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.

Deixe uma resposta