Bruno Dulcetti



Arquivos:

Categorias:

  • Amizade:

  • Artigos

  • Links:

    O meu, o seu, o nosso espaço!

    » Rails Rumble 2008 – Eu participei

    Thumb da marca do Rails Rumble

    No final de semana retrasado eu tive a grande oportunidade de participar do Rails Rumble, que é um concurso mundial, onde os caboclos que se inscrevem tem que entregar um aplicativo criado em 48h. Meio louco mas é isso mesmo.

    Canário belga. Um aplicativo em 48h? Difícil hein.

    Um bocado sim. Mas esse é o objetivo. E a linguagem que todos tem que utilizar, obviamente, é Rails.

    E parece meio impossível você criar uma aplicação em apenas 48h, mas isso é possível sim, mas com um planejamento bem estruturado e uma ótima equipe e dedicada. Pelo menos nesse segundo ponto nosso time conseguiu cumprir 🙂

    Quem participou com você Dulcetti?

    Grupo trabalhando no projeto
    Galera fingindo que estava trabalhando

    Bom, a nossa equipe foi a January River, em homenagem a nossa cidade maravilhosa (deu pra perceber né?), e era composta pelos seguintes modafocas:

    Parece meio que uma gang, dois Brunos e dois Pellegrinos, mas foi mais ou menos isso mesmo 🙂

    E o projeto tio Dulça?

    Thumb do projeto Pic My Diet

    Entramos no embalo da Dieta Flash, que chegou a ser transmitida pelo Fantástico e tudo mais. Onde as pessoas tiram fotos do prato que comem e postam no flickr. Com isso, as pessoas olham, inclusive ela mesmo e vê o que comeu, melhorando sua alimentação.

    Meio bizarro, eu sei, mas fazer o que. Dizem que funciona mesmo.

    Estranho mesmo Bruno

    E aproveitamos essa idéia, que venho do modafoca Bruno Carvalho e criamos uma aplicação que não precisava mais depender do flickr. Você sobe sua foto e publica como se fosse um post de blog mesmo, ou como se fosse o flickr.

    Legal hein Dulça

    Bastante, mas infelizmente não deu pra implementar nem 30%, 40% do que planejamos. E tudo isso por culpa da organização e planejamento, que é extremamente importante para qualquer tipo de projeto. O que põe mais ainda na minha cabeça que o Scrum é um modelo perfeito para tal. Por mais que não seja por post-it, mas de qualquer forma temos que ter histórias escritas, elaboradas e um cronograma por elementos e não blocos macros.

    Mas isso é que é legal, pois aprendemos com nossos erros e tudo mais. A vida é assim e fico feliz por ter errado e aprendido com isso e meus camaradas também pensam assim. Os erros são para isso mesmo.

    Mas não pensem que o projeto acabou…

    Naturalmente que não acabou. Estamos melhorando, já metendo a mão no código e fazendo todas as features que planejamos e estamos provendo para o lançamento em breve. Os deixarei informado por aqui 😀

    E o resultado? Onde tá?

    Está aqui meu nobre. Dá uma olhada. Estamos bem na colocação de design, onde o Vinicius mandou muito bem. Estávamos em quinto na última vez que vi e em trigésimo no ranking das aplicações, dentre mais de 200. Lembrando que nem entregamos 30%, 40% do que planejamos.

    Finalizando

    Fica a grande experiência de participar de um projeto foda, de uma pressão absurda. Com isso, eu descobri que consigo trabalhar tranquilamente sobre pressão e sem perder o ritmo, pois dormi na Globo.com às 5h e porrada e acordei 9h, frenético pra terminar o projeto e com gás e vontade de dar certo.

    E foi assim com toda a equipe. E fica a lição pra mim e para todos, que planejamento é tudo. Meu camarada Walmar Andrade fala muito bem sobre isso. Vale a leitura.

    E aguardem o projeto, pois em breve estará no ar 😉 Aproveita e vota no Pic My Diet lá 😉

    [ 27/out/2008 às 22:54hrs ] [ Por Bruno Dulcetti ] Comentários 4 Comentários |

    Categorias: Artigos,Criações,CSS,Flash,Pessoais,Tecnologia,Videolog

    » Hover avançado com bordas em imagens

    Falae pessoal. Parece até mentira, mas estou aqui novamente, retornando aos meus tutoriais mirabolantes, fascinantes, geniais e extremamente úteis para todos.

    O assunto dessa vez é o mesmo que o tutorial anterior, que falei sobre borda interna em imagens com link. Mostrarei um efeito em links, com bordas, em imagens 😀

    E como não poderia deixar de ser, é um efeito que a equipe aqui da Globo.com pediu pro Vinicius, só que ele veio perguntar pra mim se era possível. E como nada é impossível para Mr. Dulcetti. Lá fui eu implementar o efeito. E como não poderia deixar de ser, funcionou. E o melhor, CROOOOOOOOOOSSBROWSER!!!!! Sensacional, sensacional. 😀

    Mas de novo bordas em imagens Bruno?

    Sim. De novo. Mas relaxem, é um efeito diferente do que eu fiz para o efeito de borda interna dos sites da Globo.com, e que eu creio que muitos já quiseram fazer e não conseguiram, etc.

    É um efeito normal, que poderia ser feito normalmente, como eu mostro na figura abaixo:

    Print do efeito errado

    Um efeito de hover na imagem, onde existe a troca de cor da borda do link. Sim, cor da borda do link e não da imagem. O IE infelizmente não aceita todos efeitos em elemento dentro do link no hover do próprio. Mas lógico que isso você sabia (assim espero).

    Ta blz Dulcetti. Mas o tutorial é sobre esse efeito ae?

    Quase. É o mesmo efeito, mudança de cor na borda do link e talz. Maaaaaas, a diferença é que não existe esta borda duplicada entre as fotos. Percebam que a largura é de 5px para todos os links, mas como ficam um do lado do outro, entre eles ficam o dobro, ou seja, 10px de borda.

    Print dos tamanhos errados

    Poréeeeem, o problema é que no hover eu só consigo pintar a borda de um link, fazendo com que continue preta, a borda do próximo link. Veja o exemplo errado.

    O problema disso tudo, é que eu não consigo mudar a cor da borda de um link, seja ele próximo ou anterior. Infelizmente não temos essa liberdade. Com isso, tínhamos esse problema e o pessoal não queria isso.

    Resumindo, eles queriam o efeito abaixo:

    Print do efeito correto

    Perceberam que não existe duplicação de borda entre os links? Fazer isso é mole, se não fosse a troca de cor das bordas. Bastava setar borda superior e esquerda na <ul> e inferior e direita na <li>.

    Mas como nem tudo são flores né meu povo, lá foi o Dulcetti aqui resolver essa pemba.

    Vale ressaltar também, que a borda é colorida no hover, mas a borda preta em cima some, “invadindo” a <li> de cima.

    Beleza Bruno. Começa logo então…

    Ok, ok. Vamos dar início ao efeito. Vamos primeiro ao HTML:

    <ul>
    	<li><a href="#"  title=""><img src="escudo-flamengo.gif"  alt="" /></a></li>
    	<li><a href="#"  title=""><img src="escudo-flamengo.gif"  alt="" /></a></li>
    	<li><a href="#"  title=""><img src="escudo-flamengo.gif"  alt="" /></a></li>
    	<li><a href="#"  title=""><img src="escudo-flamengo.gif"  alt="" /></a></li>
    	<li><a href="#"  title=""><img src="escudo-flamengo.gif"  alt="" /></a></li>
    	<li><a href="#"  title=""><img src="escudo-flamengo.gif"  alt="" /></a></li>
    	<li><a href="#"  title=""><img src="escudo-flamengo.gif"  alt="" /></a></li>
    	<li><a href="#"  title=""><img src="escudo-flamengo.gif"  alt="" /></a></li>
    </ul>
    

    Um código extremamente complicado, difícil de ser entendido, complexo, mas creio que você seja safo para entender sem que o Dulcetti aqui explique ok?

    Um bando de <li> com link dentro, com imagem dentro, dentro de uma <ul>. É basicamente isso.

    Agora vamos a parte maaaaais complicada, pra variar…

    Implementando o CSS do efeito…

    Sim. O CSS é a parte mais chatinha de fazer e ser entendida. Eu sempre acho que é a parte mais tenebrosa para um desenvolvedor web.

    Vamos ao código?

    img {border:0;}
    ul {background-color:#000;margin:0;padding:5px 0 0 5px;width:180px;}
    ul:after {clear:both;content:".";display:block;height:0;visibility:hidden;}
    ul li {border-bottom:5px solid #000;border-right:5px solid #000;float:left;height:40px;width:40px;}

    Nada de muito complicado:

    • Retiramos a borda das imagens, isso porque quando ela recebe link, fica aquela borda azul linda em volta da imagem;
    • Depois colocamos o background da lista, zerando sua margem, colocamos um padding de 5px em volta da ul e finalizando com uma largura de 180px;
    • Essa técnica do after serve para os browsers, isso exclui o IE. Ela serve para quebrar o float de um elemento dentro do bloco, nesse caso as li’s
    • Adicionei borda na base e na lateral direita da li fechando o quadrante, float para ir pra esquerda, altura e largura de 40px;

    De início temos este resultado.

    Legal Bruno, mas cadê o hover?

    Calmae, muita calma nessa hora. Já deu pra ver o início do resultado, do nosso objetivo. Temos já a estrutura toda montada, li’s arrumadas e sem bug.

    Agora falta o principal… O hover.

    O tão falado e temido hover…

    Como já sabemos, o nosso grande amigo e preferido browser, vulgo IE, não aceita a pseudo-classe :hover.

    Okay, ele aceita, mas somente em links. Mas admita fã da Microsoft, esse é um dos maiores pecados do IE. Francamente…

    O mais correto era colocar a borda na imagem, como eu tinha dito, mas como citei, o hover no link não deixaria colocar borda na imagem. Portanto, tive que trabalhar em cima do link mesmo.

    Mas isso não é problema para Mr. Dulcetti.

    Dulcetti… Ta bom, anda logo com isso…

    Ok. Empolguei-me. Desculpe. Então vamos ao restante do CSS. Pasmem, são apenas mais duas linhas de código:

    ul li a, ul li a img {display:block;}
    ul li a:hover {border:5px solid #D2251C;margin:-5px 0 0 -5px;position:absolute;}

    Vamos a explicação:

    • A primeira linha é completamente difícil e complicada. Quase ninguém utilizou esta propriedade no CSS. Ela transforma o(s) elemento(s) em bloco(s). No nosso caso, link e imagem dentro do link. Precisamos disso para que a imagem não coloque akela margem automática quando não é bloco e para que o link funcione corretamente no nosso caso;
    • Agora a grande sacada. Nessa segunda linha, colocamos uma borda com cor vermelha e 5px de espessura. Damos uma margem negativa superior e a esquerda de 5px e colocamos o link com position absolute

    Vemos o resultado do efeito finalizado agora.

    Legal Bruno. Mas explica melhor…

    Seguinte: o link ficando com a borda vermelha de 5px, o que iria acontecer? O link, como bloco e com borda, iria acabar ficando dentro da “borda”, que na verdade é o padding preto da <ul>, formando uma borda dupla. Sendo que uma preta e a de dentro vermelha.

    Não queremos esse efeito. E para conseguirmos isso, colocamos a margem negativa do mesmo valor da borda, ou seja, 5px, fazendo com que o link ficasse colado na <ul>.

    Mas logicamente que a margem, somente, não era bastante para finalizarmos. No IE fica um samba do crioulo doido, enquanto no Firefox não pintava a borda da esquerda, por causa da borda da <li>, que é preta.

    Para resolvermos isso, colocamos o que? O temido position:absolute. Mas como as nossas <li>’s já possuem largura e altura, então não temos problema com isso, pq o tamanho ficará fixo, sem ser mexido.

    Resumindo…

    É isso. Um efeito simples, porém atrativo e que já recebi algumas dúvidas sobre como fazer e não vi nenhuma resposta, nenhum exemplo de como fazer isso.

    E como o código é bem curto, o efeito é simples e rápido, não precisou ficar escrevendo testamentos, etc. Tudo bem que eu poderia fazer outros exemplos, com bugs, etc, mas eu tenho certeza que eu iria terminar só ano que vem e ficaria gigantesco. Então tá bom assim mesmo e está aí. 😀

    Espero que gostem e que tenha sido útil. Aquele abraço e beijo na alcatra.

    [BBL]artigos, css, design, dicas, efeitos, web-standards, webstandards, xhtml[/BBL]

    [ 03/jan/2008 às 15:29hrs ] [ Por Bruno Dulcetti ] Comentários 28 Comentários |

    Categorias: Artigos,CSS,Webstandards

    » Como você escreve seus arquivos CSS? Parte 3

    Falae pessoal.

    Demorei um bocado para essa terceira parte, que eu acho que é a última, pelos meus cálculos e pelos detalhes e informações sobre os arquivos CSS que crio.

    Como vimos nos artigos anteriores, na Primeira e na Segunda Parte, vimos alguns detalhes sobre os arquivos CSS, que na minha opinião, melhora bastante, otimiza seus CSS’s.

    Mostrei vantagens e desvantagens, indentações, múltiplas formas de implementar seus estilos e espero ter ajudado, ou pelo abrir um pouco mais a cabeça da galera, principalmente com quem trabalha com projetos grandes em sua vida profissional.

    Beleza Bruno. Pára de enrolar e fala logo.

    Ok, ok. São apenas dois pontos que citarei nessa terceira parte do artigo:

    1. Utilização de Multi-CSS’s;
    2. Ordem de escrita das propriedades.

    Bom, vamos começar a falar sobre o primeiro.

    Utilização de Multi-CSS’s

    Muitas pessoas ainda possuem dúvidas sobre a utilização, se podem ou não, no que prejudica, no que ajuda, se é que ajuda, a utilização de vários arquivos CSS no seu site.

    Posso utilizar vários CSS’s?

    Não só pode como deve utilizar. Acho essencial a utilização de múltiplos arquivos CSS’s, dependendo da estruturação das páginas. Mas logicamente que existem limites para isso. Não é recomendável a utilização de 30 arquivos CSS’s pequenos, por exemplo, onde se poderia utilizar somente um ou dois. O tempo de renderização aumenta por ter vários arquivos.

    Você pode estar pensando “Caramba! Trinta arquivos? Esse Bruno tá maluco?”. Coisa de maluco, concordo plenamente, mas quando participarem de projetos grandes, verão que os “remendos” sempre acontecem, principalmente se já passou por várias mãos, vai pra aprovação, modifica layout, vai pra desenvolvimento, volta, vai pra qa, etc, etc, etc.

    Acaba passando na mão de várias pessoas, a página possui vários elementos globais, que utilizam CSS’s externos, entre outras coisas mais.

    Entendi Bruno. Mas como faço então?

    Eu fazia de um modo, que hoje eu acho errado, que era chamar um CSS somente e dentro dele eu chamava os outros:

    No HTML:

    <style type="text/css">
    @import "css/estilo.css";
    </style>

    No CSS:

    @import url(estilo2.css);
    @import url(estilo3.css);
    @import url(estilo4.css);

    Ok Bruno. E o que há de errado com esse CSS?

    Errado? Nada. Mas concorda comigo que cada vez que eu chamo o arquivo estilo.css, ele chama todos os outros arquivos CSS’s?

    E se em uma página específica eu não precisar desses CSS’s? Só precisar de um apenas? Eu chamando o estilo.css, já estou chamando os outros e como eu quero economia, otimização, não quero que isso aconteça, correto?

    A mesma coisa acontece se eu colocar todo o conteúdo dentro de um CSS somente. Sempre chamarei somente um, mas dependendo do site, ele pode ter centenas, ou até milhares (isso mesmo) de linhas, o que sobrecarrega bastante.

    Tudo bem que temos cache, mas queremos evitar esses problemas de peso, otimizar, certo? Então vamos fazer um trabalho decente 😀

    Sucesso. Mostra ae o modo correto de implementar essa parte do CSS

    Lembrando que não estou falando que tal modo é certo ou errado, somente o que eu faço e mostro aqui pra vocês opinarem, comentarem, discutirem, etc.

    Eu, geralmente crio um arquivo chamado geral.css, que engloba todas as tags gerais, toda a estrutura do site inteiro, como conteudo, rodape, topo, títulos, etc. Depois eu crio mais um arquivo internas.css, caso seja possível ter somente um arquivo com todas as informações.

    Com isso, temos dois arquivos, sendo que na home eu não chamarei o arquivo internas.css, por motivos óbvios certo? 😀

    Caso seja necessário, eu posso criar alguns outros CSS’s, para títulos, formulários (recomendado), elementos globais (apesar de eu usar no geral.css, mas vai de cada um.), entre outros mais.

    Boa Bruno. E agora é só chamar os arquivos CSS’s necessários no HTML certo?

    Exatamente. Não vou mais precisar escrever no CSS o import, para chamar os outros arquivos. Segue abaixo:

    Possuo três páginas: Home, Quem e Contato; e possuo três arquivos CSS: geral.css, internas.css e formularios.css.

    Home

    <style type="text/css">
    @import "css/geral.css";
    </style>

    Quem

    <style type="text/css">
    @import "css/geral.css";
    @import "css/internas.css";
    </style>

    Contato

    <style type="text/css">
    @import "css/geral.css";
    @import "css/internas.css";
    @import "css/formularios.css";
    </style>

    Na Home eu chamei somente um CSS, o geral.css, que é chamado por todas as páginas. Na página Quem, além do geral.css, chamo o internas.css porque é uma página interna e na página de Contato, eu chamos os três CSS’s porque além de precisar da estrutura contida no geral.css, ele é uma página interna e possui os formulários necessários.

    Bom, resumindo é isso. Com isso, temos uma estruturação, um controle maior dos CSS, cortamos chamadas desnecessárias de classes e ID’s.

    Ordem de escrita das propriedades.

    Exatamente isso que você está pensando, se é que está pensando :D. Eu penso na ordenação das propriedades nos meus CSS’s. Parece loucura, admito, o Arthur mesmo falou comigo que era coisa de maluco, perguntando se existia alguém que realmente fazia isso, e ele tomou um susto quando eu respondi que fazia isso 😀

    Tá Bruno, mas como assim? Como você ordena seus CSS’s?

    Exatamente como você está imaginando agora, em ordem alfabética mesmo. Meio difícil de aceitar no início, concordo, eu fui um pouco assim, mas sem ser xiita.

    Tudo depende da adaptação, em qualquer coisa, seja na vida pessoal, trabalho, convivência, etc. Tudo é questão de hábito e costume.

    É bem chato no início, mas depois que pega o ritmo, costume, vai rápido.

    Entendi Bruno. Mas qual a vantagem de deixar em ordem alfabética os CSS’s?

    Isso varia de cada um, claro. Na minha opinião, o que mais pesou para eu implementar desta forma foi a organização. Por mais que cada um tenha seu modo, sua ordenação, em ordem alfabética eu sempre saberei onde está, aproximadamente, o atributo que eu estou procurando para modificar. Resumindo, eu achei mais fácil pra localizar atributos.

    Finalizando…

    Bom, finalizo aqui mais uma etapa, creio eu que seja a última delas 😀 de escrita de CSS. Provavelmente existem outros links falando sobre, acabou que nem pesquisei sobre isso direito. Qualquer coisa é só postar nos comentários.

    Mandem comentários, dicas, críticas, dúvidas que eu vou abrindo a mente pra, quem sabe, ver outras maneiras, experimentar outros métodos de implementação.

    É isso, aquele abraço.

    [BBL]artigos, css, escrita-no-css[/BBL]

    [ 30/maio/2007 às 11:47hrs ] [ Por Bruno Dulcetti ] Comentários 15 Comentários |

    Categorias: Artigos,CSS,Webstandards

    » Como você escreve seus arquivos CSS? Parte 2

    Dando continuidade ao post anterior, venho aqui mostrar alguns detalhes que acabei não mostrando na primeira parte. É sempre assim, quando queremos falar sobre algo, quando temos a absoluta certeza que está concluído, vemos, mais tarde, que ainda faltava algo :D.

    Ferramentas compactadoras de CSS’s

    Alguns leitores postaram sugestões, opiniões e links interessantes, que postarei aqui alguns dos links citados.

    Falaram sobre escrever como quiser o CSS e depois passar numa ferramenta, otimizador, online para ele fazer a compactação, redução do código, para depois subir e deixá-lo online.

    É uma boa alternativa, porém ainda prefiro fazer na mão mesmo, pois podemos ficar meio que dependentes de tal ferramenta, e se por acaso ela não funcionar mais, não existir mais, estamos perdidos. Ok, sem exageros, mas causa dependência e eu não gosto muito disso.

    Segue a lista de links:

    Dei uma olhada muito rápida nos links e o q mais me agradou foi o Clean CSS, pelas opções, variações de compactação, etc. Mas não cheguei a testar nenhum. Mais pra frente, de repente :P, eu testo :D.

    Retornando a escrita CSS… 😀

    Bom, retornando ao assunto do Post, vou comentar sobre mais alguns pontos de escrita dos CSS’s. Eu batizarei um de hierarquia de elementos e o outro de referência de tags.

    Hierarquia de Elementos

    Quando falo de hierarquia de elementos no CSS, estou falando de elementos filhos sendo hierarquizados dentro dos arquivos CSS’s. Eu, na grande maioria das vezes, não faço hierarquia, utilizando somente a div correspondente.

    Explicarei melhor agora, porque está meio confuso. Veja o código abaixo:
    #geral #conteudo #minhaDiv {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    #geral #conteudo #minhaDiv2 {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    #geral #conteudo #minhaDiv3 {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}

    Olhando o código, se vc possui o mínimo de conhecimento em CSS, vc percebe que os ID’s #minhaDiv, #minhaDiv2 e #minhaDiv3 são “filhas” do ID #conteudo que é filho do ID #geral certo?

    Geralmente eu não faço desta forma, eu economizo mais. Usando o código deste exemplo, ficaria desta forma:
    #minhaDiv {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    #minhaDiv2 {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    #minhaDiv3 {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}

    Economizei bastante, pois retirei o “#geral #conteudo ” das linhas.

    Existem pontos fortes e fracos na utilização dessa hierarquia. O Ponto positivo, na minha opinião é que você limita o ID a funcionar SOMENTE quando ele fizer parte dessa hierarquia. E, às vezes, isso não chega nem a ser uma vantagem, pois você possa precisar deste mesmo comportamento em outra hierarquia, mas não funcionará por causa do “#geral #conteudo “.

    Muitos desenvolvedores utilizam a forma hierárquica, pois fica fácil de saber onde aquele elemento está, é filho de quem, etc. Mas se você trabalhar com CSS corretamente, separando seus arquivos CSS’s, com nomenclaturas corretas, você não precisará se preocupar com esses detalhes.

    Referência de Tags

    Este é simples e muitos usam este método. Mostrarei abaixo um exemplo para depois explicar:
    div#minhaDiv {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    div#minhaDiv span.minhaClasse {color:#666;}
    div#minhaDiv a.verMais {text-decoration:none;}

    Agora uma breve explicação sobre cada linha:

    › div#minhaDiv

    A div que tiver o identificador #minhaDiv, receberá todas as propriedades setadas.

    › div#minhaDiv span.minhaClasse

    O span que receber a classe minhaClasse e for “filho” da div que tiver o identificador #minhaDiv, receberá todas as propriedades setadas.

    › div#minhaDiv a.verMais

    O link que receber a classe verMais e for “filho” da div que tiver o identificador #minhaDiv, receberá todas as propriedades setadas.

    » Pontos Fortes e Fracos

    A utilização desta forma limita as propriedades a somente estas tags e pronto. Caso no HTML seja modificada alguma estrutura, o funcionamento pode ser danificado, por exemplo, de span, vire div, estas propriedades não funcionarão mais.

    Eu prefiro utilizar sem a referência de tags, a não ser que você tenha múltiplas tags utilizando a mesma classe.

    Finalizando…

    Bom, essa segunda parte é bem menor que a primeira e é assim que eu tentarei fazer sempre, escrever menos, mais direto. Apesar que sou muito detalhista e mastigo bem os tutoriais, artigos, etc. Acho que é melhor assim, mas é preocupante também quando fica grande, cansativo, etc. Mas eu vou treinando para isso não acontecer :D.

    Aquele abraço e valew a contribuição de todos.

    [BBL]artigos, css, escrita-no-css[/BBL]

    [ 23/abr/2007 às 16:14hrs ] [ Por Bruno Dulcetti ] Comentários 6 Comentários |

    Categorias: Artigos,CSS,Webstandards

    » Como você escreve seus arquivos CSS?

    Fala pessoal. Ressurgindo das cinzas como uma Fênix, aqui estou eu novamente, para encher vossos sacos 😀 e saber de vocês e mostrar como eu escrevo meus arquivos CSS‘s.

    Mas por que isso Bruno?

    Simples. Antigamente eu pensava que não tinha diferença na escrita dos CSS’s que eu criava, etc. E na verdade, no início é sempre assim, pouco damos valor a essas pequenas coisas, esses pequenos detalhes.

    Detalhes que fazem a diferença na sua grande parte. Lembrando que não estou falando da utilização das regras, como, quando e porquê usar tal propriedade CSS. Estou falando da escrita mesmo, como você cria, etc.

    Ainda não entendi direito Bruno. Explica melhor essa parte da escrita do CSS

    Vou mostrar um exemplo de uma forma de escrever, criar um arquivo CSS:

    .minhaClasse {
    	background-color: #CCC;
    	border: 1px solid #FC3;
    	color: #FFF;
    	height: 300px;
    	width: 200px;
    }
    
    .minhaClasse2 {
    	background-color: #CCC;
    	border: 1px solid #FC3;
    	color: #FFF;
    	height: 300px;
    	width: 200px;
    }
    
    .minhaClasse3 {
    	background-color: #CCC;
    	border: 1px solid #FC3;
    	color: #FFF;
    	height: 300px;
    	width: 200px;
    }
    

    Peço que não levem em conta que todas as classes estão com as mesmas propriedades. Coloquei mais para não ter que ficar criando, etc. Estou com preguiça e no trabalho, não esqueçam disso 😀

    Legal Bruno. E?

    Perceberam que esta é uma declaração simples de um CSS correto? Imaginem um CSS com 300 linhas de código, parecido com esses que passei agora. Bastante coisa, certo? O arquivo terá muitos ID’s, Classes, declarações para tags, etc.

    Sabemos também que é interessante termos um CSS compacto e leve correto? Com uns 8kb, 10kb no máximo não é verdade?

    Mas muitos não dão tanto valor por meros espaços em branco, coisas que, no início, parecem irrelevante, que geralmente não vão fazer diferença.

    Muitas vezes também por organização no código, entre outros motivos. Creio que quase todos começam assim, criando os códigos bonitinhos, quebrando linha, com indentação, bem organizado.

    Eu mesmo achava horríveis os códigos CSS’s que ficavam tudo em uma linha só, sem espaços, completamente difíceis de serem enxergados, etc. Tinha meio que um preconceito, uma certa dificuldade de aceitar tal forma de criar.

    Verdade Bruno. Mas como você faz seus CSS’s agora?

    Antes de responder essa pergunta, vou explicar porquê mudei minha forma de implementar meus CSS’s.

    › Razão 01 – Tamanho do Site

    Geralmente não pegamos sites gigantes pra fazer, implementar, etc. Pegamos sites pessoais, institucionais, com poucas visitações por mês, etc. Isso ajuda no vício de criar CSS’s mais bonitinhos, arrumados e organizados.

    Mas quando pegamos um projeto grande, algo em torno de milhões de visitas, percebemos a necessidade de melhorias no acesso, leveza do site, entre outras coisas essenciais num Portal.

    › Razão 02 – Visitação ao Site

    Parece que não, mas um CSS com 1kb a menos pode fazer a diferença. Imaginem um Portal como a Globo.com, com milhões de acessos diários. Agora multipliquem esse 1kb a menos com os milhões de acesso ao site. Chegamos num número absurdo de economia de banda, etc.

    › Razão 03 – Quantidade de linhas dos CSS’s

    Diminui absurdamente a quantidade de linhas no CSS. Muitas linhas num CSS não são coisas muito agradáveis, fica difícil de buscar elementos, futuras modificações, etc.

    › Razão 04 – Tamanho total dos CSS’s?

    Sim. Pode ser. Por que não?

    No Videolog, por exemplo, fiz um teste, retirei espaços, tabs, deixando na mesma linha e teve uma redução considerável, pensando em larga escala logicamente. No Videolog temos uns 36kb e pouco de CSS. :O Sim, verdade, projetos grandes necessitam de mais detalhes, principalmente quando temos formulários, grandes variações deles.

    No final, depois das mudanças e economias que fiz, os CSS’s ficaram, no total, com 30kb. Um ganho de mais de 6kb. Parece pouco, depende do ponto de vista, porque o Videolog recebe milhões de visitantes, page views e tudo mais. Imagine o ganho disso, multiplicando por milhões 😉

    Sem esquecer que ainda farei umas otimizações, para não haver chamadas desnecessárias aos CSS’s, por exemplo, páginas que não possuem formulários, não precisam chamar o css “formularios.css”. Algumas mudanças deste tipo ajudam na rapidez e peso da página.

    Interessante. Mas como os seus arquivos CSS estão escritos?

    Mostrarei o exemplo anterior utilizando a forma como estou escrevendo os meus CSS’s:

    .minhaClasse {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    .minhaClasse2 {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    .minhaClasse3 {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    

    Bem menos linhas concordam? Menos espaços em branco, tabs, etc.

    › Desvantagens

    Como nada é perfeito, temos desvantagens também, mas isso geralmente ocorre no início. É uma questão de adaptação. Meus primeiros três, cinco dias aqui na Globo.com foi chato, difícil e contra minha vontade acostumar com isso. Mas depois, pensando em um dos motivos que citei anteriormente, da parte de milhões de acessos, isso diminui absurdamente a quantidade de banda transferida, etc.

    Vou citar alguns pontos chatos nessa utilização:

    1. Desorganização no primeiro contato;
    2. Um pouco difícil de se encontrar/organizar no início;
    3. Falta de hierarquia, tabulação;
    4. Linhas extensas.

    Por enquanto eu vejo esses pontos fracos, mas caso vocês vejam outros, eu vou analisar e posto aqui também, sem problemas. Vou comentar um pouco mais sobre cada um:

    › Desorganização no primeiro contato

    Com certeza, quem ainda não escreve seus CSS’s desta forma, se assusta. No primeiro contato fica meio bagunça, difícil de enxergar, se localizar, concordo. Mas eu juro, com a prática e costume, fica tudo normal 😀 É como comer comida japonesa com hashi. No início é um desastre, mas depois se acostuma, pega a prática. (eu odeio comida japonesa, foi só mesmo para exemplificar :D)

    › Um pouco difícil de se encontrar/organizar no início

    Quando temos várias linhas, com as propriedades, ficamos meio perdidos no início, enrolados, pois são muitos caracteres, códigos, o que acaba confundindo, isso é fato.

    Em contrapartida, quando temos um css como o mostrado no primeiro exemplo, temos uma organização por blocos com várias linhas e não por linhas com várias propriedades, com isso, não achamos os blocos tão facilmente:

    #conteudo .box {
    	background-color: #CCC;
    	border: 2px solid #000;
    	color: #333;
    	width: 200px;
    }
    
    #conteudo .boxTal {
    	background-color: #000;
    	border: 1px solid #666;
    	color: #FFF;
    	width: 200px;
    }
    

    Percebemos que as duas classes estão contidas, somente, no ID conteúdo. Correto? O prefixo #conteudo afirma isso (isso é básico e espero que todos saibam disso).

    Mas percebam que de cara não é tão fácil perceber isso. Pensamos um pouco, nem que sejam alguns milésimos de segundos a mais (ok, ok… dei uma de Steve Krug agora :D). Mas é a pura verdade. Do segundo modo, temos uma melhora visual da hierarquia das linhas, elementos e propriedades:

    #conteudo .box {background-color:#CCC;border:2px solid #000;color:#333;width:200px;}
    #conteudo .boxTal {background-color:#000;border:1px solid #666;color:#FFF;width:200px;}
    
    #lateral .box {background-color:#CCC;border:2px solid #000;color:#333;width:200px;}
    #lateral .boxTal {background-color:#000;border:1px solid #666;color:#FFF;width:200px;}
    

    Percebam que nas duas linhas o #conteudo está um logo abaixo do outro, o que já afirma serem “filhas” do mesmo bloco quando batemos o olho. O mesmo vale para o prefixo #lateral.

    › Falta de hierarquia, tabulação

    Como já vimos, a tabulação é perdida, com isso, sua hierarquia de propriedades de um elemento. Não estou falando da hierarquia de múltiplos elementos e sim hierarquia de elementos › propriedades, quais propriedades são de quais elementos, etc.

    Os elementos são escritos colados na esquerda, enquanto as propriedades são escritas com uma TAB a mais no código, referenciando que essa propriedade é filha do elemento logo acima.

    › Linhas extensas

    Os elementos quando possuem muitas propriedades, muitas declarações, acaba estendendo a linha demais, ficando meio difícil de acompanhar e invadindo o final da tela, não ficando totalmente visível em alguns casos, sendo obrigado a rolar a barra horizontal para verificar tudo.

    Isso é bem normal, nada tão grave ao meu ver. Mas…

    Legal Bruno. Mas podem existir variações nessa forma de escrita?

    Com certeza. Vou mostrar algumas variações nessa forma de Implementar seus CSS’s. Principalmente na parte de propriedades para multi-elementos.

    Vou listar abaixo algumas variedades, mas fiquem à vontade de sugerirem algumas:

    • Com espaços;
    • Com espaços depois das propriedades;
    • Sem espaços;
    • Multi-elementos na mesma linha;
    • Multi-elementos em mais de uma linha.

    Com espaços nas propriedades do CSS

    Vejamos abaixo:

    .minhaClasse { background-color:#CCC; border:1px solid #FC3; color:#FFF; height:300px; width:200px; }
    

    Algumas pessoas fazem desta forma, principalmente para facilitar na identificação das propriedades, separação. Mas tem um ponto importante também, que é abrir o arquivo no Notepad, e como ele é péssimo nos atalhos dos desenvolvedores, não considerando caracteres especiais, desta forma ajuda e muito.

    Com espaços somente depois das propriedades no CSS

    Vejamos abaixo:

    .minhaClasse {background-color:#CCC; border:1px solid #FC3; color:#FFF; height:300px; width:200px;}
    

    O mesmo que o anterior, mas sem espaços após a { de início e } de final das declarações das propriedades.

    Sem espaços

    Vejamos abaixo:

    .minhaClasse {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    

    A forma que eu utilizo. É um pouco mais complicada de entender, mas é a mais econômica de todas. E como não abro, geralmente, pelo Notepad os CSS’s, não tenho problemas com ele.

    Multi-elementos na mesma linha

    Vejamos abaixo:

    .minhaClasse, .minhaClasse2, .minhaClasse3 {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    

    Caindo agora pra parte de declarações para múltiplos elementos, temos este, que é o utilizado geralmente. Já utilizei bastante, principalmente quando temos poucas propriedades na declaração, mas quando é ao contrário, temos o problema da linha ficar muito comprida, o que eu não acho legal.

    Fora que, às vezes, pode parecer que os múltiplos elementos é um só.

    Multi-elementos em mais de uma linha

    Vejamos abaixo:

    .minhaClasse,
    .minhaClasse2,
    .minhaClasse3 {background-color:#CCC;border:1px solid #FC3;color:#FFF;height:300px;width:200px;}
    

    A forma que utilizo hoje em dia. Acho mais organizada e mais fácil de se localizar.

    Conclusões…

    Fica claro que cada Projeto é um Projeto, cada Profissional é um Profissional. Apenas mostrei aqui alguns exemplos, minha opinião sobre e recomendações, fiquem à vontade para decidirem e discordarem. Estamos ae pra isso 😀

    Acho que em projetos pessoais, como portfólio, sites institucionais, de pouco tráfego, não seja necessário. Assim como um profissional que não esteja numa grande empresa, participando de um Mega Projeto Web, talvez não seja prioridade fazer das formas que citei aqui. Mas acho que pelo menos já deixa o desenvolvedor preparado para Projetos grandes, com muito tráfego, ou até mesmo nos sites e sub-sites da empresa onde trabalhará mais pra frente.

    Finalizando (Ufa :D)

    Fico por aqui, desculpem o tamanho do artigo. Eu até iria dividir em partes, mas não achei legal fazer desta forma. Da próxima vez eu planejo tudo direitinho, para deixar separado, organizado blz?

    Aquele abraço a todos e eu tentarei ser mais ativo no Blog.

    [BBL]artigos, css, escrita-no-css[/BBL]

    [ 20/abr/2007 às 18:19hrs ] [ Por Bruno Dulcetti ] Comentários 20 Comentários |

    Categorias: Artigos,CSS,Webstandards

    » Vertical-align no CSS. Como, quando e por que usar.

    E ae galera. Estou aqui de volta, novamente, depois de uma sumida (pra variar não é verdade? :P). Mas eu juro que tentarei voltar com mais freqüência, postar mais colírios, vídeos do Videolog, etc.

    Que bom Bruno. Mas algo em especial ou só veio pra falar que está sumido?

    Não, não. Estou aqui para postar um artigo sobre uma propriedade CSS, o vertical-align, que vejo por ae que muita gente têm duvida na sua utilização, aplicação.

    Muitos desenvolvedores confundem e comparam com o atributo valign que é colocado dentro da tag <td> no HTML. Realmente é semelhante, o nome mesmo indica isso, mas as funcionalidades e aplicações são diferentes, quando não aplicada em células de tabelas.

    Legal Bruno. Então mostra ae. Quais as diferenças?

    Primeiramente, a propriedade vertical-align não é para ser aplicada em blocos e sim em elementos inline. A não ser que apliquemos em células de uma tabela, como estávamos acostumados.

    Vamos ver um exemplo de como os iniciantes utilizam a propriedade:

    Código HTML:

    <div id="box">
    Meu texto bem aqui.
    </div>

    Código CSS:

    #box {background-color:#F5F4F4;border:2px solid #CCC;height:200px;padding:5px;vertical-align:middle;width:400px;}

    Podemos ver o resultado desse exemplo aqui.

    Não vou explicar detalhadamente o que foi utilizado, pois é bem básico. A única coisa diferente usada foi o vertical-align mesmo.

    Como podemos ver, o resultado não foi satisfatório. O texto continuou no topo da div. Com isso, já podemos ver que confirma como eu disse acima, que a propriedade não funciona em blocos. 😉

    Certo Bruno. Mas como resolver isso então? (Parte 1 – line-height)

    Temos algumas variedades de resolver tal problema. A primeira seria a utilização da propriedade line-height com o mesmo valor da propriedade height. Veremos abaixo:

    #box {background-color:#F5F4F4;border:2px solid #CCC;height:200px;line-height:200px;padding:5px;width:400px;}

    Podemos ver o resultado desse exemplo aqui.

    Restrições e problemas.

    Como sempre, temos restrições nesse exemplo. Na verdade temos em tudo não é verdade?

    • Altura variável dentro do bloco;
    • Mais de uma linha dentro do bloco;

    Vamos às explicações:

    Altura variável dentro do bloco.

    Se tivermos um site dinâmico, onde a altura do elemento pode variar, teremos problemas, pois se o line-height for diferente do height, o texto não ficará centralizado.

    Mais de uma linha dentro do bloco.

    Bem grave esse problema, pois se tivermos mais de uma linha, a distância entre essas linhas ficará absurda, pois será sempre o valor do line-height, portanto, se tivermos três linhas de texto, por exemplo, teremos, no exemplo acima citado, uma altura de três vezes o line-height, pois temos três linhas e 200px de line-height, com isso, 3x200px.

    Veja o exemplo aqui.

    Certo Bruno. Mas como resolver isso então? (Parte 2 – display: table-cell)

    Lembram de eu ter dito que dentro de uma <td> e com o atributo valign fica tranquilo?

    Então tudo funcionaria se eu colocasse um display: table-cell certo? Quase. Graças ao nosso querido e amado internet explorer, não. E ainda por cima, nem no internet explorer 7 funciona. Pelo menos aqui não funcionou.

    Vamos ao exemplo:

    #box {background-color:#F5F4F4;border:2px solid #CCC;height:200px;display:table-cell;padding:5px;vertical-align:middle;width:400px;}

    Podemos ver o resultado desse exemplo aqui.

    Para quem utiliza browser, funciona perfeitamente. Mas para quem não usa, o texto continua no topo. Salve ie. 😀

    Mas então quando devo usar o vertical-align Bruno?

    Esse é o ponto que quero chegar. Como eu disse, o vertical-align são para elementos inline e não em blocos (fora os tds e ths da vida ok? 😉 ). Portanto, temos as restrições e problemas citados.

    Mostrarei alguns exemplos de como e quando usar o vertical-align.

    Alinhando imagem e texto centralizado verticalmente com o vertical-align.

    Veremos no código abaixo, como fazer para alinhar uma imagem e um texto centralizado verticalmente:

    Código HTML:

    <div id="box">
    <img src="http://brunodulcetti.com/artigos/vertical-align/macaco.jpg" alt="imagem" /> Meu texto bem aqui.
    </div>

    Código CSS:

    #box {background-color:# F7F6F1;border:2px solid #CCC;height:200px;padding:5px; width:400px;}
    #box img {vertical-align:middle;}

    Podemos ver o resultado desse exemplo aqui.

    Como podemos ver, a imagem e o texto ficaram centralizados verticalmente. Mas isso entre eles mesmo e não em relação ao bloco que os engloba.

    Tudo bem que neste exemplo eles acabaram ficando, mas porque eu retirei a propriedade height de dentro do CSS no bloco #box. Caso eu coloque um altura, não ficará mais.

    Alinhando inputs e texto centralizado verticalmente com o vertical-align.

    Veremos no código abaixo, como fazer para alinhar um input de texto e um texto centralizado verticalmente:

    Código HTML:

    <div id="box">
    Nome: <input type="text" name="txtNome" id="txtNome" />
    </div>

    Código CSS:

    #box {background-color:#F7F6F1;border:2px solid #CCC;font:80% "Trebuchet MS";padding:5px; width:400px;}
    #box input {border:1px solid #CCC;font:100% "Trebuchet MS";_vertical-align:middle;}

    Podemos ver o resultado desse exemplo aqui.

    Sim, eu sei. Eu utilizei um hack para o internet explorer 6 ou anterior. Mas fiquem tranqüilos, é só pra exemplo. Mostrarei abaixo uma solução correta para isso ;).

    O Firefox já posiciona verticalmente, sem precisar do vertical-align, mas o ie não. E colocando esta propriedade com o valor middle, o ie alinha no centro, mas o Firefox deixa o texto um pouco mais para cima.

    Qual dos dois está correto, não sei ao certo, mas como o Firefox está mais avançado em relação as CSS’s, então deduzo que ele está correto, principalmente pela próxima solução.

    Alinhando inputs e texto centralizado verticalmente com o vertical-align – Parte 2.

    Somente uma segunda solução que funciona em todos.

    Código HTML:

    <div id="box">
    <span>Nome:</span><input type="text" name="txtNome" id="txtNome" />
    </div>

    Código CSS:

    #box {background-color:#F7F6F1;border:2px solid #CCC;font:80% "Trebuchet MS";padding:5px; width:400px;}
    #box input {border:1px solid #CCC;font:100% "Trebuchet MS";vertical-align:middle;}
    #box span {vertical-align:middle;}

    Podemos ver o resultado desse exemplo aqui.

    Agora sim. Sem hacks e funcionando corretamente em todos. A diferença foi colocar um span e setar o vertical-align nele também.

    Com esse exemplo, deduzo que o Firefox está correto na renderização do exemplo anterior. Ele adiciona o vertical-align no input, deixando o texto sem. E no ie, parece que ao colocar no input, o texto já leva como padrão o vertical-align.

    Alinhando inputs e texto centralizado verticalmente com o vertical-align – Parte 3.

    A versão mais correta e semântica para este exemplo:

    Código HTML:

    <div id="box">
    <label for="txtNome">Nome:</label><input type="text" name="txtNome" id="txtNome" />
    </div>

    Código CSS:

    #box {background-color:#F7F6F1;border:2px solid #CCC;font:80% "Trebuchet MS";padding:5px; width:400px;}
    #box input {border:1px solid #CCC;font:100% "Trebuchet MS";vertical-align:middle;}
    #box label {cursor:pointer;vertical-align:middle;}

    Podemos ver o resultado desse exemplo aqui.

    Neste exemplo, utilizei o label que é o mais correto, setando o vertical-align nele e mais um cursor para diferenciar ;).

    Legal Bruno. Muito bom mesmo. Mas o vertical-align só tem o middle como valor no CSS cara?

    Acabei esquecendo de citar mais detalhes sobre essa propriedade não é verdade? Fiquem calmos, estarei falando mais sobre ela abaixo :P:

    • baseline: Valor padrão no CSS. Posiciona o elemento da linha base de acordo com seu “pai”;
    • sub: Deixa o elemento como sub-escrito;
    • super: Deixa o elemento como sobre-escrito;
    • top: Deixa o elemento alinhado ao topo do elemento que estiver mais ao topo da linha;
    • text-top: Alinha o elemento de acordo com o texto que estiver mais alto e seja seu “pai”;
    • middle: Exemplo utilizado nesse post. Deixa os elementos que estiverem com este valor alinhados ao meio com relação à eles mesmos ou à seus “pais”;
    • bottom: Alinha na base do elemento que estiver mais baixo.;
    • text-bottom: Alinha o elemento de acordo com o texto que estiver mais baixo e seja seu “pai”;
    • valor: Valor fixo em pixels, em ou %. Posiciona de acordo com o valor setado a partir da linha base do seu “pai”.

    Resumindo…

    Bom. Tentei passar aqui um pouco dessa propriedade do CSS. Ficou um pouco grande, admito, mas tentei detalhar ao máximo, sem tentar deixar massivo.

    Espero que tenham gostado e tenha sido útil. Caso tenha esquecido de algo ou falado alguma besteira, por favor, comentem que eu modifico ok? 😉

    Finalizando…

    To ficando por aqui, deixando uma homenagem ao Marrelton 😀 camarada que trabalha aqui na parte de desenvolvimento da Globo.com que se amarra nos títulos do meu Blog e talz… Akele abraço ae Elton 😉

    Akele abraço pra geral ae.

    [BBL]xhtml, webstandards, tutorial, web-standards, tableless, semantica, ie, dicas, desenvolvimento, css, artigos, vertical align[/BBL]

    [ 17/jan/2007 às 14:38hrs ] [ Por Bruno Dulcetti ] Comentários 35 Comentários |

    Categorias: Artigos,CSS,Webstandards

    » Até onde vai o limite da Semântica?

    E ae pessoal. Tempo que não posto sobre web standards, css e afins, que são os temas principais desse Blog. Muitos trabalhos, pouco tempo, meio “sem saco” para escrever (blogueiros são humanos também sabiam?) 😛

    Tá blz Bruno, mas isso todos dizem. Vá direto ao ponto…

    Ok, ok… Não estou aqui para falar de trabalho, dar desculpas sobre minha falta de tempo e “saco” sobre postagens no blog, etc. Estou aqui para falar de um assunto que tenho certeza que já passou na cabeça de praticamente todos os desenvolvedores web, que trabalham com webstandards.

    Semântica… A velha e temida semântica…

    Não falarei sobre semântica web, citarei alguns exemplos para vocês entenderem e depois os casos reais para que vocês entendam porque estou escrevendo este post ok?

    Beleza então Bruno cite os exemplos.

    Todos sabemos que as tags <hn> são as tags de título (onde n é o número que varia de 1 a 6), sabemos também que a tag <a> é para links, <p> serve para parágrafos, etc, etc, etc.

    Sabemos que temos tags que são display block e display inline correto? Não sabemos? Okay, explicarei um bocado sobre:

    Display Block

    Traduzindo, são blocos. Os elementos blocks adicionam uma quebra de linha antes e depois dele próprio. Seria como se tivesse um <br /> antes e depois da tag. Podem conter tanto elementos inlines quanto blocks dentro dele.

    Alguns Exemplos:
    • <p>
    • <h1>
    • <div>

    Display Inline

    Ao contrário do block, os elementos inlines não quebram linha. Podem conter outros elementos inlines dentro dele próprio, mas não é permitida a inserção de elementos do tipo block dentro deles.

    Alguns Exemplos:
    • <a>
    • <strong>
    • <em>

    Resumindo…

    Veremos alguns exemplos da forma correta e da forma não-correta de se utilizar elementos inlines e blocks:

    Modo correto

    <p>Aqui vem o <a href="#">meu link com <em>Itálico</em></a></p>

    Resultado

    Aqui vem o meu link com Itálico

    Como no meu css está configurado para os links ficarem em negrito, acabou ficando tudo em negrito onde tem o link ok?

    Neste exemplo podemos ver que temos o parágrafo, que é block, e dentro dele temos um link, que é inline, que dentro dele temos um em q dá ênfase ao termo entre esta tag.

    Resumindo, temos inline dentro de inline, que estão dentro de um bloco, tudo certinho.

    Modo incorreto

    <a href="#">
    <h1>Aqui vem o título</h1>
    <p>Aqui vem o parágrafo</p>
    </a>

    Resultado

    Como o resultado irá invalidar o código, podendo deixar uma bagunça, criei uma página só pra esse exemplo.

    Agora iremos ao ponto chave desse post.

    Vimos que esse segundo exemplo está errado, pois o link, que é um elemento inline, contém elementos blocks (h1 e p). Percebam que MESMO declarando no css o display: block pra link, ele, por padrão na W3C, é inline, portanto é descartado o CSS, ou seja, não é validado pela W3C.

    Beleza Bruno, mas o que podemos fazer?

    Temos uma opção, que seria englobar o h1 e o p dentro de uma div e coloca um link dentro do h1 e outro, com o mesmo href, dentro do p. Veremos neste exemplo.

    Agora sim, ele ficou validado pela W3C, porém, podemos ver dois pontos, o primeiro é que o link não ficou englobado totalmente na div, somente quando passa em cima do texto e a o segundo ponto é que temos que colocar o link duas vezes, com o mesmo endereço e isso pode aumentar de acordo com os elementos dentro dessa div.

    Verdade Bruno… Mas não tem nenhuma opção de conseguirmos validando na W3C?

    Até temos uma opção, que criei aqui agora, mas seria bem do tipo POG.

    Vamos ver o código HTML:
    <div>
    <a href="#"> </a>
    <h1>Aqui vem o título</h1>
    <p>Aqui vem o parágrafo</p>
    </div>

    Aqui, nada demais. Uma div com um link, um título e um texto de parágrafo. A única diferença é no link, que está vazio e por cima de todos. Vamos entender, vendo o código CSS:
    div {
    width: 140px;
    border: 1px solid #900;
    background-color: #E4E5E5;
    position: relative;
    overflow: hidden;
    }

    a {
    display: block;
    width: 1000px;
    height: 1000px;
    position: absolute;
    background-color: #E4E5E5;
    filter: alpha(opacity=0);
    opacity: .0;
    }

    h1, p { font: 12px Verdana; }

    Não entrarei em detalhes na lista de propriedades para a div, pois é bem básica. A única coisa diferente é que coloquei um position relative, porque irei usar dentro dela um bloco com position absolute. Coloquei também um overflow hidden, isso quer dizer que se algum conteúdo ultrapassar o tamanho da div, ele ficará oculto, sem atrapalhar em nada o layout da págin e da div.

    No título h1 e no parágrafo, só coloquei o tipo e tamanho de fonte, nada demais nisso ok?

    Agora que “o bicho pega” :D. No link que a brincadeira começa a ganhar forma e tudo começa a ficar mais fácil de ser entendido.

    O link recebe um display block, com isso, vira um bloco. Mas lembram que ele esta acima do link e do parágrafo, pois ele é inline e não pode englobar blocos?

    OBS: Não importa que você tenha setado no CSS que o link virou bloco, a W3C continuará não validando seu código, pois ela confere com o padrão dos links, e como o <a> é um elemento inline como padrão, não validará. 😉

    Não se assustem com os 1000px para a largura e a altura do link, pois como a div está com overflow hidden, o link só aparecerá dentro do tamanho disposto na div ;). Na verdade um 100% na altura e largura já funciona, mas no ie 6 não funcionou, aconteceu algum bug, ficando só pela metade, vai entender né… 😉

    Legal Bruno, mas o título e o parágrafo desceriam…

    Sim, mas como temos o position absolute, isso não acontece mais. Ele fica grudado na div e o conteúdo que vem depois dele, fica aparecendo também, o link fica por cima deles.

    Só isso? Mas tem mais código lá ué!

    Sim, eu sei. Na verdade, nosso problema teria sido resolvido, mas não podemos esquecer, temos que nos preocupar com o ie. Somente com aquele código, no ie 6 fica ruim, não funcionando totalmente, com o link somente em algumas partes da div.

    Mas isso é resolvido colocando uma cor de background no link, porém, teremos um link por cima de tudo, com uma cor sólida por cima. Ganhamos um problema. Temos um link na div toda, mas como tem uma cor de background, não vemos o conteúdo por trás.

    Mas temos soluções (gambiarras?) para tudo. 😀 Temos uma propriedade no css, a filter, que só funciona no ie. Os valores variam dentro dessa propriedade, podemos colocar opacidade, blur, glow, entre outras coisas que não ficarei aqui citando.

    No nosso caso, precisamos da opacidade, por isso, coloquei o seguinte valor:
    filter: alpha(opacity=0);

    Nesse caso, alpha modifica a opacidade do elemento, que nesse caso é o nosso link. Setei um valor 0 (zero), que significa que quero totalmente transparente. O valor varia de 0 (transparente) até 100 (totalmente visível).

    Mas só resolvemos o problema do ie, conseguimos deixar o link transparente no ie, falta no Firefox também. Mas precisamos só de mais uma propriedade, a opacity, que recebendo 0 (zero), fica totalmente transparente.

    Ufa. Que saco hein Bruno

    Nem me fale isso. É um saco isso tudo, mas conseguimos chegar no resultado final.

    Lembrando que, esse macete não funciona no Opera. Não tenho Opera aqui instalado, por isso não posso confirmar, mas tenho quase certeza que não funciona, ou seja, não é muito legal utilizá-lo :D.

    Voltaaaaaaaaaando ao foco do Post…

    Acabei escrevendo até um pequeno tutorial, mas tudo bem né :D. Acabei saindo do foco do assunto do post.

    Mas voltando ao assunto dele, chegamos no ponto crucial. Vimos aqui que temos soluções para esse probleminha mostrado por mim aqui, mas vimos que é meio chato fazer e não muito funcional, pois como eu disse, não é certo de funcionar no Opera.

    Vale a pena focar a semântica SEMPRE? Ou melhor, vale a pena focar a Validação na W3C?

    Esse é o ponto principal do Post. Em relação a semântica, temos dois lados:

    • Link englobando o título e o parágrafo como um bloco, ficando invalidado na W3C, pois o título seria um h1 e o parágrafo um p;
    • Link englobando um strong e um span, sendo eles o título e o texto do parágrafo do texto, ficando assim, validado, pois é tudo inline.

    Na primeira opção, temos um link englobando tudo e o título sendo título e a descrição sendo um parágrafo, tudo correto, mas como o link é inline, não é validado.

    Na segunda, temos o link englobando tudo e um strong sendo o título e um span sendo a descrição. Passa no validador, mas no olhar semântico, nem tanto.

    É aí que entra a discussão, será que vale MESMO fazer tudo para validar na W3C? Mesmo que para isso você perca a semântica, as vantagens de se utilizar um h1, h2, h3, entre outros? Vale mesmo deixar tudo inline para validar? Será?

    Já vi posts sobre isso, como o do Henrique do Revolução etc, tem outro do Tableless chamado Validar é importante?!, etc.

    Eu acho importante validar na W3C Bruno. Por que você não acha?

    Não ponha palavras na minha boca (ou seria letras nas minhas teclas?), eu só estou dizendo que existem casos e casos. Você pode muito bem ter um site que ao invés de usar h2, utiliza um <p class=”titulo”>, existe o caso de você esquecer de fechar uma tag, etc, etc, etc.

    O caso que citei, foi um caso que está tudo certo, a única coisa “errada” é a utilização do link envolta do título e do parágrafo. Nosso código está semântico, está correto, a não ser pela W3C não permitir links, por serem inline, englobarem blocos.

    Como aqui na Globo o pessoal preza a validação na W3C (pelo menos tentar ao máximo), eles utilizam spans e mais spans dentro de links para não ficar errado na W3C.

    Eu acho que, neste caso, possa dar uma “esquecida” na W3C e colocarmos o link, não vejo mal algum nisso, está tudo funcionando, tudo certo, só a “bendita” W3C falando que meu código está incorreto. Eu não acho e aí? Como que fica isso? 😀

    Mas, isso varia de pessoas e pessoas e eu estou aqui para saber a opinião de cada um que lê este blog, para ver se eu estou viajando, se só eu que penso assim, ou tem desenvolvedores que pensam assim, mas nem sempre agem assim por causa dos seus trabalhos ;).

    Resumindo

    Na verdade, o que eu acho é que a W3C deveria criar uma nova tag, chamada <ablock>, que seria um link também, mas como um bloco, com isso, não precisaríamos nos preocupar com isso não é verdade? Ou melhor, fazer com que consultasse o CSS e visse “se o <a> é um bloco, então valido, senão não valido”, o que seria melhor ainda, pois não seria necessário a espera de novas versões dos browsers, que por parte do FF, Opera seria tranquilo, mas o ie… aff…

    Finalizando…

    E você? O que acha disso? Acha certo “pular a cerca” da validação da W3C nesse caso? Ou você faz parte do grupo “Validação acima de tudo”?

    Deixe sua opinião 😉

    Aquele abraço.

    [BBL]acessibilidade, artigos, css, globo, html, semantica, usabilidade, validacao, w3c, web-standards, webstandards, xhtml[/BBL]

    [ 30/nov/2006 às 17:27hrs ] [ Por Bruno Dulcetti ] Comentários 8 Comentários |

    Categorias: Acessibilidade,Artigos,CSS,Usabilidade,Webstandards

    Próxima Página »

    
    Copyright © 2005 Bruno Dulcetti | Creative Commons
    Bruno Dulcetti atuante na área de desenvolvimento web / webdesign e colaborador na área de webstandards pelo Blog BrunoDulcetti.com - blog. Atuante na área desde 2000. Atuando na cidade de Niterói/RJ - Brasil. E-mail: bruno@brunodulcetti.com