Aparentemente, o IE9 é capaz de lidar com cantos arredondados usando a definição padrão CSS3 de border-radius
.
E o suporte ao raio da borda e ao gradiente de fundo? Sim, o IE9 é suportá-los separadamente, mas se você misturar os dois, o gradiente sangra pelo canto arredondado.
Também estou vendo estranheza com sombras mostrando uma sólida linha preta sob uma caixa com cantos arredondados.
Aqui estão as imagens mostradas no IE9:
Como posso solucionar esse problema?
internet-explorer-9
gradient
compass-sass
css
SigmaBetaTooth
fonte
fonte
Respostas:
Aqui está uma solução que adiciona um gradiente de plano de fundo, usando um URI de dados para criar uma imagem semitransparente que sobrepõe qualquer cor de plano de fundo. Eu verifiquei que ele está cortado corretamente no raio da borda no IE9. Esse peso é mais leve que as propostas baseadas em SVG, mas, como desvantagem, não é independente de resolução. Outra vantagem: trabalha com seu HTML / CSS atual e não requer quebra com elementos adicionais.
Peguei um PNG gradiente aleatório de 20x20 por meio de uma pesquisa na Web e o converti em um URI de dados usando uma ferramenta on-line. O URI de dados resultante é menor que o código CSS para toda essa bagunça SVG, muito menos o próprio SVG! (Você pode aplicar isso condicionalmente ao IE9 apenas usando estilos condicionais, classes de CSS específicas do navegador etc.) Obviamente, gerar um PNG funciona muito bem para gradientes de tamanho de botão, mas não para gradientes de página!
HTML:
CSS:
fonte
background-size: 100% 103%; background-position:center;
é melhor. 100% para ambos os valores adiciona uma borda estranha na parte superior e inferior.Eu também tenho trabalhado com esse problema. Outra "solução" é adicionar uma div ao redor do item que possui os cantos gradiente e arredondado. Faça com que essa div tenha os mesmos valores de altura, largura e canto arredondado. Defina o estouro como oculto. Isso é basicamente apenas uma máscara, mas funciona para mim.
HTML:
CSS:
fonte
Acho que vale a pena mencionar que, em muitos casos, você pode usar uma sombra de caixa embutida para "falsificar" o efeito gradiente e evitar as bordas feias do IE9. Isso funciona especialmente bem com os botões.
Veja este exemplo: http://jsfiddle.net/jancbeck/CJPPW/31/
fonte
box-shadow: inset 0 -8px 10px rgba(0,0,0,0.15), 0 1px 0 rgba(255,255,255, 0.3), inset 0 1px 0 rgba(255,255,255, 0.3);
Você também pode usar CSS3 PIE para resolver esse problema:
http://css3pie.com/
Obviamente, isso pode ser um exagero se você estiver apenas dependendo de um único elemento com cantos arredondados e um gradiente de plano de fundo, mas é uma opção a considerar se estiver incorporando vários recursos CSS3 comuns em suas páginas e desejar suporte fácil para IE6 +
fonte
Também encontrei esse bug. Minha sugestão seria usar uma imagem de fundo repetida para o gradiente em ie9. O IE9 coloca a imagem corretamente atrás das bordas arredondadas (a partir de RC1).
Não vejo como escrever 100 linhas de código para substituir uma linha de CSS é simples ou elegante. O SVG é legal e tudo mais, mas por que passar por tudo isso quando soluções mais fáceis para fundos gradientes existem há anos.
fonte
Eu também fiquei preso no mesmo problema e descobri que o IE não pode renderizar o raio e o gradiente da borda de cada vez, ambos conflitam, a única maneira de resolver essa dor de cabeça é remover o filtro e usar o gradiente via código svg, apenas para o IE ..
você pode obter o código svg usando o código de cores degradê, da Microsoft neste site (feito especialmente para o degradê em svg):
http://ie.microsoft.com/testdrive/graphics/svggradientbackgroundmaker/default.html
desfrutar :)
fonte
Basta usar uma div de wrapper (arredondada e oculta) para cortar o raio do IE9. Simples, funciona em vários navegadores. Comentários SVG, JS e condicionais são desnecessários.
fonte
Esta postagem do blog me ajudou a: http://abouthalf.com/2010/10/25/internet-explorer-9-gradients-with-rounded-corners/
Basicamente, você usa um comentário condicional para remover o filtro e, em seguida, cria 'sprites' de gradientes do SVG que podem ser usados como imagens de fundo.
Simples e elegante!
fonte
url()
chamadas de imagem CSS . Apenas um se mantém à esquerda, portanto, elimine os 1000 condicionais e sirva ao SVG para o BG em todos os que o suportam. Para todos os outros, sirva uma imagem rasterizada. Então esse hack torna-se administrável.O IE9 lida com o raio da borda e os gradientes juntos corretamente. O problema é que o IE9 torna o filtro adequado , além de do gradiente. A maneira de resolver isso corretamente é desativar os filtros nas declarações de estilo que utilizam a propriedade filter.
Como um exemplo de como resolver isso da melhor maneira:
Você tem uma classe de botão na sua folha de estilo principal.
Em uma folha de estilo condicional do IE9:
Desde que a folha de estilo IE9 seja referenciada em sua cabeça após a folha de estilo principal, ela funcionará perfeitamente.
fonte
Existe uma maneira simples de fazê-lo funcionar no IE9 com apenas UM elemento.
Dê uma olhada neste violino: http://jsfiddle.net/bhaBJ/6/
O primeiro elemento define o raio da borda. O segundo pseudo-elemento define o gradiente de fundo.
Poucas instruções importantes:
A declaração do elemento base é algo como:
Declaração de pseudo-elemento:
fonte
Decidi desativar o IE9 dos cantos arredondados para solucionar esse bug. É limpo, fácil e genérico utilizável.
fonte
A máscara div no IE9 é uma boa ideia. Estou fornecendo algum código completo para ajudar a esclarecer um pouco. Embora não esteja satisfeito com a quebra do botão em uma DIV, acho que é mais fácil entender do que incorporar uma máscara PNG ou passar por todo o esforço usando SVG. Talvez o IE 10 o suporte corretamente.
fonte
Estava fazendo isso comigo e depois que removi a linha "filter": o sangramento desapareceu. Além disso, eu uso torta.
Sangramentos:
Não sangra:
Correção rápida da sombra do IE:
}
fonte
Você pode usar a sombra para obter gradiente e funcionará no Internet Explorer 9 com
border-radius
Algo assim:
fonte
Não tenho certeza se essa foi uma solução alternativa ou válida, mas ...
Descobri que, desde que o raio da borda seja maior que a largura da borda, não encontrei o problema. Quando eles eram iguais, eu estava conseguindo os cantos quadrados.
fonte
Usando bússola e sass você pode facilmente conseguir isso da seguinte maneira:
O Compass irá gerar uma imagem SVG para você.
igual a:
}
}
fonte
Funciona para mim...
css
fonte