Fonte de Código

Limpo, fluído e refrescante
 

29.7.10

Google Code

Se você é desenvolvedor de websites e conhece alguma coisa de javascript, certamente já ouviu falar nas bibliotecas de código livre (open-source javascript libraries). Elas facilitam muito o trabalho porque já trazem inúmeras funções recorrentes ao desenvolvimento prontas, de modo que quase nunca precisamos iniciar uma nova função do zero (ah não ser que ela seja bastante original ou exótica).

O grande problema de usar essas bibliotecas é que precisamos incluir um arquivo javascript relativamente pesado na página. Alguns, como o JQuery, não passam de 56Kb (31Kb na versão de arquivo comprimido) – já outros, como o Prototype, podem passar dos 160Kb de includes, quando usado juntamente com os efeitos do Scriptaculous.

Muitas vezes esse tempo de loading acaba não compensando, mesmo se considerando as velocidades atuais (já que, principalmente no Brasil, temos uma das piores bandas largas do mundo). Algumas estratégias para contornar o problema geralmente passam pelo uso das bibliotecas apenas em certas páginas internas – como álbuns de fotos ou formulários com validação "elaborada" –, deixando a home livre do peso do loading desses includes... Mas eu acabei encontrando uma solução melhor, que pode se enquadrar em qualquer cenário, principalmente para websites pequenos ou hospedados em servidores modestos.

Ocorre que a Google (acredito que dispense maiores apresentações) hospeda as bibliotecas mais famosas em seus servidores, e gratuitamente. Para inserir o Prototype com Scriptaculous em seu website, por exemplo, você nem precisa ter os arquivos javascript hospedados em seu servidor – basta chamá-los dessa maneira:

<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
  google.load("prototype", "1.6.0.3");
  google.load("scriptaculous", "1.8.2");

  google.setOnLoadCallback(function() {
    $.getJSON("http://ajax.googleapis.com/ajax/services/search/web?q=google&v=1.0&callback=?",

      function (data) {
        if (data.responseData.results &&
            data.responseData.results.length > 0) {
          var results = data.responseData.results;
          
          for (var i=0; i < results.length; i++) {
            alert(results[i].titleNoFormatting);
          }    
        }
        
      });
    });
</script>

Com isso estamos chamando os arquivos diretamente dos servidores da Google, evitando o uso de banda de nossa hospedagem e servindo os usuário de nosso website com uma velocidade de download bem superior a de 95% dos websites do planeta. Vejamos o que ganhamos e perdemos com isso:

Prós
– As versões das bibliotecas se atualizam automaticamente. Se não chamarmos uma versão em específico, será usada sempre a versão estável mais atual.
– A velocidade de download dos arquivos será quase sempre superior nos servidores da Google, de modo que o problema do tempo de loading de arquivos mais pesados (como o Prototype) é bastante minimizado.
– Muito provavelmente o fato de chamar constantemente os servidores da Google ajudará também a manter o website bem posicionado nas pesquisas da própria Google (SEO).

Contras
– Quando a Google estiver fora do ar, o javascript em seu website ficará quebrado. A questão é que a Google provavelmente passará muito menos tempo fora do ar do que o seu próprio servidor de hospedagem, a não ser que seu site seja um portal com grandes níveis de acesso (hospedado em servidores de ponta).

Como pode ver, acredito que os Prós são facilmente superiores aos Contras.

Eu uso esse método para chamar o Prototype com Scriptaculous no meu site de portfólio – na verdade eles servem para fazer funcionar o lightbox das imagens:

Ver meu portfolio (Ayon)


***

» Visite a Google Libraries API (Google Code)

» Veja o guia de como chamar as bibliotecas públicas em seu website


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, passos 1 e 2

Outro elemento bastante usado em design elaborados são caixas sombreadas. Vejamos como elas funcionam bem para complementar o design clean da CNN.com:

No entanto, os desenvolvedores da CNN parecem ter tido muito trabalho elaborando esse css. Vejamos como eles fizeram (retirado do css da CNN):

/* SECTION SHADING SPRITE CSS */

.cnn_shdsectbin .cnn_shdcaheader,
.cnn_shdsectbin .cnn_shdcafooter,
.cnn_shdmnfooter,
.cnn_shd755pxfooter,
.cnn_shd755pxheader,
.cnn_shd755px2footer,
.cnn_shd755px2header,
.cnn_shd235pxheader,
.cnn_shd235pxfooter { height:6px;overflow:hidden;background:transparent url('http://i.cdn.turner.com/cnn/.element/img/3.0/global/shade/sprite_shades.gif') 0px -81px no-repeat; }

.cnn_shdsectbin .cnn_shdcafooter { background-position:0px -124px; }

.cnn_shdmnfooter { background-position:0px -174px;clear:both; }

.cnn_shd755pxheader { background-position:0px -252px;height:7px; }
.cnn_shd755pxfooter { background-position:0px -214px;height:7px; }

.cnn_shd755px2header { background-position:0px -342px;height:7px; }
.cnn_shd755px2footer { background-position:0px -299px;height:7px; }

.cnn_shd235pxheader { background-position:0px -424px;height:7px; }
.cnn_shd235pxfooter { background-position:0px -383px;height:7px; }

Reparem como eles chamam a imagem "sprite_shades.gif" contendo diversos tipos de bordas sombreadas e a reposicionam, usando background-position de acordo com a classe e largura do box em que são utilizadas. O resultado final ficou excelente, e é melhor dar load de apenas uma imagem mesmo, por questões de performance... Mas, NOSSA, isso deve ter dado um trabalho infernal!

Felizmente, agora vou lhes ensinar o que os desenvolvedores da CNN aparentemente não sabem (ou mesmo sabendo, preferiram ignorar para justificar mais horas no projeto); Como fazer caixas sombreadas que funcionam em todos os browsers atuais (incluindo o ie6!) e sem usar nenhuma imagem, muito menos essa engenharia de background-position da CNN... Não acredita? Então vamos lá:

Passo 1

Primeiro vamos definir o html de nossa caixa:

<div class="sbox">
 <h3>Só o sombra sabe</h3>
 <p>O mal que se esconde no coração desses geeks que ficam até altas horas da noite na web.</p>
</div>

Agora vamos deixar nossa caixa mais bonitinhas usando um pouco de css:

div.sbox {
 width:482px;
 padding:8px;
 background:#fff;
 border:1px solid #999;
 font-family:georgia,arial,sans-serif;
 font-size:120%;
}
div.sbox h3 {
 padding:0 0 12px 0;
 margin:0;
 font-weight:bold;
 font-size:130%;
}
div.sbox p {
 margin:0 0 8px 0;
}

Definimos a fonte e o espaçamento, assim como uma borda em cinza claro. Nossa caixa está agora um pouco mais interessante:



Ver Passo 1

***

Passo 2

Agora vamos adicionar sombreamento a nossa caixa. Para tal vamos utilizar a tag box-shadow, própria do CSS3, assim como as tags proprietárias -moz-box-shadow e -webkit-box-shadow, que são suportadas, respectivamente, pelo Firefox e o Chrome/Safari:

div.sbox {
 width:482px;
 padding:8px;
 background:#fff;
 border:1px solid #ccc;
 font-family:georgia,arial,sans-serif;
 font-size:120%;
 box-shadow:0 0 4px #ccc;
 -moz-box-shadow:0 0 4px #ccc;
 -webkit-box-shadow:0 0 4px #ccc;
}

Isso nos trará uma caixa sobreada, algo muito valorizado por navegantes de fino trato:



Ver Passo 2

Acho que muita gente está deixando o ceticismo de lado agora... Mas ainda não venci o maior obstáculo - porque nossa caixa ainda não tem sombreado algum no IE.

A seguir, no Passo 3, usaremos alguns filtros específicos do IE para finalizar nossa epopéia e deixar os desenvolvedores da CNN um pouco envergonhados...

***

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

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

Javascript links: pop-ups acessíveis

Vocês viram como resolvemos o problema de links com evento de onlick que precisam manter a barra de rolagem do browser no mesmo lugar. Pois bem, utilizando uma solução bem parecida, podemos agora montar um link que abre uma pop-up centralizada na tela e com dimensões definidas através do window.open() do javascript, e que ainda assim permanecerá funcional - abrindo uma nova janela com target="_blank" - para quem estiver usando um browser sem javascript habilitado. Ou seja, teremos um link para abrir pop-ups perfeitamente acessível!

Vejamos como é simples. Primeiro precisamos do script com a função para abrir nossa pop-up centraliada na tela dos usuários que tem javascript habilitado:

<script type="text/javascript">
function PopUpCentralizado(nomepagina, titulopagina, w, h, scroll) {
 var winl = (screen.width - w) / 2;
 var wint = (screen.height - h) / 2;
 winprops = 'height=' + h + ', width = ' + w + ', top = ' + wint + ', left = ' + winl + ', scrollbars = ' + scroll + ', location=no, status=no';
 win = window.open(nomepagina, titulopagina, winprops);
 if (parseInt(navigator.appVersion)  >= 4) {
  win.window.focus();
 }
} 
</script>

Agora vejamos como esse tipo de link é usualmente montado em sites que não tem preocupação com acessibilidade:

<a href="http://www.google.com" onclick="javascript:PopUpCentralizado(this.href, 'pop', '800', '600', 'yes');">Link com pop-up</a>

Rapare que o script pega o atributo href da tag <a> com "this.href". Com alguns pequenos ajustes conseguimos transformar esse link em um link acessível:

<a onclick="javascript:PopUpCentralizado(this.href, 'pop', '800', '600', 'yes'); return false" href="http://www.google.com" target="_blank">Link com pop-up acessível</a>

Utilizando a mesma solução para links com onclick, invertemos a ordem dos atributos na tag <a>, de modo que o onclick venha antes do href, e inserimos o "return false" para o script parar após o evento de clique e o browser não considerar o target="_blank". Dessa forma, quando o usuário tiver javascript habilitado, abrirá a pop-up normalmente, sem uma segunda janela ser chamada. Já quando o usuário por alguma razão não dispor de javascript no browser (seja um browser antigo, um leitor de tela ou browsers de mobiles, etc.) ele continuará abrindo uma nova janela - ou seja, o link continuará funcional e, portanto, acessível.

Ver exemplo

***

Muitas vezes o esforço requerido para esse tipo de ajuste é mínimo, e como o link servirá para browsers com ou sem javascript, esse tipo de "boa prática" deveria ser encorajado em qualquer projeto web, particularmente quando focado em acessibilidade.

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 3 e 4

continuando do Passo 2

Passo 3

Temos inúmeros scripts na web para tratar de imagens PNG no IE6, para nosso exemplo entretando optei pela solução de Drew Diller, chamada "DD_belatedPNG".

Inicialmente precisaremos adicionar uma classe (".png") em nosso html:

<div class="btns png">
    <a href="#">Pesquisar</a>
</div>

Com essa classe lá, bastará chamarmos o arquivo .js de nosso amigo Drew Diller (você pode baixá-lo aqui) e declararmos que em tags com a classe .png, ou em links dentro dessas tags, o script deverá rodar. Para termos certeza de que isso só será chamado no IE6, envolveremos o código com o famoso teste "if IE" dentro de comentários (porque será que a Microsoft pensou nisso?):

<!--[if IE 6]>
<script type="text/javascript" src="../pngfix.ie6.min.js"></script>
<script type="text/javascript">DD_belatedPNG.fix('.png, .png a');</script>
<![endif]-->

Isso pode entrar em qualquer parte do código, mas é melhor que entre junto com os outros scripts dentro da tag <head>.

Bem, se tudo correu bem, bastará cruzar os dedos e abrir nosso botão no IE6...

Além disso, vamos aproveitar e adicionar bordas arredondadas ao nosso botão! Isso mesmo, hoje em dia isso pode ser feito somente por CSS, embora tenhamos de usar algumas tags-proprietárias de cada browser. Vamos ao CSS adicional:

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;
}

Reparem que aplicamos uma borda ao botão, borda esta que muda de cor no rollover; Além disso, aplicamos 8px de borda arredondada ao botão com 3 declarações diferentes: border-radius é o padrão do CSS3, mas este ainda não foi implementado por quase nenhum browser...

Felizmente, porém, tanto o Firefox quanto o Chrome (e o Safari, no qual é baseado) tem tags-proprietárias que realizam o mesmo efeito: -moz-border-radius (Firefox) e -webkit-border-radius (Chrome/Safari). Tenha em mente que usando essas tags proprietárias intencionalmente, seu css não passará por validadores sem erros, mas acredito que esse seja um pequeníssimo preço a pagar.

Agora teremos um botão bem mais interessante:

Ver Passo 3

Isto é, exceto no IE (é claro)... O que nos leva a uma outra solução com JavaScript no Passo 4...

***

Passo 4

Você devia estar achando que esse tutorial estava interessante, mas que como vários outros tutoriais interessantes de css, esbarraria no famigerado IE, e portanto não poderia ainda ser utiliado em seus projetos web. Afinal, como vimos, mesmo o Twitter deixa seu visual "quadrado" para os usuários de IE.

Isso é chamado de "degradação com beleza", uma forma esforçada de tentar definir o conceito corrente de que, se um design não pode parecer igual em todos os browsers, que ao menos façamos com que nos browsers com menor capacidade (leia-se: IE) ele ainda fique o mais interessante possível.

Tudo isso é muito bonito e revigorante, mas não servirá de nada se o seu cliente simplesmente exigir que o IE mostre os malditos botões com bordas arredondadas!

Bem, felizmente nosso querido amigo Drew Diller também solucionou esse problema com míseros 9kb de JavaScript. Sua solução foi entitulada "DD_roundies" (os programadores geralmente são bem melhores com programação, se comparado a criatividade para nomes e títulos).

Para fazer as bordas funcionarem no IE bastará chamar o arquivo .js de Drew Diller em nosso código (você pode baixá-lo aqui):

<!-- faz border-radius funcionar no IE, depois ajusta CSS no IE8 -->
<script type="text/javascript" src="js/ie.border.radius.min.js"></script>
<script type="text/javascript">
    //uso: DD_roundies.addRule('.sua-classe', #); onde # = border-radius
 DD_roundies.addRule('div.btns a', 8);
</script>
<!--[if IE 8]>
<style type="text/css" media="screen">
div.btns a {border:0;background-image:url(img/bt_bg.png) !important;padding-bottom:7px;}
</style>
<![endif]-->

Conforme consta nos comentários (é sempre bom comentar quando usamos código "fora do escopo tradicional"), estamos aplicando 8px de border-radius nos links (tags <a>) dentro de um <div class="btns">.

Como a Microsoft se esforça para infernizar nossa vida, devo adiantar que apenas no IE8 econtraremos um problema caso utilizemos bordas em nosso botão. Por isso utilizamos um teste condicional dentro de comentários para corrigir o problema apenas no IE8... Não me pergunte porque, mas mesmo com border:0; o botão continua tendo bordas. Bem, talvez o script de nosso amigo Drew Diller não seja infalível, mas já foi de grande ajuda até aqui!

O layout de nosso botão não mudou em nada, mas agora ele aparecerá com bordas arredondadas mesmo no IE. Pronto, pense nas possibilidades!

Ver Passo 4

***

A seguir, no Passo 5, aplicaremos mais alguns efeitos decorativos. Infelizmente desta vez não há nada que poderemos fazer quanto ao IE...

***

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

Protótipos de projetos com Lumis

Este documento visa expor uma metodologia específica para a criação de protótipos de projetos para o Lumis Portal Suite (LPS, usado em servidores Microsoft) e para o Lumis Portal Java (LPJ, usado em servidores Java), focando no desenvolvimento de protótipos HTML prontos para serem usados no Lumis, com o mínimo ajuste de código possível.

Continue a leitura do documento abaixo, no Scribd:

Marcadores: , , ,

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

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