Como identificar o navegador Microsoft Edge via CSS?


90

Estou desenvolvendo um aplicativo da web e preciso identificar o navegador do Microsoft Edge separadamente dos outros, para aplicar um estilo exclusivo. Existe uma maneira de identificar o Edge usando CSS? Assim como,

<!--[if IE 11]>
Special instructions for IE 11 here
<![endif]-->

3
Por que você quer fazer isso?

2
você quase certamente não precisa fazer isso. Por que você está tentando fazer isso?
Patrick

37
Isso certamente é algo de que você pode precisar. No momento em que este artigo foi escrito, o Edge ainda está cheio de peculiaridades que irão bagunçar seriamente o CSS válido que funciona em todos os outros navegadores, incluindo o IE.
Lawyerson

Observação: os comentários condicionais usados ​​no exemplo só funcionam para o IE9 e anteriores, portanto, [se o IE 11] não funcionará de fato.
Sean McMillan

Respostas:


191

/ * Microsoft Edge Browser 12-18 (todas as versões anteriores ao Chromium) * /

Este deve funcionar:

@supports (-ms-ime-align:auto) {
    .selector {
        property: value;
    }
}

Para mais informações, consulte: Estranheza do navegador


8
A Microsoft está se movendo para remover o máximo possível de propriedades prefixadas -ms no MS Edge para que seja interoperável com outros navegadores. Como tal, está longe de ser garantido que funcione no futuro. Conforme mencionado em outras respostas, a detecção de recursos é muito mais preferível.
Charles Morris - MSFT de

1
Acabei de testar novamente e definitivamente funciona. Demonstração: jsfiddle.net/pd142446
KittMedia

@ CharlesMorris-MSFT Concordo com você, mas há casos em que apenas precisamos fazer isso. Por exemplo, eventos de ponteiro: nenhum; funciona bem no IE 11 e todos os outros navegadores, mas para de funcionar no Edge. Espero que, quando eliminarem o prefixo -ms, também consigam resolver os problemas que nos forçaram a usar CSS diferente em primeiro lugar. Nesses casos, a detecção de recursos não ajudará muito, porque todos os recursos estão lá, mas o Edge quebrou algumas coisas que o IE 11 finalmente corrigiu. Boa resposta da KittMedia, obrigado.
Emil Borconi

8
Este hack não funciona mais, porém este faz @supports (-ms-ime-align: auto) {.selector {property: value; }}
Roffers

1
@KittMedia foi removido do Edge 14
LJ Wadowski

19
/* Microsoft Edge Browser 12-18 (All versions before Chromium) - one-liner method */

_:-ms-lang(x), _:-webkit-full-screen, .selector { property:value; }

Isso funciona muito bem!

// for instance:
_:-ms-lang(x), _:-webkit-full-screen, .headerClass 
{ 
  border: 1px solid brown;
}

https://jeffclayton.wordpress.com/2015/04/07/css-hacks-for-windows-10-and-spartan-browser-preview/


1
@ r3wt _:-ms-lang(x), _:-webkit-full-screen,- apenas o MS Edge "entende" essa regra, outros navegadores a ignoram. A regra é seguida por uma classe ou nome de id de um elemento html e, portanto, é aplicada a ele. Em outras palavras, se um código css precisar ser aplicado a um elemento html apenas no navegador Edge, coloque essa regra especial antes da classe / id do seu elemento.
CodeGust

para que o navegador não os ignore e direcione o seletor, já que estão todos separados por uma vírgula? normalmente os ,seletores separados em css. é por isso que isso é confuso. Eu ainda não entendo por que outros navegadores iriam ignorar isso e somente o ms-edge aplicaria o css ao seletor após a vírgula
r3wt

1
@ r3wt se um seletor for inválido, todo o grupo de regras será ignorado. Ilustrado aqui css-tricks.com/…
CodeGust

@ r3wt obrigado! :) você me encorajou a escrever os detalhes que deveriam fazer parte da resposta inicialmente
CodeGust

@AlexandrKazakov possivelmente, isso é porque o Edge mais recente é baseado no motor Chromium (?) Qual versão você tem?
CodeGust

14

Mais preciso para o Edge (não inclua o IE 15 mais recente) é:

@supports (display:-ms-grid) { ... }

@supports (-ms-ime-align:auto) { ... } funciona para todas as versões do Edge (atualmente até o IE15).


2
For Internet Explorer 

@media all and (-ms-high-contrast: none) {
        .banner-wrapper{
            background: rgba(0, 0, 0, 0.16)
         }
}

For Edge
@supports (-ms-ime-align:auto) {
    .banner-wrapper{
            background: rgba(0, 0, 0, 0.16);
         }
}

-2

Detecção de recursos, detecção de recursos, detecção de recursos. Ainda estou para encontrar um bom caso de uso para explicar por que alguém precisaria farejar ou detectar com CSS. Você poderia explicar em detalhes um caso de uso?

CSS

Eu encontrei este post de Jeff Clayton , que ilustra como encontrar o Edge via CSS, mas também detecta o Chrome e o Safari.

/* Chrome, Safari, AND NOW ALSO the Windows 10 Edge Browser */
@media screen and (-webkit-min-device-pixel-ratio:0) {
  .selector { property:value; } 
}

Mas se você PRECISA cheirar:

String UA do Microsoft Edge:

Mozilla / 5.0 (Windows NT 10.0) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 42.0.2311.135 Safari / 537.36 Edge / 12.10136

Eu detalho o porquê nesta postagem do blog.

Neowin relatou recentemente que o novo navegador da Microsoft para Windows 10, Spartan, usa a string Chrome UA, “Mozilla / 5.0 (Windows NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 39.0.2171.71 Safari / 537.36 Edge / 12.0 ″. Isso é feito de propósito.

Você também notará que toda a string termina com “Edge / 12.0 ″, o que o Chrome não faz.

Devo ressaltar que este não é um desvio do que a Microsoft fez com o IE 11, que no Windows 8 lê: Mozilla / 5.0 (Windows NT 6.3; Trident / 7.0; rv: 11.0) como Gecko, conforme explicado neste postar.

O que o User Agent está farejando?

Freqüentemente, os desenvolvedores da web farão o UA farejando a detecção do navegador. Mozilla explica isso bem em seu blog:

Servir diferentes páginas da Web ou serviços para navegadores diferentes geralmente é uma má ideia. A Web deve ser acessível a todos, independentemente do navegador ou dispositivo que estejam usando. Existem maneiras de desenvolver seu site para se aprimorar progressivamente com base na disponibilidade de recursos, em vez de almejar navegadores específicos.

Aqui está um ótimo artigo que explica a história do Agente do Usuário.

Freqüentemente, os desenvolvedores preguiçosos apenas farejam a string UA e desabilitam o conteúdo em seu site com base no navegador que acreditam que o visualizador está usando. O Internet Explorer 8 é um ponto comum de frustração para os desenvolvedores, portanto, eles verificarão freqüentemente se um usuário está usando ALGUMA versão do IE e desabilitarão recursos.

A equipe do Edge detalha isso ainda mais detalhadamente em seu blog.

Todas as strings de agentes de usuário contêm mais informações sobre outros navegadores do que o navegador real que você está usando - não apenas tokens, mas também números de versão 'significativos'.

String UA do Internet Explorer 11:

Mozilla / 5.0 (Windows NT 6.3; Trident / 7.0; rv: 11.0) como o Gecko

String UA do Microsoft Edge:

Mozilla / 5.0 (Windows NT 10.0) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 42.0.2311.135 Safari / 537.36 Edge / 12.10136

A propriedade userAgent foi apropriadamente descrita como “um crescente pacote de mentiras” por Patrick H. Lauke nas discussões do W3C. (“Ou melhor, um ato de equilíbrio de adicionar palavras-chave legadas suficientes que não terão imediatamente o código antigo de detecção de UA caindo, enquanto ainda tenta transmitir um pouco de informações realmente úteis e precisas.”)

Recomendamos que os desenvolvedores da web evitem o sniffing de UA tanto quanto possível; os recursos da plataforma web moderna são quase todos detectáveis ​​de maneiras fáceis. No ano passado, vimos alguns sites de detecção de UA que foram atualizados para detectar o Microsoft Edge ... apenas para fornecer um caminho de código IE11 legado. Essa não é a melhor abordagem, pois o Microsoft Edge corresponde aos comportamentos do 'WebKit', não aos do IE11 (quaisquer diferenças entre o Edge e o WebKit são bugs que estamos interessados ​​em corrigir).

Em nossa experiência, o Microsoft Edge funciona melhor nos caminhos de código 'WebKit' nesses sites. Além disso, com a Internet se tornando disponível em uma variedade maior de dispositivos, assuma que navegadores desconhecidos são bons - por favor, não limite seu site a funcionar apenas em um pequeno conjunto de navegadores conhecidos. Se você fizer isso, seu site quase certamente quebrará no futuro.

Conclusão

Ao apresentar a string Chrome UA, podemos contornar os hacks que esses desenvolvedores estão usando para apresentar a melhor experiência aos usuários.


25
A sua resposta não se relaciona com a pergunta de forma alguma? Você descreve por que um agente de usuário não deve ser usado para detecção, o que não responde à questão - como fazer isso via CSS - de forma alguma.
KittMedia

Eu também ilustrei POR QUE fazer qualquer coisa além da detecção de recursos costuma ser prejudicial. Também esperava que alguém finalmente ilustrasse por que usaria sniffing ou css em vez da detecção de recursos.
Dave Voyles

4
Então, essa resposta é direcionada a todos os navegadores? Estou tentando segmentar apenas um navegador específico porque o css deve ser diferente de outros navegadores ... não tenho certeza de qual pergunta você está respondendo aqui
Crystal

2
"Você poderia explicar em detalhes, um caso de uso?" O Edge tem um bug conhecido em que o uso de uma transformação 3D faz um elemento parar de renderizar quando sai da página. Tentar usá-lo para fazer um efeito de paralaxe faz com que o site pareça absolutamente quebrado. A detecção de UA é útil neste caso, porque posso nivelar a paralaxe no Edge e meu site não parecerá lixo.
Amoliski de

1
Quero detectar o Edge porque estou verificando sua falta de suporte :focus-withine julgando por esse problema , a detecção de recursos para seletores requer JavaScript, e prefiro usar uma solução de css puro.
Qwertie
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.