Marcelo Torres

Entradas categorizadas em ‘Desenvolvimento’

Galeria de imagem com CSS puro

06/05/2009 · Deixe um comentário

Olá pessoal neste post estarei mostrando como fazer uma galeria de imagem  com CSS puro. Este exemplo foi baseado no exemplo do site http://www.dynamicdrive.com, neste site foi usado o pseudo-elemento :hover, porém eu usei o :active, fazendo com que a imagem só amplie de tamanho quando clicada, fiz também outras modificações para adaptar melhor ao IE6 e ao Opera. Falando em IE6(esta porcaria), o efeito do :active tem uma pequena diferença dos outros navegadores, no IE6 quando a imagem for clicada ela irá ampliar normal, mas quando o botão do mouse deixar de ser pressionado a imagem permanece ampliada e nos outros navegadores(Firefox, Opera, Safari, Chrome, IE7…) a imagem some para o usúario escolher outra, não consegui descobrir um jeito para consertar isso, se alguem descobrir é só falar ai nos comentários que eu adicionarei com os devidor créditos!

Bom vamos ao que interessa…

A estrutura do arquivo (X)HTML ficaria assim:

[...]
<div id="galeria">
<small>Clique na miniatura para aumentar a imagem</small><br /><br />
 <a class="thumb" href="#thumb">
 <img src="imagens/thumb_image1.jpg" alt="" />
 <span>
 <img src="imagens/1.jpg" alt="" />
 </span>
 </a>
</div>
[...]

Onde dentro do <a> vai ficar as duas imagens, o thumbnail(miniatura) e imagem com tamanho maior(recomendo 400×300, ou aproximado),o thumbnail será a imagem clicada que recebe um link “cego” a imagem maior fica dentro de um <span> onde será feito a “mágica” com css, para aparecer quando for chamada, segue a “mágica”

Arquivo CSS:

*{padding:0;margin:0;}/*deixar margem e padding dos elementos com padrão zerado*/
small{font-size:12px; font-weight:bold;color:#333;}/*formata a mensagem de como visualizar as imagens*/
#galeria{background-color:#9FCBFF;position:relative;width:720px;margin:25px auto;padding:10px;text-align:center;}/*div pai, que englobará as imagens*/
a.thumb img{background-color:#fff;border: 1px solid #999;padding:3px;}/*estiliza as miniaturas*/
a.thumb span{position:absolute;background-color: #000;padding: 10px;left:-10000px;visibility: hidden;color: black;text-decoration: none;}/*começa a mágica*/
a.thumb:active span{visibility:visible;top: 50px;left: 120px;z-index: 50;}/*termina a mágica!*/

As declarações CSS principais para o efeito são:

a.thumb span:

  • left:-10000px; – Joga as iamgens que estão sentro do <span> para -10000px do monitor, sendo assim esconde do campo de visão
  • visibility: hidden; – Simplesmente desaparece com a imagem

a.thumb:active span:

  • visibility: visible; - Faz a imagem aparecer quando a miniatura for clicada, ativando o pseudo-elemento :active
  • z-index: 50; – poe a imagem maior sobre as miniaturas
  • top: 50px; e left:120px; – posiciona a imagem maior na tela

Baixem um exemplo completo aqui

Categorias: (x)html/css · Desenvolvimento · Design · Navegadores · Tableless · Tutoriais · Web Standards
Etiquetado: ,

Formulário de contato em PHP

14/04/2009 · 37 Comentários

Olá pessoal, alguns meses atrás eu estava sofrendo pra pra fazer um formulário de envio de dados de um form para o email de um cliente através de uma area do site, consegui enfim! Então vou compartilhar nesse post o desenvolvimento de um formulário de contato simples para seu site, utilizando a função mail() do php, com validação de campos(inclusive de email), sem spam e com estilização em css.

Irei dividir em 3 partes:

  • Construção do form em (X)HTML;
  • Implementação do arquivo de envio em PHP.
  • Estilização do form com CSS ;


Vamos começar então, com a construção do form em (X)HTML:

contato.php

<!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" lang="pt-br">
<head>
<meta name="author" content="Marcelo Torres" />
<meta http-equiv="content-type" content="text/html; charset=iso-utf-8" />
<title>Formulário de contato em PHP</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<form action="contato.php" method="post">
<fieldset>
<legend>Entre em contato</legend>
<small>*Campos de Preenchimentos Obrigatório</small><br />
<?php include("enviar.php")?>
<label for="nome"> * Seu nome:</label>
<input id="nome" name="nome" size="31" type="text" value="<?echo $nome ;?>" /><br />
<label for="email">* Seu email:</label>
<input id="email" name="email" size="31" type="text" value="<?echo $email ;?>" /><br />
<label for="assunto">* Assunto:</label>
&nbsp;<input id="assunto" maxlength="50" name="assunto" size="15" type="text" value="<?echo $assunto ;?>" /><br />
<label for="mensagem">* Mensagem:</label><br />
<textarea id="mensagem" cols="53" rows="5" name="mensagem"><?echo $mensagem;?></textarea><br />
<input name="enviar" type="submit" value="Enviar" class="botao"/>
<input name="cancelar" type="reset" value="Limpar" class="botao"/>
<p>Formulário de contato em PHP, por <a title="blog do autor" href="http://marcelowd.wordpress.com">Marcelo Torres</p>
</fieldset>
</form>
</body>
</html>

Nota I: o value tem um echo em php com as variáveis( que nós iremos ver ainda), para no caso de um erro na validação do form, os dados digitados continuar nos campos, para que o usuário não tenha que digitar denovo.

Nota II: o comando “<?php include(“enviar.php”)?>”, está incluindo o arquivo
enviar.php, onde estão localizados, as validações dos campos e é claro o script para envio para seu email, vamos fazer este arquivo então.


enviar.php

<?php
/*Variaveis do Formulario*/
$nome = trim(@$_POST['nome']);/*recebe os dados digitados no campo "nome"*/
$email = trim(@$_POST['email']);/*recebe os dados digitados no campo "email"*/
$assunto_user = trim(@$_POST['assunto']);/*recebe os dados digitados no campo "assunto"*/
$mensagem = trim(@$_POST['mensagem']);/*recebe os dados digitados no campo "mensagem"*/

$enviar = @$_POST['enviar'];/*Botão enviar*/

/*variavel que contará os erros*/
$erros = 1;

/*transforma em variavel global, a vari&atilde;¡vel email*/
global $email;
if($enviar)/*Se o botão enviar for pressionado, faça...*/
{
			/*Verifica campo "nome" vazio*/
			if($nome == "")
				{
				$erros++;
				echo "<small class=\"erro\">O Campo nome esta vazio</small><br />";
				}
				elseif(is_numeric($nome))/*verifica se foi digitado n&uacute;mero no campo*/
				{
				$erros++;
				echo "<small class=\"erro\">Voc&ecirc; digitou numero no campo nome</small><br />";
				}
			/*Verifica campo "email" vazio*/
			if($email == "")
				{
				$erros++;
				echo "<small class=\"erro\">O Campo email est&aacute; vazio</small><br />";
				}
			/*Verifica campo "assunto" vazio*/
			if($assunto_user == "")
				{
				$erros++;
				echo "<small class=\"erro\">O Campo assunto est&eacute; vazio</small><br />";
				}
			/*Verifica campo mensagem vazio*/
			if($mensagem == "")
				{
				$erros++;
				echo "<small class=\"erro\">O Campo mensagem est&eacute; vazio</small><br />";
				}	

					/*verifica email, se digitado incorretamente*/
					$email = str_replace (" ", "", $email);
					$email = str_replace ("/", "", $email);
					$email = str_replace ("@.", "@", $email);
					$email = str_replace (".@", "@", $email);
					$email = str_replace (",", ".", $email);
					$email = str_replace (";", ".", $email);

					if(strlen($email)<8 || substr_count($email, "@")!=1 || substr_count($email, ".")==0)
					{
					$erros++;
					echo "<small class=\"erro\">Por favor, digite seu <b>e-mail</b> corretamente.</small><br />";
					}
					if($erros <= 1)/*se não tiver algum erro continuara abaixo, se tiver é exibido as messagens configuradas acima*/
					{

					/*Configuramos o e-mail para o qual serão enviadas as informações*/

					$seuemail = "seuemail@exemplo.com";/*email de destino*/

					$assunto = "contato do site";/*assunto padrão do email(não o digitado pelo úsuario)*/

					/*Configuramos os cabeçalhos do e-mail*/
					$headers = "MIME-Version: 1.0\r\n";
					$headers .= "Content-type: text/html; charset=utf-8\r\n";/*para o envio com formatação HTML. Charset po ser iso-8859-1 também*/
					$headers .= "From: $seuemail \r\n";/*Para "seu email"*/

					/*Configuramos o conteúdo do e-mail*/
					$conteudo = "<strong>Nome:</strong> $nome<br />";/*vai para o seu email o que foi digitado no campo "nome"*/
					$conteudo .= "<strong>Email:</strong> $email<br />";/*vai para o seu email o que foi digitado no campo "email"*/
					$conteudo .= "<strong>Assunto:</strong> $assunto_user<br />";/*vai para o seu email o que foi digitado no campo "assunto"*/
					$conteudo .= "<strong>Mensagem:</strong> $mensagem<br />";/*vai para o seu email o que foi digitado no campo "mensagem"*/

					/*Enviando o e-mail...*/
					$enviando = mail($seuemail, $assunto, $conteudo, $headers);

					/*verifica se o e-mail foi enviado com sucesso*/
						if($enviando) {
							echo "Mensagem enviada com sucesso!";
							echo "<script>alert(\"Mensagem enviada com sucesso!\")</script>";
							echo "<script>window.location = \"index.php\"</script>";
						}
						else{/*seu ouve algum erro...*/
							echo "<p><b>$nome</b><br />Ouve um erro no envio, desculpe-nos pelo transtorno!!!</p>";
						}
				}
}
?>

Sem notas dessa vez, os comentários(em verde) explicam tudo :).

Agora vamos a parte divertida, o CSS, :D

style.css

*{padding:0; margin:0;}/*reset de margem e espaçamento para todos os elementos*/

body{letter-spacing:2px;font-size:13px;color:#333;line-height:36px;}

fieldset{width:500px;padding:20px;margin:50px;}
input{width:350px;font-size:18px;color:#333;border:solid 1px #333;}
input.botao{width:100px;}

small{color:#008800;}
small.erro{color:#f00;}

baixe os arquivos completos aqui!

Categorias: (x)html/css · Desenvolvimento · Design · PHP · Tableless · Tutoriais · Web Standards
Etiquetado: ,

Os mais úteis sites/blog sobre WordPress

14/02/2009 · 5 Comentários

Cada vez mais eu me apaixono pelo wordpress, e é lógico visito muitos sites/blog sobre o mesmo, então estou listando logo abaixo os que mais costumo utilizar:

      valeu pessoal inté++

      Categorias: Desenvolvimento · WordPress
      Etiquetado:

      Instalando o TinyMCE no seu site

      13/01/2009 · 20 Comentários

      Depois de muita procura na Internet, depois de muitos testes, eu finalmente achei um editor de texto em JavaScript que satisfazesse minhas necessidades, testei o FCKeditor, NicEdit(esse eu gostei muito, é bem leve e simples,pena que não “produza” código em (X)HTML ) e o TinyMCE, esse ultimo realmente superou as expectativas, ele é leve, bem completo, tem 2 opções de uso: o Simples e o Avançado, além de skins, integração fácil de se fazer e fácil de personalizar e o melhor, dentro dos padrões.

      O TinyMCE transforma automaticamente qualquer textarea (obviamente os textareas que estão na página, cuja o script de integração esteja aplicado ) em um editor HTML Rich Text, segue abaixo então como fazer essa integração:

      • Baixe o pacote no site do TinyMCE
      • Descompacte na pasta onde está a página que deseja instalar o TinyMCE
      • Abra o arquivo desejado e entre as tag <head>…</head>, coloque uma dessas opções:

      Modo Simples:

      <script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
      <script type="text/javascript">
      	tinyMCE.init({
      		mode : "textareas",
      		theme : "simple"
      	});
      </script>

      Modo Avançado:

      <script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
      <script type="text/javascript">
      	tinyMCE.init({
      		// General options
      		mode : "textareas",
      		theme : "advanced",
      		plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
      
      		// Theme options
      		theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
      		theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
      		theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
      		theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
      		theme_advanced_toolbar_location : "top",
      		theme_advanced_toolbar_align : "left",
      		theme_advanced_statusbar_location : "bottom",
      		theme_advanced_resizing : true,
      
      		// Example content CSS (should be your site CSS)
      		content_css : "css/content.css",
      
      		// Drop lists for link/image/media/template dialogs
      		template_external_list_url : "lists/template_list.js",
      		external_link_list_url : "lists/link_list.js",
      		external_image_list_url : "lists/image_list.js",
      		media_external_list_url : "lists/media_list.js",
      
      		// Replace values for the template plugin
      		template_replace_values : {
      			username : "Some User",
      			staffid : "991234"
      		}
      	});
      </script>

      Nota #1: Caso você ache alguns botões desnecessários basta exclui-los/desabilitá-los, nas seguintes linhas:

      theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
      theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
      theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
      theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",

      Nota #2:Para mudar o posicionamento da bara de ferramenta no textarea, basta alterar as seguintes linhas:

      theme_advanced_toolbar_location : "top", //poderá mudar para bottom
      theme_advanced_toolbar_align : "left", //poderá mudar para right
      theme_advanced_statusbar_location : "bottom",//poderá mudar para top
      theme_advanced_resizing : true,

      Nota #3: Sobre a o pacote de tradução, sinceramente não consegui ainda faze-lá funcionar, então resolvi eu mesmo acessar a pasta: tinymce/jscripts/tiny_mce/themes/advanced/langs/ e editar os arquivos…um pouquinho de inglês técnico já basta!

      Tradução

      UPDATE: O Vinicius me avisou ali em baixo nos comentários, que enviou um pacote de tradução atualizado para o site oficial do TinyMCE, eu já testei e está funcionado muito bem. Então vamos ver como fazer a tradução:
      1 - Faça o download do pacote em português – link http://tinymce.moxiecode.com/download_i18n.php – selecionando o checkbox(portuguese) e clicando no botão download no final da lista.

      2- com o pacote extraido, copie as pastas para o diretório – \tinymce\jscripts\tiny_mce – e substitua os pacotes.

      3- Feito os passos 1,2 corretamente adicione a seguinte linha(em vermelho):

      [...]tinyMCE.init({
      // General options
       language : "pt", // adicione esta linha
      mode : "textareas",
      theme : "advanced",[...]

      Você pode adicionar esta linha tanto modo simples, quanto no avançado.

      Pronto, agora é só se divertir!

      <pre>&lt;script type=”text/javascript” src=”../jscripts/tiny_mce/tiny_mce.js”&gt;&lt;/script&gt;
      &lt;script type=”text/javascript”&gt;
      tinyMCE.init({
      mode : “textareas”,
      theme : “simple”
      });
      &lt;/script&gt;</pre>
      <strong>Modo Avançado:</strong>
      <pre>&lt;script type=”text/javascript” src=”../jscripts/tiny_mce/tiny_mce.js”&gt;&lt;/script&gt;
      &lt;script type=”text/javascript”&gt;
      tinyMCE.init({
      // General options
      mode : “textareas”,
      theme : “advanced”,
      plugins : “safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template”,

      // Theme options
      theme_advanced_buttons1 : “save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect”,
      theme_advanced_buttons2 : “cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor”,
      theme_advanced_buttons3 : “tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen”,
      theme_advanced_buttons4 : “insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak”,
      theme_advanced_toolbar_location : “top”,
      theme_advanced_toolbar_align : “left”,
      theme_advanced_statusbar_location : “bottom”,
      theme_advanced_resizing : true,

      // Example content CSS (should be your site CSS)
      content_css : “css/content.css”,

      // Drop lists for link/image/media/template dialogs
      template_external_list_url : “lists/template_list.js”,
      external_link_list_url : “lists/link_list.js”,
      external_image_list_url : “lists/image_list.js”,
      media_external_list_url : “lists/media_list.js”,

      // Replace values for the template plugin
      template_replace_values : {
      username : “Some User”,
      staffid : “991234″
      }
      });
      &lt;/script&gt;</pre>

      Categorias: Desenvolvimento · Software-Livre · Tutoriais · Web Standards
      Etiquetado: , ,

      Currículo dos Padrões Web

      16/11/2008 · Deixe um comentário

      Estava dando uma passada, no Revolucao.etc, e me deparei com uma postagem muito interessante: “Currículo dos Padrões Web”, o Danillo Nunes está fazendo um trabalho magnifico traduzindo o curso de padrões Web oferecido gratuitamente pela Opera Software, cujo objetivo é ensinar e incentivar a prática do desenvolvimento web de forma correta. Já fora traduzidos 3 artigos, de um total de 39 publicados em inglês.
      Então, como disse o Henrique Pereira(Revolucao.etc) vamos incentivar/ajudar o Danillo Nunes a continuar seu trabalho.

      Segue o Link: Tradução do “Currículo dos Padrões Web”, por Danillo Nunes


      Categorias: Acessibilidade · Cores · Desenvolvimento · Design · Tableless · Tutoriais · Web Standards
      Etiquetado: ,