Come identificare il browser Microsoft Edge tramite CSS?


90

Sto sviluppando un'applicazione web e ho bisogno di identificare il browser di Microsoft Edge separatamente dagli altri, per applicare uno stile unico. C'è un modo per identificare Edge usando CSS? Proprio come,

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

3
Perché vuoi farlo?

2
quasi certamente non è necessario farlo. Perché stai cercando di farlo?
Patrick

37
Questo è sicuramente qualcosa di cui potresti aver bisogno. Al momento in cui scrivo, Edge è ancora pieno di stranezze che rovineranno gravemente CSS validi che funzionano con tutti gli altri browser, incluso IE.
Lawyerson

Nota: i commenti condizionali usati nell'esempio funzionano solo per IE9 e sotto, quindi [se IE 11] non funzionerà effettivamente.
Sean McMillan

Risposte:


191

/ * Microsoft Edge Browser 12-18 (tutte le versioni precedenti a Chromium) * /

Questo dovrebbe funzionare:

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

Per ulteriori informazioni, vedere: Browser Strangeness


8
Microsoft si sta muovendo per rimuovere il maggior numero possibile di proprietà con prefisso -ms in MS Edge per essere interoperabili con altri browser. In quanto tale, questo è lungi dall'essere garantito per funzionare in futuro. Come accennato in altre risposte, il rilevamento delle funzionalità è molto più preferibile.
Charles Morris - MSFT

1
L'ho appena provato di nuovo e sicuramente funziona. Demo: jsfiddle.net/pd142446
KittMedia

@ CharlesMorris-MSFT Sono d'accordo con te, ma ci sono casi in cui abbiamo solo bisogno di farlo. Ad esempio, pointer-events: none; funziona bene su IE 11 e tutti gli altri browser, ma smette di funzionare su Edge. Spero che quando elimineranno il prefisso -ms risolveranno anche i problemi che ci hanno costretto a utilizzare CSS diversi in primo luogo. In questi casi il rilevamento delle funzionalità non sarà di grande aiuto, perché tutte le funzionalità sono presenti, tuttavia Edge ha rotto alcune cose che IE 11 alla fine ha risolto. KittMedia bella risposta, grazie.
Emil Borconi

8
Questo hack non funziona più, tuttavia questo fa @supports (-ms-ime-align: auto) {.selector {property: value; }}
Roffers

1
@KittMedia è stato rimosso in Edge 14
LJ Wadowski

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

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

Funziona benissimo!

// 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,- solo MS Edge "comprende" quella regola, altri browser la ignorano. La regola è seguita da un nome di classe o id di un elemento html e quindi viene applicata ad esso. In altre parole, se un codice CSS deve essere applicato a un elemento html solo nel browser Edge, inserisci quella regola speciale subito prima della classe / id del tuo elemento.
CodeGust

quindi il browser non si limiterà a ignorarli e ad indirizzare il selettore, poiché sono tutti separati da una virgola? tipicamente i ,selettori separati in css. ecco perché questo crea confusione. Ancora non capisco perché altri browser lo ignorerebbero e solo ms-edge applicherebbe il css al selettore dopo la virgola
r3wt

1
@ r3wt se un selettore non è valido, l'intero gruppo di regole viene ignorato. Illustrato qui css-tricks.com/…
CodeGust

@ r3wt grazie! :) mi hai incoraggiato a scrivere i dettagli che avrebbero dovuto far parte della risposta inizialmente
CodeGust

@AlexandrKazakov forse, perché l'ultimo Edge è basato sul motore Chromium (?) Quale versione hai?
CodeGust

14

Più preciso per Edge (non includere l'ultimo IE 15) è:

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

@supports (-ms-ime-align:auto) { ... } funziona per tutte le versioni Edge (attualmente fino a 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

Rilevamento delle funzionalità, rilevamento delle funzionalità, rilevamento delle funzionalità. Devo ancora trovare un buon caso d'uso sul motivo per cui qualcuno avrebbe bisogno di annusare o rilevare UA con CSS. Potresti spiegare in dettaglio un caso d'uso?

CSS

Ho trovato questo post di Jeff Clayton , che illustra come trovare Edge tramite CSS, ma rileverà anche Chrome e Safari.

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

Ma se DEVI UA annusare:

Stringa Microsoft Edge UA:

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

Spiego in dettaglio perché in questo post del blog.

Neowin ha recentemente riferito che il nuovo browser di Microsoft per Windows 10, Spartan, utilizza la stringa Chrome UA, "Mozilla / 5.0 (Windows NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, come Gecko) Chrome / 39.0.2171.71 Safari / 537.36 Edge / 12.0 ″. Questo è fatto apposta.

Noterai anche che l'intera stringa termina con "Edge / 12.0", cosa che Chrome non fa.

Tengo a precisare che questa non è una deviazione da ciò che Microsoft ha fatto con IE 11, che su Windows 8 recita: Mozilla / 5.0 (Windows NT 6.3; Trident / 7.0; rv: 11.0) come Gecko, come spiegato in questo inviare.

Che cos'è lo sniffing dell'agente utente?

Spesso, gli sviluppatori web useranno UA sniffing per il rilevamento del browser. Mozilla lo spiega bene sul loro blog:

Fornire diverse pagine Web o servizi a diversi browser di solito è una cattiva idea. Il Web è pensato per essere accessibile a tutti, indipendentemente dal browser o dispositivo che stanno utilizzando. Ci sono modi per sviluppare il tuo sito web per migliorarlo progressivamente in base alla disponibilità di funzionalità piuttosto che mirando a browser specifici.

Ecco un ottimo articolo che spiega la storia dello User Agent.

Spesso, gli sviluppatori pigri si limitano a fiutare la stringa UA e disabilitano i contenuti sul proprio sito Web in base al browser che ritengono stia utilizzando il visualizzatore. Internet Explorer 8 è un punto comune di frustrazione per gli sviluppatori, quindi controlleranno frequentemente se un utente sta utilizzando QUALSIASI versione di IE e disabiliteranno le funzionalità.

Il team di Edge lo descrive ancora più in dettaglio sul loro blog.

Tutte le stringhe dei programmi utente contengono più informazioni su altri browser rispetto al browser effettivo che stai utilizzando, non solo token, ma anche numeri di versione "significativi".

Stringa UA di Internet Explorer 11:

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

Stringa Microsoft Edge UA:

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

La proprietà userAgent è stata giustamente descritta come "un mucchio di bugie in continua crescita" da Patrick H. Lauke nelle discussioni del W3C. ("O meglio, un atto equilibrante di aggiungere un numero sufficiente di parole chiave legacy che non faranno immediatamente cadere il vecchio codice UA-sniffing, pur cercando di trasmettere un po 'di informazioni effettivamente utili e accurate.")

Consigliamo agli sviluppatori web di evitare il più possibile lo sniffing di UA; le funzionalità della moderna piattaforma web sono quasi tutte rilevabili in modo semplice. Nell'ultimo anno, abbiamo visto alcuni siti di UA-sniffing che sono stati aggiornati per rilevare Microsoft Edge ... solo per fornirgli un percorso di codice IE11 legacy. Questo non è l'approccio migliore, poiché Microsoft Edge corrisponde ai comportamenti di "WebKit", non ai comportamenti di IE11 (qualsiasi differenza tra Edge-WebKit è bug che ci interessa correggere).

In base alla nostra esperienza, Microsoft Edge funziona meglio sui percorsi di codice "WebKit" in questi siti. Inoltre, con Internet che diventa disponibile su una più ampia varietà di dispositivi, presumi che i browser sconosciuti siano buoni - per favore non limitare il tuo sito a funzionare solo su un piccolo insieme di browser conosciuti. Se lo fai, il tuo sito quasi sicuramente non funzionerà in futuro.

Conclusione

Presentando la stringa Chrome UA, possiamo aggirare gli hack che questi sviluppatori stanno utilizzando, per presentare la migliore esperienza agli utenti.


26
La tua risposta non è in alcun modo correlata alla domanda? Descrivi perché un programma utente non dovrebbe essere usato per il rilevamento, il che non risponde alla domanda - come farlo tramite CSS - in alcun modo.
KittMedia

Ho anche illustrato PERCHÉ fare qualcosa di diverso dal rilevamento delle funzionalità è spesso dannoso. Speravo anche che qualcuno finalmente illustrasse perché avrebbero usato lo sniffing o il CSS invece del rilevamento delle funzionalità.
Dave Voyles

4
Quindi questa risposta si rivolge a tutti i browser? Sto cercando di scegliere come target solo un browser specifico perché il CSS deve essere diverso dagli altri browser ... non sono sicuro di quale domanda stai rispondendo qui
Crystal

2
"Potresti spiegare un po 'in dettaglio un caso d'uso?" Edge ha un bug noto in cui l'utilizzo di una trasformazione 3D interrompe il rendering di un elemento quando esce dalla pagina. Cercare di usarlo per creare un effetto di parallasse fa sembrare il sito assolutamente rotto. Il rilevamento UA è utile in questo caso, perché posso appiattire il parallasse su Edge e il mio sito non sembrerà spazzatura.
Amoliski

1
Voglio rilevare Edge perché sto verificando la sua mancanza di supporto :focus-withine giudicando da questo problema , il rilevamento delle funzionalità per i selettori richiede JavaScript e preferirei utilizzare una soluzione css pura.
Qwertie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.