Como posso criar cantos arredondados usando CSS?
cross-browser
rounded-corners
css
Eldila
fonte
fonte
Respostas:
Desde que o CSS3 foi introduzido, a melhor maneira de adicionar cantos arredondados usando CSS é usando a
border-radius
propriedade Você pode ler as especificações na propriedade ou obter algumas informações úteis sobre implementação no MDN :Se você estiver usando um navegador que não implementa
border-radius
(Chrome pré-v4, Firefox pré-v4, IE8, Opera pré-v10.5, Safari pré-v5), os links abaixo detalham várias abordagens diferentes. Encontre um que se adapte ao seu site e estilo de codificação e siga-o.fonte
Eu olhei para isso no início na criação do Stack Overflow e não consegui encontrar nenhum método para criar cantos arredondados que não me deixassem com a sensação de ter acabado de atravessar um esgoto.
O CSS3 finalmente define o
É exatamente assim que você deseja que funcione. Embora isso funcione bem nas versões mais recentes do Safari e Firefox, mas não no IE7 (e acho que não no IE8) ou no Opera.
Enquanto isso, são hacks até o fim. Estou interessado em ouvir o que outras pessoas pensam ser a maneira mais limpa de fazer isso no IE7, FF2 / 3, Safari3 e Opera 9.5 no momento.
fonte
Geralmente, recebo cantos arredondados apenas com css, se o navegador não suportar, eles veem o conteúdo com cantos planos. Se os cantos arredondados não são tão críticos para o seu site, você pode usar estas linhas abaixo.
Se você deseja usar todos os cantos com o mesmo raio, esta é a maneira mais fácil:
mas se você quiser controlar todos os cantos, isso é bom:
Como você vê em cada conjunto, você tem estilos específicos de navegador e, nas quarta linhas, declaramos de maneira padrão por isso assumimos que, no futuro, os outros (esperamos que o IE também) decidam implementar o recurso para que nosso estilo esteja pronto para eles também.
Como dito em outras respostas, isso funciona perfeitamente no Firefox, Safari, Camino, Chrome.
fonte
Se você estiver interessado em criar cantos no IE, isso poderá ser útil - http://css3pie.com/
fonte
Eu recomendaria o uso de imagens de fundo. As outras maneiras não são tão boas: sem anti-aliasing e marcação sem sentido. Este não é o lugar para usar JavaScript.
fonte
Como Brajeshwar disse: Usando o
border-radius
seletor css3. Até agora, você pode aplicar-moz-border-radius
e-webkit-border-radius
para navegadores baseados em Mozilla e Webkit, respectivamente.Então, o que acontece com o Internet Explorer? A Microsoft tem muitos comportamentos para fazer com que o Internet Explorer tenha alguns recursos extras e obtenha mais habilidades.
Aqui: um
.htc
arquivo de comportamento para obterround-corners
deborder-radius
valor no seu CSS. Por exemplo.Obviamente, o seletor de comportamento não é um seletor válido, mas você pode colocá-lo em um arquivo css diferente com comentários condicionais (apenas para o IE).
O arquivo HTC de comportamento
fonte
Com o suporte ao CSS3 sendo implementado nas versões mais recentes do Firefox, Safari e Chrome, também será útil consultar "Border Radius".
Como qualquer outra abreviação de CSS, o texto acima também pode ser escrito em formato expandido e, assim, alcançar um raio de borda diferente para o topleft, topright, etc.
fonte
jQuery é a maneira como eu lidaria com isso pessoalmente. O suporte a css é mínimo, as imagens são muito complicadas, para poder selecionar os elementos que você deseja ter cantos arredondados no jQuery faz todo o sentido para mim, embora alguns sem dúvida discutam o contrário. Existe um plugin que usei recentemente para um projeto em andamento aqui: http://plugins.jquery.com/project/jquery-roundcorners-canvas
fonte
Sempre existe a maneira JavaScript (veja outras respostas), mas como é puramente estiloso, sou contra o uso de scripts de cliente para conseguir isso.
A maneira como prefiro (embora tenha limites) é usar 4 imagens de cantos arredondados que você posicionará nos 4 cantos da sua caixa usando CSS:
Como mencionado, ele tem seus limites (o plano de fundo atrás da caixa arredondada deve ser simples, caso contrário os cantos não coincidem com o plano de fundo), mas funciona muito bem para qualquer outra coisa.
Atualizado: aprimorou a implentação usando uma folha de sprite.
fonte
Pessoalmente, eu gosto dessa solução da melhor maneira, é um .htc que permite ao IE renderizar bordas curvas.
http://www.htmlremix.com/css/curved-corner-border-radius-cross-browser
fonte
No Safari, Chrome, Firefox> 2, IE> 8 e Konquerer (e provavelmente outros), você pode fazer isso em CSS usando a
border-radius
propriedade Como ainda não faz parte oficialmente das especificações, use um prefixo específico do fornecedor ...Exemplo
As soluções JavaScript geralmente adicionam um monte de
div
s pequenos para parecer arredondado ou usam bordas e margens negativas para criar cantos com 1px. Alguns também podem utilizar SVG no IE.Na IMO, a maneira CSS é melhor, pois é fácil e será degradada normalmente em navegadores que não a suportam. Obviamente, esse é apenas o caso em que o cliente não os aplica em navegadores não suportados, como o IE <9.
fonte
Aqui está uma solução HTML / js / css que eu fiz recentemente. Há um erro de arredondamento de 1px com posicionamento absoluto no IE, então você deseja que o contêiner tenha um número par de pixels de largura, mas é bastante limpo.
HTML:
jQuery:
CSS:
A imagem tem apenas 18 px de largura e tem todos os 4 cantos juntos. Parece um círculo.
Nota: você não precisa do segundo invólucro interno, mas eu gosto de usar a margem no invólucro interno para que as margens dos parágrafos e títulos ainda mantenham o colapso da margem. Você também pode pular o jquery e apenas colocar o invólucro interno no html.
fonte
Como uma indicação de quão complexo é o funcionamento de cantos arredondados, até o Yahoo os desencoraja (consulte o primeiro ponto com marcadores)! É verdade que eles estão falando apenas de cantos arredondados com 1 pixel nesse artigo, mas é interessante ver que mesmo uma empresa com sua experiência concluiu que é muita dor para fazê-los trabalhar a maior parte do tempo.
Se o seu design pode sobreviver sem eles, essa é a solução mais fácil.
fonte
Claro, se é uma largura fixa, é super fácil usar CSS, e nem um pouco ofensivo ou trabalhoso. É quando você precisa escalar nas duas direções que as coisas ficam instáveis. Algumas das soluções têm uma quantidade impressionante de divs empilhadas umas sobre as outras para que isso aconteça.
Minha solução é ditar ao designer que, se ele quiser usar cantos arredondados (por enquanto), ele precisará ter uma largura fixa. Os designers adoram cantos arredondados (eu também), então acho que esse é um compromisso razoável.
fonte
O Ruzee Borders é a única solução de canto arredondado sem serrilhado baseada em Javascript que achei que funciona em todos os principais navegadores (Firefox 2/3, Chrome, Safari 3, IE6 / 7/8) e TAMBÉM é a única que funciona quando o elemento arredondado E o elemento pai contêm uma imagem de plano de fundo. Ele também faz bordas, sombras e brilho.
O RUZEE.ShadedBorder mais recente é outra opção, mas falta suporte para obter informações de estilo de CSS.
fonte
Se você quiser usar a solução border-radius, existe este site incrível para gerar o css que o fará funcionar no safari / chrome / FF.
Enfim, acho que seu design não deve depender do canto arredondado, e se você olhar para o Twitter, eles apenas dizem F **** para IE e usuários de ópera. É bom ter cantos arredondados, e eu pessoalmente estou bem em manter isso para os usuários legais que não usam o IE :).
Agora, claro, não é a opinião dos clientes. Aqui está o link: http://border-radius.com/
fonte
Além das soluções htc mencionadas acima, aqui estão outras soluções e exemplos para alcançar cantos arredondados no IE .
fonte
Não existe "o melhor" caminho; existem maneiras que funcionam para você e maneiras que não. Dito isto, publiquei um artigo sobre como criar uma técnica de canto arredondado com base em CSS + Image aqui:
Caixa com cantos redondos usando CSS e imagens - Parte 2
Uma visão geral desse truque é aquela que usa DIVs aninhados e repetição e posicionamento da imagem de fundo. Para layouts de largura fixa (altura elástica de largura fixa), você precisará de três DIVs e três imagens. Para um layout de largura de fluido (largura e altura extensíveis), você precisará de nove DIVs e nove imagens. Alguns podem considerá-lo muito complicado, mas o IMHO é a solução mais limpa de todos os tempos. Sem hacks, sem JavaScript.
fonte
Eu escrevi um artigo de blog sobre isso há um tempo, então para mais informações, veja aqui
Funciona muito bem. Não é necessário Javascript, apenas CSS e HTML. Com HTML mínimo interferindo nas outras coisas. É muito parecido com o que o Mono postou, mas não contém nenhum hacker específico do IE 6 e, após a verificação, parece não funcionar. Além disso, outro truque é tornar a parte interna de cada imagem de canto transparente para não bloquear o texto próximo ao canto. A parte externa não deve ser transparente para poder cobrir a borda da div não arredondada.
Além disso, quando o CSS3 for amplamente suportado com raio de borda, essa será a melhor maneira oficial de fazer cantos arredondados.
fonte
Não use CSS, o jQuery foi mencionado várias vezes. Se você precisar de controle total do plano de fundo e da borda de seus elementos, experimente o jQuery Background Canvas Plugin . Ele coloca um elemento Canvas HTML5 em segundo plano e permite desenhar todos os fundos ou bordas que você deseja. Cantos arredondados, gradientes e assim por diante.
fonte
O Opera ainda não suporta o raio da borda (aparentemente estará no lançamento após a versão 10). Enquanto isso, você pode usar CSS para definir um plano de fundo SVG para criar um efeito semelhante .
fonte