Web standards, arquitetura da informação, usabilidade, acessibilidade, tecnologia, filosofia de buteco (sic), e qualquer coisa em uma casca de noz!

Ir direto para o conteúdo

Button Replacement

Por: Henrique Pereira

Monday 07 November 2005 às 03:51

Categoria: HTML / CSS / JavaScript

A estilização de input do tipo submit ou button não é algo novo. Procurando um pouco no Google, você encontrará dezenas de artigos ensinando como estilizar um input (o site foi desatualizado) submit ou button por css. Dependendo do layout os resultados obtidos podem até ser satisfatórios, mas a maioria dos webdesigners vão querer utilizar uma imagem que se harmonize melhor com o restante do layout do que um botão padrão estilizado. Dessa forma, quando se quer ter botões visuais, a alternativa comum é utilizar os input do tipo image, onde você insere um “src” de uma imagem que será utilizada como botão.

Bom até aqui nada de novo, mas imagine se você pudesse utilizar um botão do tipo submit ou button, colocar uma classe nele e alterar a aparência de todos os botões do seu site exclusivamente por CSS? Me deixe explicar melhor.

Eu desenvolvi uma maneira diferente de se utilizar botões visuais sem utilizar botões do tipo “image”. Eu disse “eu desenvolvi” por que eu não encontrei nada na internet sobre isso. Esforcei-me, procurei, mas nada encontrei. Se você já ouviu falar sobre o cálculo infinitesimal de Leibniz e Newton, com certeza deve saber que ambos chegaram às mesmas conclusões matemáticas, separadamente mais ou menos na mesma época. A ambos é creditado a invenção do cáculo infinitésimal. Por isso se você encontrar este código por aí, pelo menos algo publicado anteriormente me avise.

A técnica consiste no seguinte. Se você utilizar uma das diversas formas de image replacement para alterar a aparência de botões exclusivamente por CSS ela não vai funcionar. Testei algumas e a mais comum e eficiente é a que utiliza text-indent negativo para retirar o conteúdo e colocar uma imagem por CSS no lugar. Na verdade isto até poderia funcionar em alguns browsers com certas limitações, mas em outros não. Ao invés disso, tive que adaptar o CSS a realidade do botão.

No MSIE utilizei

text-indent:0px; line-height:999999px; border:0px;

Isso tem que ser inserido como hack, para que somente o Internet Explorer possa interpretar assim. Sem nenhum segredo a mais. Isso é necessário porque no Mozilla eu coloco um text-indent vantajoso para poder fazer a troca, o que não pode ser concebido pelo Internet Explorer.

Foi relativamente estranho inicialmente descobrir a importância do border:0px (na verdade você não precisa usar o px) em um domingo à tarde, de um dia quente e delirante. E quem teve este insight (do border:0px) foi o Bruno Torres, que também é a minha única testemunha fidedigna e com algum credito para esta técnica. Pelo Messenger, eu mostrei a ele o que tinha feito e lhe prometi que daria os créditos pelo border:0px e cumpri!

Para o Opera, a questão é mais delicada. Também é necessário inserir um hack próprio pra ele onde eu utilizo os seguintes atributos:

font-size:1px; padding-left:90px;

O padding-left é o responsável por empurrar o conteúdo e o font-size para torná-lo pequeno o suficiente para não ter que ser empurrado a uma distância maior. O text-indent negativo gera uma barra de rolagem no Opera que é evitada com este hack.

Talvez você esteja se perguntando qual a real vantagem em utilizar esta técnica no mundo real com sites feitos prêt-à-porter onde não há muitos botões. Bom, minha sugestões são as seguintes.

Se você tem um site muito grande, com vários botões do tipo submit/button, nos mais variados contextos, você pode economizar código tendo o endereço (source) de todos estes botões em um único lugar. Se você pensa em manter o código fonte e trocar o layout de um trabalho um dia, você também pode ter total controle mantendo o endereço do botão em um único CSS. Se você tem um site e pretende ter mais de um template ativo, como estou pretendendo ter neste site, você pode ter botões personalizados para cada template que quiser, considerando que o source dele também vem de CSS. E em uma última hipótese, saber que você simplesmente pode ter os endereços destes botões vindos por CSS, nada mais.

Em suma, depende do tipo de controle que você quer ter em um site. Na minha opinião, eu prefiro manter todo o endereçamento, de qualquer elemento que utilize uma imagem em meu CSS , mesmo que isto utilize alguns caracteres a mais, do que mantê-los no XHTML.

Você pode conferir um exemplo desta técnica em uso no hotsite Rubens de Freitas e uma página de exemplo (não válida antes que alguém comente) para você conferir todo o CSS deste artigo. Eu testei no Mozilla Firefox, MSIE e Opera. Talvez esta técnica não funcione no Konqueror e no Safari. Você pode me ajudar a testar e encontrar uma solução pra isso, ou simplesmente me detonar. Você escolhe como quer contribuir. Se der uma solução que funcione, me mande um screenshot por e-mail nos browsers que testar que eu te dou os créditos aqui!

Agora mande suas críticas sobre isto que eu escrevi. Se isso te chocou, arrepiou ou te causou qualquer outro sentimento por mais primitivo que seja, poste aqui suas críticas e desabafe.

Artigos relacionados:

Este texto não pode ser copiado ou reproduzido em nenhum outro site na íntegra sem autorização do autor!. Mais detalhes sobre licença de uso aqui!



Existem 9 comentários para “Button Replacement”

# 1° Sérgio Lopes Monday 07 November 2005 às 13:35GMT

Não funciona no Konqueror.

Funciona nos IEs 5, 5.5 e 6. Testados com o IEs4Linux – http://tatanka.com.br/ies4linux

# 2° Rodrigo Muniz Tuesday 08 November 2005 às 11:18GMT

Engraçado que tava fazendo o tema para o revolução css ontem e esbarrei exatamente nisso. Usei a velha técnica:
border: 0;
background:url(submit.png) no-repeat;
text-indent:-9999px;
usei também width e height e ficou aceitável no FF, Opera e IE6. Não testei nos outros.

# 3° Gustavo Cardoso Wednesday 05 April 2006 às 10:53GMT

Valeu Henrique…

Estava tendo problemas em tentar o tradicional Image Replacement nos botões. Sua técnica me salvou a vida. Está no meu css, com os devidos créditos.

Obrigado e um abraço!

# 4° ygdtsrs Thursday 14 December 2006 às 18:40GMT

Hello
Best site =)

G’night

# 5° Victor Leonardo Tuesday 08 May 2007 às 15:00GMT

Eu utilizo outra técnica.

border: none;
word-spacing: 999px;

Funciona também, mas só nos IE’s.

# 6° Marcelo Tuesday 29 May 2007 às 09:34GMT

Não está funcionando mais no I.E7

# 7° jan Friday 02 November 2007 às 06:15GMT

Não sei se não entendi direito (desculpe a ignorancia), mas coloquei os seguintes atributos e funcionol bem em todos os browsers citados.

input.enviar {width:64px;height:16px;font-size:1em;margin:10px 0 0 140px; color:#000;border:0;background:#fff url(../img/enviar.gif) top center no-repeat;}

Se nao for isso (e se der) voce poderia me explicar a diferença?

Obrigado

Um abração

# 8° Daniel Racca Friday 14 December 2007 às 21:35GMT

Mto bom post Henrique Costa!

O problema do IE é que o hack * HTML n funciona mais.

Mas tem uma solução aqui: http://www.tableless.com.br/csshack-para-ie7-ie-6-e-browsers-de-verdade

basta você colocar:

/**** PARA MSIE ****/
.search_btn { *text-indent:0; *line-height:999999px; *border:0; }

# 9° Rafael Dourado Tuesday 02 March 2010 às 21:05GMT

O link da página de exemplo sumiu…

Deixe um comentário

Observação: Todos os campos obrigatórios estão marcados com um asterisco (*).

Informações de Contato

Sobre o Revolução Etc

Henrique Costa Pereira O Revolução Etc é o site pessoal do Henrique C. Pereira que trabalha com design de interfaces, planejamento, arquitetura da informação e desenvolvimento para web. Ele escreve aqui sobre várias coisas relacionadas com acessibilidade, web standards, tecnologia, desenvolvimento e o que mais der na telha, além de eventualmente escrever alguma coisa ou outra para o Webinsider. Leia mais.

Publicidade

  • Banner
  • Banner

Henrique Costa Pereira - Revolução Etc - (CC) Alguns Direitos Reservados - Powered by WordPress

O conteúdo deste site de autoria de Henrique Costa Pereira está sob a licença de Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil. Permissões e/ou restrições além do escopo desta licença podem ser vistas e/ou requeridas na minha página de licença.

Nenhum conteúdo deste site pode ser copiado e reproduzido em outro site sem autorização do autor! Mais detalhes aqui!

Powered by WordPress