O 13º EWD

13 de novembro de 2008

Fui ao 13º EWD (Encontro de WebDesigners) para conferir o que iria rolar neste evento.

Para quem não sabe, o EWD é um evento anual focado para webdesigners de todo o Brasil, organizado pela Arteccom. Apesar de eu sair sem nenhuma premiação, além de spams de propagandas dos patrocinadores, gostei muito do evento, os palestrantes são muito bons e apresentaram temas bastante interessantes para quem trabalha na área de web.

Os palestrantes foram, Luli Radfaher com o tema “Mecânica dos fluidos: Design no ambiente elástico”, Luis Marcelo Mendes da Tecnopop com o tema “Como sobreviver na selva”  e Raphael Vasconcelos da AgênciaClick com o tema “Comunicação interativa”.

Ótimos palestrantes, mas na minha opinião, quem se destacou foi o Luis Marcelo Mendes, mostrando ao público como ser um “selvagem” da web e saber lidar com todas as merdas do dia-a-dia quando você arrisca abrir sua própria agência.

Houve também uma palestra virtual com Ricardo Accioly da NOIX que, felizmente, o vídeo travou e sua mensagem sobre um tipo de sistema que 99% dos programadores odeiam, não pode ser completada: CMS Joomla.

O evento cresceu muito nessa edição, e provavelmente terá grandes mudanças e melhorias em 2009. Eu recomendo a todos.

Abraços!

Resolvendo o problema do FLOAT e BACKGROUND no CSS

12 de novembro de 2008

Algumas vezes, para conseguir chegar ao ponto que você queria, é necessário alguns “trambiques”.

Veja como consertar erros de backgrounds quando se usa elementos flutuantes dentro de um elemento com um background.

Um exemplo do problema:

1
2
3
4
<div id="boxes">
	<div id="box1">Conteúdo do box 1</div>
	<div id="box2">Conteúdo do box 2</div>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#boxes {
	min-width: 400px;
	width: 400px;
	text-align: left;
	padding: 10px;
	margin: 0px;
	background-color: #FFC;
}
 
#box1 {
	float: right;
	width: 273px;
	height: 170px;
	padding: 5px;
	border: 1px solid #099;
}
 
#box2 {
	float: left;
	width: 73px;
	height: 170px;
	padding: 5px;
	border: 1px solid #6CC;
}

RESULTADO:

errado

Ruim, não?!

Veja que eu criei uma div pai chamada boxes e nela foi adicionada uma propriedade background. E suas filhas box1 e box2 estão flutuando. E a div pai está deslocada com relação as suas filhas box1 e box2.

Agora vamos adicionar um código no CSS para corrigir este problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#boxes {
	min-width: 400px;
	width: 400px;
	text-align: left;
	padding: 10px;
	margin: 0px;
	background-color: #FFC;
}
 
#box1 {
	float: right;
	width: 273px;
	height: 170px;
	padding: 5px;
	border: 1px solid #099;
}
 
#box2 {
	float: left;
	width: 73px;
	height: 170px;
	padding: 5px;
	border: 1px solid #6CC;
}
 
/* INICIO limpa as floats */
.clearfix:after {
	content: ".";
	display: block;
	clear: both;
	visibility: hidden;
	line-height: 0;
	height: 0;
}
 
.clearfix { display: inline-block; }
 
html[xmlns] .clearfix { display: block; }
 
* html .clearfix { height: 1%; }
 
/* FIM limpa as floats */

E alterar no HTML:

1
2
3
4
<div class="clearfix" id="boxes">
	<div id="box1">Conteúdo do box 1</div>
	<div id="box2">Conteúdo do box 2</div>
</div>

RESULTADO:

certo

Agora sim!

Use e abuse!

Aula 2 - Hello Word no AJAX

21 de outubro de 2008

Depois de um longo café, cá estou!

Hehe, me perdoem pelas faltas, estive correndo com alguns projetos e finalmente estou pronto para voltar às aulas de ajax.

Bom, hoje estarei ensinando-lhes o básico do básico, é claro que você já leu a aula 1 e já tem seu scriptzinho (ajax.js) que estancia o XMLHttpRequest para podermos trabalhar com AJAX. E lembre-se também, que este pequeno arquivo te acompanhará para todas as suas aplicações com AJAX. Portanto, guarde-o e deixe-o sempre disponível para uso.

Vamos lá, crie um novo arquivo HTML, proponho que ponha o nome de “olamundo.html” mas fique livre para chama-lo como bem quiser.

Este arquivo será chamado pelo AJAX para exibir seu conteúdo.

Básicamente, ele terá uma estrutura dessa:

1
2
3
4
5
6
7
8
9
10
11
12
 
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Olá Mundo</title>
</head>
 
<body>
Olá Mundo!
</body>
</html>

Bom, todos já devem saber que teremos que exibir o tal “Olá Mundo!” na tela.

Agora crie mais um arquivo HTML chamado ajax-exc1.html e faça o seguinte código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Aula 2 - Hello Word no AJAX</title>
<script type="text/javascript" src="ajax.js" language="javascript"></script>
<script type="text/javascript">
window.onload = function iniciaFuncoes() {
	olaMundo();
}
function olaMundo() {
	// instanciando o objeto XMLHttpRequest
	var ajax = new Ajax();
	var mensagem = document.getElementById('mensagem');
 
	ajax.open('GET', 'olamundo.html', true);
	ajax.onreadystatechange = function leituraRequisicao() {
		if (ajax.readyState < 4) {
			mensagem.innerHTML = "Carregando...";
		} else {
			if (ajax.status == 200) {
				mensagem.innerHTML = ajax.responseText;
			}
		}
	}
	ajax.send(null);
	return false;
}
</script>
</script></head>
 
<body>
<div id="mensagem"></div>
</body>
</html>

linha 8 à 10 - window.onload executa um evento quando a página estiver carregada. Essa função que é carregada vai iniciar outras funções, é sempre bom fazer este esquema para organizar melhor o código, e também você não pode usar mais de 1 window.onload na página.

linha 11 - abre uma nova função chamada olaMundo().

linha 13 - Instancia o objeto XMLHttpRequest daquele script ajax.js.

linha 14 - Cria um objeto da id ‘mensagem’ que é uma DIV, onde irá aparecer a mensagem.

linha 16 - O comando ajax.open abre alguma página do servidor, e somente aquela que está hospedada no mesmo servidor, por motivos de segurança. O paramêtro true diz que esta requisição será assíncrona, ou seja, “por baixo dos panos”.

linha 17 - o comando ajax.onreadystatechange faz com que a cada mudança de estado desta requisição, a função leituraRequisicao() é relida.

linha 18 e 19 - Se o estado da requisição é menor que 4, ou seja, ainda não está completa, mostra um “Carregando…” dentro do objeto ‘mensagem’.

linha 20 à 22 - Se for igual a 4 e o status do servidor for 200, ou seja, está tudo OK, mostra o resultado no objeto ‘mensagem’.

linha 26 - o comando ajax.send diz o que será enviado. Quando a requisição é feita por GET, nada é enviado, apenas por POST.

linha 27 - O return false quebra toda a ação padrão de um evento, por exemplo, se a função olaMundo() fosse iniciada ao pressionar um botão de ‘submit‘, ele não iria responder ao action do formulário, apenas iria fazer o que você digitou antes do return false. Mas isso veremos na próxima aula, por enquanto vamos usar o evento onload.

Acabou por aqui, este script poderia estar em um js externo, mas para agilizarmos, preferi deixa-lo dentro da página. Veremos mais exemplos como esse nas próximas aulas e estarei dando dicas de como programar corretamente, fique tranquilo.

Espero que tenham entendido, qualquer dúvida é só comentar.

Abraços!