CSS経由でMicrosoft Edgeブラウザーを識別する方法は?


90

私はWebアプリケーションを開発しています。独自のスタイルを適用するには、Microsoft Edgeのブラウザーを他のブラウザーと区別する必要があります。CSSを使用してEdgeを識別する方法はありますか?と同じように、

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

3
なぜそうしたいのですか?

2
ほとんど間違いなくそうする必要はありません。なぜそれをやろうとしているのですか?
Patrick

37
これは間違いなくあなたが必要とするかもしれないものです。執筆時点では、Edgeにはまだ、IEを含む他のすべてのブラウザーで機能する有効なCSSをひどく混乱させるような癖がたくさんあります。
弁護士

注:例で使用されている条件付きコメントはIE9以下でのみ機能するため、[IE 11の場合]は実際には機能しません。
Sean McMillan

回答:


191

/ * Microsoft Edge Browser 12-18(Chromiumより前のすべてのバージョン)* /

これはうまくいくはずです:

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

詳しくはこちらをご覧ください:ブラウザの奇妙さ


8
Microsoftは、他のブラウザと相互運用できるように、MS Edgeでできるだけ多くの-msプレフィックス付きプロパティを削除するように動いています。そのため、これは将来の動作を保証するものではありません。他の回答で述べたように、特徴の検出ははるかに好ましいです。
Charles Morris-MSFT 2015

1
もう一度テストしただけで、確実に機能します。デモ:jsfiddle.net/pd142446
KittMedia

@ CharlesMorris-MSFT同意しますが、必要な場合もあります。たとえば、pointer-events:none; IE 11と他のすべてのブラウザで正常に動作しますが、Edgeでは動作しなくなります。-ms接頭辞がなくなるまでに、そもそも別のCSSを使用せざるを得なかった問題を修正してくれることを願っています。この場合、すべての機能が存在するため、機能の検出は実際には役立ちませんが、IE 11で最終的に修正されたいくつかの問題がEdgeによって解決されていません。KittMediaいい答え、ありがとう。
Emil Borconi 2016年

8
このハックは機能しなくなりましたが、これは@supports(-ms-ime-align:auto){.selector {property:value; }}
Roffers

1
@KittMediaはEdge 14で削除されました
LJ Wadowski、2016年

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

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

それはうまくいきます!

// 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,-MS Edgeのみがそのルールを「理解」し、他のブラウザは無視します。ルールの後には、html要素のクラスまたはID名が続くため、それに適用されます。つまり、CSSコードをEdgeブラウザーのhtml要素にのみ適用する必要がある場合は、要素のclass / idの直前にその特別なルールを配置します。
CodeGust

それらはすべてカンマで区切られているので、ブラウザはそれらを無視してセレクタをターゲットにしませんか?通常は,、CSS の個別のセレクター。これが紛らわしい理由です。他のブラウザーがこれを無視する理由はまだわかりません。ms-edgeのみがカンマの後にセレクターにCSSを適用します
r3wt

1
@ r3wt 1つのセレクタが無効な場合、ルールグループ全体が無視されます。ここに示されcss-tricks.com/...
CodeGust

@ r3wtありがとうございます!:)あなたは私が最初に答えの一部であるはずだった詳細を書くように私に励ましました
CodeGust

@AlexandrKazakovたぶん、それは最新のEdgeがChromiumエンジン(?)に基づいているためです。
CodeGust

14

Edgeの方が正確です(最新のIE 15は含まれません)。

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

@supports (-ms-ime-align:auto) { ... } すべてのEdgeバージョン(現在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

特徴検出、特徴検出、特徴検出。なぜ誰かがCSSでUAをスニッフィングまたは検出する必要があるのか​​についての良いユースケースをまだ見つけていません。ユースケースについて少し詳しく説明していただけますか?

CSS

CSSを介してEdgeを見つける方法を説明するJeff Claytonのこの投稿を見つけましたが、ChromeとSafariも検出されます。

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

しかし、UAを嗅ぐ必要がある場合:

Microsoft Edge UA文字列:

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

このブログ投稿で理由を詳しく説明します。

Neowinは最近、Windows 10、Spartan用のMicrosoftの新しいブラウザーが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 ″。 それは意図的に行われます。

また、文字列全体が「Edge / 12.0」で終わっていることにも気づくでしょう。Chromeではそうではありません。

これは、MicrosoftがIE 11で行ったことからのWindows 7でのレディカルな出発点ではないことを指摘しておきます。Mozilla/ 5.0(Windows NT 6.3; Trident / 7.0; rv:11.0)(Geckoのような)。役職。

ユーザーエージェントスニッフィングとは何ですか?

多くの場合、Web開発者はブラウザ検出のためにUAスニッフィングを行います。Mozillaはブログでそれをうまく説明しています:

異なるブラウザに異なるWebページまたはサービスを提供することは、通常、悪い考えです。Webは、使用しているブラウザーやデバイスに関係なく、誰でもアクセスできるようになっています。特定のブラウザーをターゲットにするのではなく、機能の可用性に基づいて段階的に機能を強化するWebサイトを開発する方法があります。

これは、ユーザーエージェントの履歴を説明するすばらしい記事です。

多くの場合、怠惰な開発者は、UA文字列をスニッフィングし、ビューアが使用していると信じているブラウザに基づいて、Webサイトのコンテンツを無効にします。Internet Explorer 8は開発者にとって共通のフラストレーションポイントであるため、開発者はユーザーがいずれかのバージョンのIEを使用しているかどうかを頻繁に確認し、機能を無効にします。

Edgeチームは、ブログでこれについてさらに詳しく説明しています。

すべてのユーザーエージェント文字列には、トークンだけでなく、「意味のある」バージョン番号など、実際に使用しているブラウザーよりも多くの情報が含まれています。

Internet Explorer 11のUA文字列:

GeckoのようなMozilla / 5.0(Windows NT 6.3; Trident / 7.0; rv:11.0)

Microsoft Edge UA文字列:

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

userAgentプロパティは、W3CディスカッションでPatrick H. Laukeによって「成長し続ける嘘のパック」として適切に説明されています。(「むしろ、実際に有用で正確な情報を少し伝えながら、古いUAスニッフィングコードがすぐに転用されない十分なレガシーキーワードを追加するバランシング行為。」)

Web開発者はUAスニッフィングをできるだけ回避することをお勧めします。最新のWebプラットフォーム機能は、ほとんどすべて簡単に検出できます。過去1年間に、Microsoft Edgeを検出するように更新されたUAスニッフィングサイトがいくつかありました。これは、レガシーIE11コードパスを提供するためだけです。Microsoft EdgeはIE11の動作ではなく「WebKit」の動作と一致するため、これは最良のアプローチではありません(Edge-WebKitの違いは、修正が必要なバグです)。

私たちの経験では、Microsoft Edgeはこれらのサイトの「WebKit」コードパスで最適に動作します。また、インターネットがさまざまなデバイスで利用できるようになったので、未知のブラウザが適切であると想定してください。サイトを現在知られている少数のブラウザのみで動作するように制限しないでください。これを行うと、サイトはほぼ確実に機能しなくなります。

結論

Chrome UA文字列を提示することで、これらの開発者が使用しているハックを回避して、ユーザーに最高のエクスペリエンスを提供できます。


25
あなたの答えは、質問とはまったく関係ありませんか?ユーザーエージェントを検出に使用しない理由を説明しますが、CSSを介してどのように行うかという質問には答えられません。
KittMedia 2015

また、機能検出以外のことを行うと多くの場合有害になる理由を説明しました。また、機能検出の代わりにスニッフィングやCSSを使用する理由を誰かが最終的に説明してくれることを期待していました。
Dave Voyles、2015

4
それでは、この回答はすべてのブラウザを対象としていますか?CSSは他のブラウザーと異なる必要があるため、特定のブラウザーのみを対象にしています...ここでどのような質問に答えているのかわかりません
Crystal

2
「ユースケースについて少し詳しく説明していただけますか?」Edgeには既知のバグがあり、3D変換を使用すると、要素がページから外れると要素のレンダリングが停止します。これを使用して視差効果を作成しようとすると、サイトが完全に壊れているように見えます。UA検出はこの場合に役立ちます。Edgeの視差を平らにすることができ、サイトがゴミのように見えないためです。
Amoliski

1
Edgeを検出したいのは:focus-withinこの問題に対するサポートの欠如を確認して判断しているためです。セレクターの機能検出にはJavaScriptが必要であり、純粋なcssソリューションを使用したいのです。
Qwertie 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.