HTML5 – Tag aside

Dando continuidade as explicações sobre as novas tags do HTML5, você já sabe especificar o doctype, já fez o seu menu utilizando a tag nav, como você deve classificar o conteúdo relacionado ao seu conteúdo principal?

aside – conteúdo relacionado

A tag <aside> não é para fazer colunas como eu já li por aí, nas dicas para escrever um bom HTML eu falei: semântica na escrita, ignore o layout.

A tag aside define uma área de conteúdo relacionado ao seu conteúdo principal (que provavelmente será um article, o "filé do conteúdo" – vou tratar em outro post já começado), então pode fazer sentido você utilizar isso para uma barra lateral – desde que o conteúdo esteja relacionado ao seu conteúdo principal.

Um exemplo do @elcio no curso da W3C é o uso do aside para as listas de comentário. Isto resolve a dúvida do uso de sectionou article para comentários. Desde que li as definições eu tenho em mente usar apenas um article por página – pensando em SEO, este article está reservado para o conteúdo principal, que eu quero que seja indexado e considerado importante pelos buscadores, pois ele é o conteúdo mais importante para o meu usuário.

Vou continuar escrevendo diversos posts sobre HTML5 durante o curso, para quem quiser acompanhar mais de perto sigam @odesenvolvedor que estou pulicando as dicas rápidas por lá!

(Os posts feitos durante o curso serão atualizados com as correções, estou "correndo" para não perder nada de conteúdo do curso).

Recuperando senhas armazenadas no navegador com javascript

Buenas, dando continuidade as minhas experiências com javascript rodando através da url no navegador achei uma utilidade para alguns comandos, por exemplo recuperar senhas que estão salvas no navegador.

O código utiliza jQuery, portanto o site deve ter o jQuery carregado (ou você pode carregar pela url, como explicado neste post).

Recuperando senhas gravadas no navegador

Existem softwares para recuperação de senhas gravadas em inputs do tipo password, neste caso não vou utilizar nenhum programa externo, apenas javascript e um navegador (testado apenas no FF).

O primeiro passo é acessar o site e fazer com que a senha seja carregada no campo de password, em alguns casos é necessário digitar o usuário para que isto aconteça.

Feito isso, carregue o jQuery no site através do campo da url:

javascript:var%20script=document.createElement("script");script.type="text/javascript";script.src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js";document.getElementsByTagName("head")[0].appendChild(script);void(0);

via Como carregar javascript externo em qualquer site

Sabendo que agora você pode usar os recursos do jQuery, você precisa encontrar o input do tipo password  e exibir o atributo "value" dele, o código que faz isso:

javascript:alert($("input[type=password]").val())

Simples assim, este comando deve abrir um alert com a sua senha.

Paranóico que sou, fui fazer testes em sites bancários – que não armazenam a senha, porém queria testar se era possível visualizar uma senha já digitada.

O site do Banco do Brasil chama uma função a cada tecla pressionada, que criptografa o valor digitado na senha, a função se chama filtraPassa. Portanto, o alert exibe a senha, mas ela é "criptografa".

Maldade: destruir a função filtraPassa, para isso fui na url e…

javascript: function filtraPassa(){};void(0);

A cada tecla pressionada a função é chamada (e não faz nada), então utilizando o código anterior é possível dar um alert na senha.

Não vejo isso como nenhum risco a segurança, já que é necessário ter acesso ao computador para fazer isso tudo (e a página não pode ser recarregada), então o relato foi apenas para entender o funcionamento da segurança nestes site. 🙂

Criar atalhos no teclado com Javascript e jQuery

Depois de publicada a tabela de Key Codes para javascript vamos aprender algumas formas mais avançadas para criar atalhos de interface para sites utilizando o teclado.

O exemplo simples já foi dado no post da tabela de keycodes, fiz um exemplo um pouco mais complexo que permite verificar quando duas teclas estão pressionadas, para criar atalhos para por exemplo salvar um post que o usuário está escrevendo com o CTRL+S, ou permitir a um usuário da internet utilizar o CTRL+O para abrir um documento…

O exemplo abaixo não utiliza nenhuma biblioteca e comentei as linhas para facilitar o entendimento, segue o código:

var pressedCtrl = false;
//Quando uma tecla for liberada verifica se é o CTRL para notificar que CTRL não está pressionado
document.onkeyup=function(e){
	if(e.which == 17)
	pressedCtrl =false;
}
// Quando alguma tecla for pressionada:
// Primeiro if - verifica se é o CTRL e avisa que CTRL está pressionado
// Segundo if - verifica se a tecla é o "s" (keycode 83) para executar a ação
document.onkeydown=function(e){
	if(e.which == 17)
		pressedCtrl = true;
	if(e.which == 83 && pressedCtrl == true) {
		//Aqui vai o código e chamadas de funções para o ctrl+s
		alert("CTRL + S pressionados");
	}
}

No caso acima utilizei uma variável "pressedCtrl" que controla quando a tecla CTRL está pressionada e só se este caso for true ele executará as ações dos atalhos.

Com jQuery fica quase a mesma coisa – agora sem os comentários.

 

var pressedCtrl = false;
$(document).keyup(function (e) {
	if(e.which == 17)
		pressedCtrl=false;
})
$(document).keydown(function (e) {
	if(e.which == 17)
	pressedCtrl = true;
	if(e.which == 83 && pressedCtrl == true) {
		//Aqui vai o código e chamadas de funções para o ctrl+s
		alert("CTRL + S pressionados");
	}
});
 

Com os exemplos simples acima é possível incrementar atalhos mais complexos de mais do que 2 teclas, e outras combinações de teclas também.

Agora vamos a um exemplo de atalho de navegação, controlar a paginação de um site pelas teclas direita e esquerda do teclado.  O código abaixo utiliza a tecla da direita para redirecionar a página para a url do link <a> com id="next" e a tecla da esquerda para o link com id "prev".

$(document).ready(function(){
	$("document").keyUp(function(e){
		e.keyCode == 39;
		window.location = $("#next").atrr("href");
	});
	$("document").keyUp(function(e){
		e.keyCode == 37;
		window.location = $("#prev").atrr("href");
	});
});

 

Com um pouco de criatividade é possível aumentar a usabilidade do seu site utilizando estes atalhos – e para interface de intranets é possível melhorar bastante e além da usabilidade aumentar a produtiivdade dos usuários.

Referências

 

 

jQuery UI

Fazem algumas semanas que resolvi utilizar um plugin jQuery (não lembro qual) que utilizava a jQuery UI, um framework com diversas classes prontas para trabalhar com jQUery, uma verdadeira mão na roda!

Como utilizei apenas o plugin pronto, fiz as alterações necessárias mas não havia realmente trabalhando com o framework. Em um projeto recente em que estou trabalhando, fui procurar uma nova forma de fazer uma navegação com accordion (já havia utilizado um plugin eficiente de jQuery anteriormente) e encontrei novamente com o jQuery UI.

Deixei a preguiça de lado e fui verificar como funcionava o jQuery UI, gostei bastante! Apesar de estar apenas iniciando os estudos pareceu bem fácil de utilizar. 

 

jQuery UI CSS Framework

Essa foi a única parte que até o momento eu realmente utilize, um completo framework CSS que permite personalização fácil e vem com muitas, MUITAS classes prontas.

No site do jQuery UI existe um gerador de tema, que permite configurar o seu framework de CSS de forma rápida:

Theme Generator (clique para ampliar)

O gerador de temas gera um framework CSS, que facilita no desenvolvimento com o restante dos utilitários.

Existem diversas classes prontas, para:

  • Bordas arredondadas
  • Overlay ("cobrir" parte da página para destacar determinado conteúdo)
  • Interação (hover, focus, etc.)
  • Exibição de erro
  • Highlight
  • Elemento desabilitado

E mais algumas, que ainda não explorei… 🙂

Falar de CSS me embrou de uma idéia interessante, que instiga algumas boas práticas no desenvlvimento das folhas de estilos: CSS orientado a objetos

 Ah, a parte de 

Interação

Além das facilidades na parte do CSS o framework facilita muito a criação de efeitos de interação.

  • Draggable
  • Droppable
  • Resizable
  • Selectable
  • Sortable

O melhor de tudo é a simplicidade com a qual funciona tudo, por exemplo para criar um elemento que possa ser arrastado, com apenas uma linha isto é feito:

$("#draggable").draggable();

Para os outros comandos a facilidade é a mesma. Isso associado aos diversos estilos dos temas pode acelerar muito o desenvolvimento de interfaces amigáveis!

 

Widgets

Mais facilidades com pouco código, existem algumas ferramentas prontas como:

 

  • Accordion
  • Datepicker
  • Dialog
  • Progressbar
  • Slider
  • Tabs

Testei o accordion, as personalizações possíveis são bacanas! Nos testes que fiz do accordion o funcionamento foi bom em IE (inclusive o 6 – exceto com listas de conteúdo), FF (perfeito) e Chrome (perfeito).

 

Animação

Os comando apra animação com o jQuery são bastante evoluídos e permitem fazer muita coisa, mas para efeitos padrão de interface o framework de user interface facilita com alguns efeitos prontos e bastante customizaveis:

  • Effect
  • Show
  • Hide
  • Toggle
  • Color animation
  • Add class
  • Remove class

 

 

Escrevi o post como uma introdução e estímulo aos usuários da biblioteca jQuery para estudar e utilizar a jQuery UI e facilitar ainda mais a vida!

CSS Orientado a Objetos

Mesmo sabendo que o Chris vai falar algumas coisa relacionada ao termo "orientado a objetos", achei o conceito de otimizar e "orientar" o CSS bem interessante.

Na semana passada estava conversando sobre CSS aqui no serviço, debatendo o que era melhor:

Opção 1 – Uma classe por elemento

Ao meu ver, este é o modo mais simples de "pensar" CSS. Você pensa na estrutura html do seu site a para cada elemento cria uma classe, quando o elemento se repete você usa a mesma classe.

Por exemplo, você tem um quadro (div) com o topo azul, bordas cinza e área para conteúdo com background branco.

Seu CSS seria:

.quadro_azul{
border: 1px solid #ccc;
background: #fff;
padding: 6px;
}

.quadro_azul h6{
display: block;
background: blue;
}

 

Para criar um quadro com o header vermelho você precisar duplicar o código do CSS, facilita a vida para atualizar um elemento específico porém dificulta para fazer alterações gerais, como mudar o layout.

Esse método também torna o código mais sujo (e o html levemente mais limpo).

 

 

Opção 2 – Classes comuns para diversos objetos

Para mim ainda é um pouco complicado pensar desta forma, uma coisa que temos que ter na cabeça antes de pensar nisso é: um elemento do html pode ter várias classes. Repitam isso.

No mesmo exemplo anterior, você teria um estilo para delimitar TODOS os quadros, por exemplo:

.quadro {
border: 1px solid #ccc;
background: #fff;
padding: 6px;
}
 

 E para setar as outras propriedades, como a cr do cabeçalho definiria classes para isso.

h6 .azul{
display:block;
background:blue;
}

Ou ainda mais amplo:

.azul{background:blue;}

.block{display:block;}

Claro que neste caso não faz muito sentido, porque estamos criando classe para setar uma única propriedade, um "desperdício" de classe por assim dizer.

Mas neste caso utilizamos na div a classe "quadro e no cabeçalho (h6) as classes azul e block.

<h6 class="azul block">Header do quadro</h6>

 

 

O que é melhor?

Eu ainda não tenho uma opinião formada sobre qual o melhor caminho a seguir, mas neste momento eu recomendaria o budismo: "siga o caminho do meio".

Ter centenas de classes definindo propriedades vai só complicar a vida do desenvovledor em possíveis manutenções. O CSS vai dicar extenso, montar o html também pois você terá que chamar diversas classes para cada objeto.

Ter uma classe para cada objeto também pode não ser benéfico, a cada nova página você provavelmente vai ter que criar uma nova classe, aumentnado seu CSS sem um bom reaproveitamento de código.

Em ambos, lá se vai a facilidade para alterar layout de um modo REALMENTE rápido.

 

Graças ao Twitter (saiba o que é o Twitter e como usá-lo) visitei um link que me chamou a atenção, com uma possível buzzword: CSS Orientado a Objetos.

Apesar do nome mimimi, a idéia é realmente interessante. A herança poderia ser bem útil no CSS, mas como o nome diz a "cascata" existe, pensando direito dá para aproveitá-la bem.

Bom, veja a apresentação em slides do conceito, abaixo continuo meus pitacos sobre essas práticas!

 

Uma coisa que não costumo fazer e tenho certeza que é muito útil é a separação no CSS da estrutura (posicionamento de colunas, menu, header, footer, ad, etc…) da visualização (backgrounds, fontes, bordas, etc.).

Isso facilita a alteração de layout (visual e estrutural) e somado com o reaproveitamento de classes para diversos elementos, a redução do número de classes para elementos bastante similares e outras boas técnicas pode reduzir bastante seu CSS e facilitar o trabalho em equipe!

O que vocês acham da idéia, do nome e da apresentação?