O IE10 + não oferece mais suporte a tags de detecção de navegador para identificar um navegador.
Para detectar o IE10, estou usando JavaScript e uma técnica de teste de capacidade para detectar certos ms
estilos prefixados são definidos como msTouchAction
e msWrapFlow
.
Desejo fazer o mesmo para o IE11, mas presumo que todos os estilos do IE10 também terão suporte no IE11. Alguém pode me ajudar a identificar apenas os estilos ou recursos do IE11 que eu possa usar para diferenciá-los?
Informação extra
- Não quero usar a detecção de tipo de agente do usuário porque é muito irregular e pode ser alterada, também acho que li que o IE11 está intencionalmente tentando esconder o fato de que é o Internet Explorer.
- Para obter um exemplo de como funciona o teste de capacidade do IE10, usei este JsFiddle (não o meu) como base para meu teste.
- Também estou esperando muitas respostas de "Esta é uma má ideia ...". Uma das minhas necessidades para isso é que o IE10 afirma que oferece suporte a algo, mas está muito mal implementado, e quero ser capaz de diferenciar entre o IE10 e o IE11 + para poder prosseguir com um método de detecção baseado em capacidade no futuro.
- Este teste é acoplado a um teste Modernizr que simplesmente tornará algumas funcionalidades "alternativas" para um comportamento menos glamoroso. Não estamos falando sobre funcionalidade crítica.
TAMBÉM já estou usando o Modernizr, mas não ajuda aqui. Preciso de ajuda para uma solução para minha pergunta claramente feita, por favor.
Respostas:
À luz do segmento em evolução, atualizei o seguinte:
IE 6
ou
IE 7
ou
IE 6 e 7
ou
ou
IE 6, 7 e 8
IE 8
ou
Modo padrão do IE 8 apenas
IE 8,9 e 10
Apenas IE 9
IE 9 e superior
IE 9 e 10
Apenas IE 10
IE 10 e superior
ou
O uso de
-ms-high-contrast
significa que o MS Edge não será o alvo, pois o Edge não oferece suporte-ms-high-contrast
.IE 11
Alternativas de Javascript
Modernizr
Seleção de agente de usuário
Javascript:
Adiciona (por exemplo) o seguinte ao
html
elemento:Permitindo seletores CSS muito direcionados, por exemplo:
Nota de rodapé
Se possível, identifique e corrija quaisquer problemas sem hacks. Suporta aprimoramento progressivo e degradação elegante . No entanto, este é um cenário de 'mundo ideal' nem sempre possível, como tal - o acima deve ajudar a fornecer algumas boas opções.
Atribuição / leitura essencial
fonte
clip: auto\9;
ainda é interpretado comoclip: auto;
no IE 11. De alguma forma, isso não é ignorado ...@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { .relevant_selectors_for_situation {property:value;} }
eu a encontrei em mediacurrent.com/blog/…-ms-high-contrast: active
pode ser algo a evitar, porque de acordo com as especificações da MS, você realmente terá como alvo os usuários de tema de alto contraste no Edge com as regras do IE 10/11. Na página esta resposta está vinculada a sobre-ms-high-contrast
, na verdade, diz que apenas o-ms-high-contrast: none
valor não é mais compatível. Acho que ninguém menciona isso porque a maioria das pessoas não tem o modo de alto contraste habilitado e a maioria das pessoas não usa o Edge. Mas ainda assim, há alguém por aí que tem essa configuração e isso provavelmente não é legal para eles.Para direcionar apenas o IE10 e o IE11 (e não o Edge):
fonte
Então, no final, encontrei minha própria solução para esse problema.
Depois de pesquisar na documentação da Microsoft consegui encontrar um novo estilo apenas do IE11
msTextCombineHorizontal
Em meu teste, eu verifico se há estilos do IE10 e, se eles forem uma correspondência positiva, verifico apenas o estilo IE11. Se eu encontrar, é o IE11 +; se não, é o IE10.
Exemplo de código: detectar IE10 e IE11 por teste de capacidade CSS (JSFiddle)
Exibir trecho de código
Vou atualizar o exemplo de código com mais estilos quando os descobrir.
NOTA: Isso quase certamente identificará o IE12 e o IE13 como "IE11", pois esses estilos provavelmente continuarão. Adicionarei mais testes à medida que novas versões forem lançadas e, com sorte, poderei confiar novamente na Modernizr.
Estou usando este teste para comportamento de fallback. O comportamento substituto é apenas um estilo menos glamoroso, não tem funcionalidade reduzida.
fonte
if (document.documentMode === 11) { ... }
? A menos, é claro, que você queira usar a propriedade CSS em uma@supports
regra at (que ainda não é compatível com o IE, a propósito).Isso parece funcionar:
https://www.limecanvas.com/css-hacks-for-targeting-ie-10-and-above/
fonte
Aqui está uma resposta para 2017 em, onde provavelmente você só se preocupa em distinguir <= IE11 de> IE11 ("Edge"):
Exemplo mais demonstrativo:
Isso funciona porque o IE11 nem mesmo oferece suporte
@supports
, e todas as outras combinações de navegador / versão relevantes o fazem.fonte
Você pode escrever seu código do IE11 normalmente e, em seguida, usar
@supports
e verificar se há uma propriedade que não é compatível com o IE11, por exemplogrid-area: auto
.Você pode então escrever seus estilos modernos de navegador dentro dele. O IE não suporta a
@supports
regra e usará os estilos originais, ao passo que estes serão substituídos nos navegadores modernos que suportam@supports
.fonte
@supports
nenhum, portanto, ignora tudo no@supports
bloco. Portanto, você pode colocar qualquer coisa na condição @supports (por exemplo@supports (display: block)
) e o IE11 ainda irá ignorá-la.Isso funcionou para mim
E então, no arquivo css, as coisas prefixadas com
Quando este navegador está pronto para morrer?
fonte
Experimente isto:
fonte
Dê uma olhada neste artigo: CSS: Seletores de agente de usuário
Basicamente, quando você usa este script:
Agora você pode usar CSS para direcionar qualquer navegador / versão.
Portanto, para o IE11, podemos fazer isso:
FIDDLE
fonte
rv:11.0
em sua string de agente do usuário.Use as seguintes propriedades:
fonte
Você deve usar o Modernizr, ele adicionará uma classe à tag do corpo.
Além disso:
Observe que o IE11 ainda está em visualização e o agente do usuário pode mudar antes do lançamento.
A string do agente do usuário para o IE 11 atualmente é esta:
O que significa que você pode simplesmente testar, para as versões 11.xx,
fonte
Talvez o Layout Engine v0.7.0 seja uma boa solução para sua situação. Ele usa a detecção de recursos do navegador e pode detectar não apenas IE11 e IE10, mas também IE9, IE8 e IE7. Ele também detecta outros navegadores populares, incluindo alguns navegadores móveis. Ele adiciona uma classe à tag html, é fácil de usar e tem um bom desempenho em alguns testes bastante profundos.
http://mattstow.com/layout-engine.html
fonte
Se você estiver usando o Modernizr , você poderá diferenciar facilmente entre o IE10 e o IE11.
O IE10 não oferece suporte à
pointer-events
propriedade. IE11 sim. ( caniuse )Agora, com base na classe que o Modernizr insere, você pode ter o seguinte CSS:
fonte
Você pode usar js e adicionar uma classe em html para manter o padrão de comentários condicionais :
Ou use uma biblioteca como o bowser:
https://github.com/ded/bowser
Ou modernizr para detecção de recursos:
http://modernizr.com/
fonte
Detectar o IE e suas versões é extremamente fácil, pelo menos extremamente intuitivo:
.
Dessa forma, você também pegará versões altas do IE no Modo / Visualização de Compatibilidade. Em seguida, é uma questão de atribuir classes condicionais:
fonte
Você pode tentar isto:
fonte
Encontrei o mesmo problema com um Gravity Form (WordPress) no IE11. O estilo de coluna do formulário "display: inline-grid" quebrou o layout; aplicar as respostas acima resolveu a discrepância!
fonte
Dê um passo para trás: por que você está tentando detectar "internet explorer" em vez de "meu site precisa fazer X, este navegador oferece suporte a esse recurso? Se sim, bom navegador. Se não, devo alertar o usuário".
Você deve acessar http://modernizr.com/ em vez de continuar o que está fazendo.
fonte