Rails: Segmentando CSS por telas

Sites muito grandes acabam por ter arquivos CSS enormes, e que mesmo divididos em várias partes e utilizando @import, são carregados em todas as páginas e podem causar atraso no carregamento de páginas.

Não seria ideal que, por exemplo, nossa página de login possua uma folha de estilo própria, mas que este CSS seja carregado apenas quando estivermos na página de login? Seria, e é isso que vou abordar neste artigo, um pequeno mas útil truque, que aprendi em um dos videocasts da Railscasts.com .

A ídeia é bem simples, o rails possui uma tag chamada stylesheet_link_tag que cria um link para uma folha de estilos. Ela aparece geralmente no arquivo de layout escolhido, o que para quem não conhece o rails, é como se fosse o template principal, e todo conteudo gerado é encaixado dentro deste.

Isto funciona muito bem pois as folhas de estilo deve ser declaradas na tag HEAD do HTML. Porém, se formos declarar as folhas de estilo no template de cada tela, não temos mais acesso a esta tag, pois tudo que esta no template será incluído dentro da tag body do layout, onde aparece a tag <%= yield %>

O primeiro passo é com o uso da função yield, mas desta vez iremos passar um parametro para ela, com isso estaremos criando um bloco nomeado, onde o conteúdo que definirmos será renderizado.

  Título <%= yield(:head) %> 

Agora devemos criar uma forma de inserir novas folhas de estilo neste nosso bloco, com uma chamada limpa, para mantermos a sintaxe limpa do rails e do ruby, podemos fazer algo assim no arquivo, por exemplo, login.html.erb:

 <% stylesheet 'login' %> 

Agora devemos definir esta função. Iremos definir ela no arquivo de helpers da applicação, assim ela estará disponível em toda a aplicação. Esta função deve utilizar a mesma tag que geralmente usamos para adicionar folhas de estilo, mas o conteudo gerado deve ser focado para o bloco “:head"que criamos, usando a função content_for. Ficaria algo assim:

 def stylesheet(\*args) content\_for(:head) { stylesheet\_link\_tag(\*args) } end 

Pronto. agora você pode definir a folha de estilo de uma tela no próprio template, organizando seus CSS melhor e evitando carregar regras ou arquivos desnecessários.

comments powered by Disqus

Related Posts

Mini-curso: PHP e AJAX com XAJAX

Mini-curso: PHP e AJAX com XAJAX

  • May 17, 2007

Se você esta procurando aprender a utilizar AJAX aplicado em sistemas PHP e é do DF, não perca esta oportunidade!

Read More
#Zendcon: Start your engines!

#Zendcon: Start your engines!

  • September 11, 2008

Less then 5 days to go to ZendCon . This year, I’ll be there to check out some of the best PHP Talks out there, from the “bigshots” of PHP.

Read More
Novo Plugin: BlogBlog User Info

Novo Plugin: BlogBlog User Info

  • July 3, 2007

Algum tempo atrás fui procurado por Manuel Lemos, criador do BlogBlogs para participar do projeto BlogBlogs API. O objetivo deste grupo de “figurinhas carimbadas” da blogosfera era grandioso, desenvolver a nova API do BlogBlogs e botar na “rede” novas ferramentas, widgets e diversos recursos para aproximar o BlogBlogs de seus usuários.

Isso foi por torno de 16 de Março, e logo pensei em fazer um plugin que utilizasse os dados de cada usuário e agregasse valor aos comentários dos blogs. Comecei o trabalho mas tive que parar em alguns momentos devido a falta de tempo, mas recentemente retomei o trabalho e hoje apresento os frutos.

Read More