Fonte de Código

Limpo, fluído e refrescante
 

3.8.10

Aplicando classes no Lumis MS com JQuery

No Lumis CMS versão Microsoft - ao contrário do Lumis Java - não é possível definir um nome de classe específico para as TDs estruturais das páginas. Conforme explicado no guia de protótipos de projetos, essas classes são aplicadas automaticamente na medida em que adicionamos linhas (monta uma TABLE com class="cEZTPageAreaX") e colunas (monta uma TD com class="cEZTPageAreaXColumnY") ao darmos drag and drop das interfaces dos serviços.

Entretanto, usando JQuery temos uma solução bastante simples para esse problema.

Ela consiste em inserirmos uma interface de serviço html a qualquer altura de uma coluna (mas fica melhor sendo a primeira interface), e nela inserirmos um marcador como uma classe "anchor", por exemplo para que através de um script bastante simples (usando o JQuery) busquemos as colunas (TDs) da página que possuem este tipo de marcador, e nelas apliquemos uma nova classe.

Na prática, equivale a aplicar a classe que quisermos na TD estrutural (ou TDs estruturais). Apenas dará um pouco mais de trabalho, e exigirá o uso do JQuery.

Veja no exemplo abaixo, um html que simula a estrutura do Lumis MS, com três interfaces lado a lado:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JQuery: Aplicando classes com uso de âncoras</title>
 
<script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript">
 $(document).ready(function(){
  $("td[class^='cEZTPageArea']:has(div.anchor)").addClass("my-class");
 });
</script>

<style type="text/css">
body.cLumBody {
 margin:0;
 background:#e9e9e9;
 text-align:center;
 position:relative;
}
div.cLumPage {
 width:600px;
 margin:0 auto;
 text-align:left;
 background:#fff;
}
div.interface {
 width:200px;
}
div.interface p {margin:20px;}

td.my-class {
 border-right:1px solid #ccc;
}
</style>
 
</head>

<body class="cLumBody">

<div class="cLumPage">

<table cellpadding="0" cellspacing="0" class="cEZTPageArea0">
<tr>
 <td class="cEZTPageArea0Column0">
 
  <div class="anchor"></div>
 
  <div class="interface">
   <p>Interface 01</p>
  </div>
 
 </td>
 <td class="cEZTPageArea0Column1">
 
  <div class="anchor"></div>
 
  <div class="interface">
   <p>Interface 02</p>
  </div>
 
 </td>
 <td class="cEZTPageArea0Column2">
 
  <div class="interface">
   <p>Interface 03</p>
  </div>
 
 </td>
</tr>
</table>

</div>

</body>
</html>

Repare no trecho de script destacado, é este trecho que adiciona a classe "my-class" a qualquer TD na página que (1) possua uma classe que contenha "cEZTPageArea" – ou seja, todas as classes estruturais do Lumis MS – e (2) que tenha em seu interior uma div com a classe "anchor", que é o nosso marcador. Dessa forma, esta alteração somente ocorrerá nas colunas em que inserirmos a interface de serviço html com este marcador.

Ver exemplo

***

Nota (1): este artigo não pretende encerrar o assunto em relação a boas práticas e/ou soluções para limitações do Lumis CMS, recomendamos consultar o suporte da Lumis ou o Lumis Information Exchange (LINX) para consultar outros artigos e soluções para problemas encontrados.

Nota (2): a solução descrita neste artigo foi originalmente elaborada pela WorkingMinds para um de seus projetos com Lumis MS, estamos apenas divulgando o conhecimento adiante...

Marcadores: , , , , ,

  • Adicionar ao Delicious
  • Adicionar ao Digg
  • Adicionar a Technorati
  • Adicionar ao seu mural no Facebook
  • Adicionar como tweet no seu Twitter

27.5.10

Como fazer caixas sombreadas, passo 3

continuando do Passo 2

Passo 3

Para fazer com que nosso amigo IE deixe a caixa sombreada, precisaremos recorrer a tag-proprietária -ms-filter (ou filter, para algumas versões) e utilizar o filtro (também específico do IE) DXImageTransform.Microsoft.Shadow para aplicar sombreamento em cada direção (0º, 90 º, 180 º e 270º). O código é um pouco extenso, mas relativamente simples:

div.sbox {
 -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(color=#d9d9d9,direction=0,strength=2) progid:DXImageTransform.Microsoft.Shadow(color=#d9d9d9,direction=90,strength=2) progid:DXImageTransform.Microsoft.Shadow(color=#d9d9d9,direction=180,strength=2) progid:DXImageTransform.Microsoft.Shadow(color=#d9d9d9,direction=270,strength=2)";
 filter: progid:DXImageTransform.Microsoft.Shadow(color=#d9d9d9,direction=0,strength=2) progid:DXImageTransform.Microsoft.Shadow(color=#d9d9d9,direction=90,strength=2) progid:DXImageTransform.Microsoft.Shadow(color=#d9d9d9,direction=180,strength=2) progid:DXImageTransform.Microsoft.Shadow(color=#d9d9d9,direction=270,strength=2);
}

Nota 1: Como o código já é específico do IE, recomendamos utilizar o teste <!--[if IE]> para escondê-lo de outros browsers (ver código fonte do passo 3).

Nota 2: Você deve ter reparado que não utilizamos o mesmo hexadecimal de cor do box-shadow (#ccc) - isso porque, por alguma estranha razão, a cor utilizada nesse filtro sempre parece um pouco mais escura no resultado final. Dessa forma acreditamos que o hexadecimal #d9d9d9 trás um resultado melhor.

Dessa forma chegamos a um resultado final onde é praticamente impossível identificar diferenças entre o IE e o Firefox:



Ver Passo 3

E é apenas isso, agora temos caixas sombreadas sem utilizar imagens. Algo que deve ter levado uns 2% das horas que os desenvolvedores da CNN utilizaram na sua solução... Tudo bem que essa solução não irá funcionar em versões mais antigas do Firefox e do Chrome, mas os usuários desses browsers costumam atualizá-los com bastante frequencia. Acredito que temos uma solução que atenda a pelo menos 95% dos browsers usados na web, e com um custo de criação e manutenção muitíssimo inferior a maioria das outras soluções do mercado.

***

Nota final: parte do Passo 3 desse tutorial foi baseado no excelente artigo "Cross-browser drop shadows using pure CSS" de Nick Dunn.

***

Marcadores: , , , , , , , , , ,

  • Adicionar ao Delicious
  • Adicionar ao Digg
  • Adicionar a Technorati
  • Adicionar ao seu mural no Facebook
  • Adicionar como tweet no seu Twitter

10.5.10

Como fazer botões, passos 5 e 6

continuando do Passo 4

Passo 5

Mesmo indo além do que o IE pode oferecer (ainda que se considerando o uso de JavaScript), ainda podemos incrementar o layout de nosso botão para usuários do Firefox e do Chrome. Esses browsers já conseguem ler o atributo de CSS3 box-shadow, ainda que utilizando tags-proprietárias (exatamente como com o border-radius). Utilizando esse atributo iremos agora aplicar um efeito de sombra ao evento de rollover de nosso botão:

div.btns a {
 font-size:12px;
 font-family:helvetica,arial,sans-serif;
 font-weight:bold;
 letter-spacing:1px;
 padding:5px 12px;
 color:#fff;
 background:#3792b3 url(img/bt_bg.png) repeat-x 0 50%;
 text-decoration:none;
 border:1px solid #3792b3;
 border-radius:8px;
 -moz-border-radius:8px;
 -webkit-border-radius:8px;
}
div.btns a:hover {
 background-color:#a14141;
 border-color:#a14141;
 box-shadow:2px 2px 4px #999;
 -moz-box-shadow:2px 2px 4px #999;
 -webkit-box-shadow:2px 2px 4px #999;
}

Em nosso evento de rollover, estamos aplicando um efeito de sombreamento ao botão na cor #999 (cinza claro). Este efeito se estende a 2px abaixo e 2px para direita do botão (valores negativos também poderiam ser usados aqui) e aplica um efeito de "blur" de 4px. Para quem costuma usar efeitos parecidos em programas como Photoshop ou Macromedia, esses parâmetros são de simples entendimento.

De fato, é quase como se estivéssemos editando o css com um programa de edição de imagens... Vejam como fica bem interessante este efeito nos browsers mais inteligentes (qualquer coisa além do IE é "mais inteligente"):

Você não deve se sentir desencorajado em usar a "degradação com beleza". Se seu cliente perguntar porque você se atraveu a ignorar o IE e aplicar sombreamento de rollover somente nesses browsers de geeks, informe-o que sites como YouTube.com (repare no rollover dos botões, como "Gostei") já fazem o mesmo. Deve ser o suficiente...

Antes do passo final, vamos chegar ao ápice do perfeccionismo nerd e utilizar um atributo exclusivo do webkit (Chrome/Safari) e que não consta sequer no CSS3, mas que é absolutamente sensacional. O -webkit-transition faz um efeito de transição entre alguma cor ou cor de fundo, transformando gradualmente a cor padrão na cor da classe de rollover. É algo que na prática é muito parecido com efeitos em flash, a diferença é que trata-se de puro CSS (embora, por enquanto, proprietário do webkit):

div.btns a {
 font-size:12px;
 font-family:helvetica,arial,sans-serif;
 font-weight:bold;
 letter-spacing:1px;
 padding:5px 12px;
 color:#fff;
 background:#3792b3 url(img/bt_bg.png) repeat-x 0 50%;
 text-decoration:none;
 border:1px solid #3792b3;
 border-radius:8px;
 -moz-border-radius:8px;
 -webkit-border-radius:8px;
 -webkit-transition:background-color .3s linear;
}

Estamos informando ao Chrome que a transição da cor de fundo (background-color) deve ser linear e durar 3 décimos de segundo (repare que aplicamos a tag-proprietária na classe "a", e não em "a:hover" - é assim mesmo). Não vou criar um gif animado ou vídeo apenas para te mostrar quão interessante ficou nosso rollover de botão, para ver basta abrir o link abaixo com o Chrome ou Safari:

Ver Passo 5

Embora apenas os felizardos que navegam com o Chrome possam ver esse efeito de rollover, é algo que não custa quase nada adicionar, e que não deverá deixar nenhum cliente de cabelo em pé...

***

Passo 6

Chegamos ao passo final. Nesse passo não quero adicionar mais nenhum layout ou efeito com css. Gostaria apenas de demonstrar o quão simples é editar um botão construído dessa forma.

Vamos agora mudar nosso código html para inserir um texto bem mais extenso ao nosso botão:

<div class="btns png">
    <a href="#">Cadastrar-se na promoção e concorrer a muitos prêmios</a>
</div>

Agora, em nosso css, vamos aumentar bastante o tamanho da fonte (lembre-se que isso também é um teste comum de acessibilidade) e mudar a cor de fundo do botão para verde:

div.btns a {
 font-size:26px;
 font-family:helvetica,arial,sans-serif;
 font-weight:bold;
 letter-spacing:1px;
 padding:5px 12px;
 color:#fff;
 background:#6c9441 url(img/bt_bg.png) repeat-x 0 50%;
 text-decoration:none;
 border:1px solid #6c9441;
 border-radius:8px;
 -moz-border-radius:8px;
 -webkit-border-radius:8px;
 -webkit-transition:background-color .3s linear;
}

Pronto, em alguns segundos, temos um botão comum de pesquisa transformado em um gigantesco botão de cadastro para a última promoção de noso site (certamente o pessoal de marketing pensaria num título melhor para esse botão):

Acredito que para a imensa maioria dos portais de conteúdo, esse método se mostrará muito mais prático e elegante do que contratar um designer exclusivo para produzir milhares de botões diferentes. Tudo bem que isso pode tirar o emprego do designer, mas acredito que se ele ler este tutorial, nem irá se importar :)

Ver Passo 6

***

Nota final: parte desse tutorial foi diretamente inspirada no capítulo 2 do excelente livro de Dan Cederholm: "Hancrafted CSS".

***

Marcadores: , , , , , , , , ,

  • Adicionar ao Delicious
  • Adicionar ao Digg
  • Adicionar a Technorati
  • Adicionar ao seu mural no Facebook
  • Adicionar como tweet no seu Twitter

8.5.10

Bem vindos

Ainda me lembro a primeira vez que vi html, quando criei meu site na Geocities. Me surpreendeu que fosse relativamente simples colocar qualquer conteúdo criado por mim na web: ilustrações, tiras, quadrinhos, contos, poesias, etc. Não poderia imaginar que acabaria trabalhando com aquilo boa parte da minha vida.

Após me formar em Gravura pela UFRJ, decidi aprimorar meus conhecimentos na área de TI... Foi então que fiz a formação de Webdesign na Infnet, talvez a maior escola web do Brasil. Ao sair de lá, tinha certificados do Fireworks (programa primordial para criar layouts ou slices de imagens) e Dreamweaver (mas não dependo dele para codificar); Naquele mesmo mês, em Novembro de 2000, começei a trabalhar na Casa da Ciência da UFRJ como webmaster (quando essa posição ainda existia!).

Portanto, lá se vão quase 10 anos de trabalho com desenvolvimento web. Nesse intervalo me especializei muito mais em código, sendo muito mais um "HTMLer" - o título estranho que dão para os que trabalham com código e interface em geral - do que um designer ou programador puro. Em 2004 ingressei na Lumis, a maior empresa de CMS do país, e desde então também me tornei um especialista em montagem com o Lumis (e, consequentemente, em xsl).

Este blog visa a simples divulgação do conhecimento que adquiri nesses anos... Na medida do possível, todos os tutoriais trarão informações sobre compatibilidade com os browsers mais utilizados, exemplos e downloads externos ao blog, e uma classificação de acordo com o nível de conhecimento ideal para compreender o que está sendo exposto - inicinate, intermediário ou avançado.

Bem vindos a minha fonte!

Rafael Arrais, 07/05/2010

» Veja também meu portfolio web em http://http://www.raph.com.br/ayon/

***

Crédito da foto: ViaMoi

Marcadores: , , , , , , , , , ,

  • Adicionar ao Delicious
  • Adicionar ao Digg
  • Adicionar a Technorati
  • Adicionar ao seu mural no Facebook
  • Adicionar como tweet no seu Twitter