Design Blog - Blog de design gráfico, web design e universo freelancer.


Cantos arredondados para qualquer navegador

Por | 04 de março de 2010 | Tags: , , , | 10 Comentários


Recentemente vimos aqui mesmo no Design Blog, um artigo que ensina Como criar cantos arredondados com CSS3. Mas como todos sabem o CSS3 ainda não foi implementado em todos navegadores. Este artigo fala uma maneira prática de criar cantos arredondados de forma que funcione em qualquer navegador.

Artigo de um colaborador - acesse o site do autor
Saiba como colaborar

Criar cantos arredondados em divs, sempre foi um grande desafio para muitos web designers, até o surgimento do atributo border-radius no CSS3. Mas esse atributo por enquanto, infelizmente, é suportado somente por três navegadores.

Mas isso não é motivo para deixarmos de usar cantos arredondados, pois existe uma maneira muito prática e rápida de fazer com que sua div fique com cantos arredondados em qualquer navegador. Então vamos ao que interessa:

A primeira coisa que devemos decidir é o tamanho do raio do canto. Após decidido o raio, devemos abrir algum editor de imagens e criar um círculo com o dobro do raio definido. Por exemplo: se o raio do canto for de 5px, o círculo deverá ter 10px de diâmetro.

Então, depois de criado o círculo, devemos cortá-lo em quatro partes, como na imagem abaixo, salve as imagens, com os mesmos nomes que coloquei abaixo, pois fica mais fácil de identificar a imagem certa para cada canto, além de poder servir como um padrão na hora de criar bordas para outras divs.

Uma observação muito importante a ser feita aqui, é que as imagens não podem ter fundo transparente, pois poderá haver alguns problemas na junção com a parte reta da borda.

Corte a ser feito na imagem

Corte a ser feito na imagem

Agora, que já temos as imagens necessárias, vamos criar a parte de CSS da div.
Inicialmente, vamos criar uma div principal, onde vai o conteúdo da caixa, e três classes: uma para definir padrões dos cantos, uma para definir retas horizontais e outra para retas verticais.


#divPrincipal {
position:relative;
margin:10px;
width:400px;
height:auto;
padding:5px;
overflow:hidden;
}

#divPrincipal .cantos {
width:5px;
height:5px;
z-index:10;
position:absolute;
}

#divPrincipal .retaH {
width:100%;
height:1px;
background-color:#666;
position:absolute;
z-index:1;
}

#divPrincipal .retaV {
width:1px;
height:100%;
background-color:#666;
position:absolute;
z-index:1;
}

No padding da #divPrincipal, devemos colocar o valor do raio do canto, na classe cantos, também devemos colocar no width e heigth o valor do raio do canto, além de declaram no z-index um valor maior do que o valor do z-index das classes de borda reta, para que as imagens dos cantos sobreponham as linhas retas.

Agora vamos declarar, cada uma div individual, para cada canto da div:


#divPrincipal #blt {
top:0px;
left:0px;
background-image:url(bLeftTop.png);
}

#divPrincipal #blb {
bottom:0px;
left:0px;
background-image:url(bLeftBottom.png);
}

#divPrincipal #brt {
right:0px;
top:0px;
background-image:url(bRigthTop.png);
}

#divPrincipal #brb {
right:0px;
bottom:0px;
background-image:url(bRigthBottom.png);
}

Repare que coloquei como id de cada uma das divs, uma sigla que identifique qual canto ela representa por exemplo: “Border Left Top” virou “blt”. Assim fica mais fácil de saber quais atributos devo colocar, por exemplo: se a div é do canto direito e no topo, coloco o valor 0px nos atributos right e top. Já se ela é no canto esquerdo, na parte de baixo da #divPrincipal, coloco 0px no left e bottom. Além de colocar como background, a imagem correspondente àquele canto.

Agora vamos declarar em nosso CSS, as bordas retas:

#divPrincipal #bTop {
top:0px;
}

#divPrincipal #bBottom {
bottom:0px;
}

#divPrincipal #bLeft {
left:0px;
}

#divPrincipal #bRigth {
right:0px;

Nas bordas retas, a situação fica ainda mais clara, só precisamos definir valor 0px para a direção que tal borda estará.

Agora, vamos partir para o HTML. Em sua página você deve colocar a #divPrincipal, e aninhada à ela, cada div de canto, e de borda reta. Após ter colocado cada div, vem o conteúdo da div em si. Como no exemplo abaixo.


<div id="divPrincipal">

<div id="blt" class="cantos"></div>
<div id="blb" class="cantos"></div>
<div id="brt" class="cantos"></div>
<div id="brb" class="cantos"></div>

<div id="bTop" class="retaH"></div>
<div id="bBottom" class="retaH"></div>
<div id="bLeft" class="retaV"></div>
<div id="bRigth" class="retaV"></div>

<p>Nesta caixa temos bordas arredondas que funcionam em qualquer navegador. </p>
<p>Ela foi testada no Internet Explorer 8, Firefox 3.5, Chrome e Opera 10.</p>
</div>

À partir desse exemplo, chegaremos a um resultado muito próximo ao da seguinte caixa:

exemplo

Pode-se usar também efeitos como sombras, brilhos, relevo, etc. na borda, é só adaptar o tamanho das divs dos cantos, altura da div de linha horizontal, largura da div de linha vertical, e o padding da divPrincipal, de acordo com suas necessidades.


Compartilhe o conhecimento


Canha

Criador e editor-chefe do Design Blog, trabalha como designer e programador no xCake. Nerd desde pequeno, ama tudo relacionado a internet. Seu maior sonho é entrar em algum quarto e dizer "Senhores, não se preocupem: sou da Internet".

Acesse seu site Siga no Twitter

Deixe seu comentário!

  • http://www.criaideias.com.br/ Gustavo Guichard

    É uma pena que pra usar este efeito temos que “adulterar” o HTML deixando-o pouco semântico.
    Eu ando usando o CSS3 pra isso, já que é totalmente decorativo e não atrapalha no conteúdo, salvo algumas exceções…

  • http://www.inventador.com.br Renato Alves

    É, eu também sou da opinião do Gustavo, essas “gambiarras” deixam o código muito poluído, dificultando a manutenção dele.

    Eu sou a favor de um javascript não obstrusivo pra arredondar as bordas, mas é aquele negócio, dá um delayzinho pra carregar, pode não funcionar em algum browser..Não tem muito jeito “legal” pra se fazer, é CSS3 na veia!

    Mas isso não interfere em nada na qualidade do teu artigo! Parabens por mostrar essa solução, tenho certeza que vai ajudar muita gente!

  • http://design.blog.br Canha

    Pessoalmente, eu faço efeitos em CSS3 apenas para embelezar. Acho que se for um efeito CSS3 necessário (que não degrade tranquilamente em pseudo-navegadores como o IE), melhor não fazer.
    Pelo menos, por enquanto, é tudo que podemos fazer como web designers.

  • http://www.i9wd.com.br Lucas

    To com o canha nessa, acho q é válido sim usar soluções genéricas, aliás, sempre será, acho q é muito utópico acreditar que um dia desenvolveremos de um jeito e este jeito será interpretado da mesma maneira por todos navegadores.

  • http://www.paulowd.com.br/blog Paulo

    Concordo com o que todos disseram, os efeitos novos implantados no CSS3 (pelo menos os que conheço até agora) servem apenas para embelezar o site.
    Mas às vezes um visual “arredondado” pode ser uma exigência do cliente, o que seria facilmente resolvido se todos navegadores já interpretassem CSS3, mas como isso ainda não acontece, a solução mais prática é o uso de um js não obstrutivo como o Renato falou, mas isso pode afetar um pouco na questão da usabilidade, já que hoje existem usuários que deixam o js desativado em suas máquinas.
    Por isso resolvi compartilhar essa solução encontrada, que acredito que é a mais funcional, levando em consideração todos os contras citados acima.

  • http://leandrozambelli.com.br leandro

    esta é uma das diversas técnicas, mas acredito que seja mais fácil fazer a div normal, sem cantos arredondados e usar jquery para arredondar os cantos. a vantagem do jquery é que ele faz todos os navegadores funcionar com canto arredondado, inclusive o explorer 6

  • http://www.joaobem.biz/blog design grafico

    Quase me dá vontade de rir só de pensar em como ainda há pouco tempo era difícil criar os cantos arredondados e agora com o css3 é super fácil! :)

  • http://www.helpmasters.com.br João Pedro R. Prado

    Ola, muito bom seu artigo Canha. Realmente é uma pena nem todos os navegadores suportarem alguns atributos do CSS3 mas isso esta mudando. Por exemplo, recentemente postei em meu portal uma notícia sobre o Opera 10.50 que atualmente já suporta o border-radius.

    Não é querendo divulgar ou fazer spam, mas deixo aqui o link para o artigo que postei para que os amigos também possam compartilhar desta novidade:
    http://helpmasters.com.br/artigo/109/bordas-arredondadas-sem-imagens-no-opera

    Acompanho seu blog e gosto muito dele, deixo aqui também meus parabéns pelo seu trabalho :D

  • http://www.anjodigital.com AnjoDigital

    gostei do post,,,, Parabéns! será bem útil…dentro obviamente das condições bem colocadas pelo Canha.

  • http://www.vitordesigner.com.br Vitor

    Parabens muito bom este post
    vitordesigner