IE10 mit HTML/CSS erkennen

  • Hi.

    Wie kann ich den IE10 mit HTML/CSS erkennen, um eine Hinweisbox einzublenden, die den User darauf hinweist, dass der Browser nicht unterstützt wird?

    IE10 hat ja leider keine Conditional Comments mehr.

    LG

    • Offizieller Beitrag

    Hallo,

    Du kannst über eine MediaQuery gesonderte Anweisungen für den IE10 hinterlegen:

    Code
    @media screen and ( -ms-high-contrast:none ), ( -ms-high-contrast:active ) {
    
    
        // hier deine CSS Regeln für den IE10
    
    
    }


    -ms-high-contrast() ist eine eigene M$ Implementierung ab IE10, so dass dieser darüber "erkannt" wird und alle anderen Browser die MediaQuery ignorieren sollten.
    Das mag keine saubere Lösung sein, aber eine bessere fällt mir adhoc nicht ein.

    Gruß Arne

  • Hi.
    Danke, das funktioniert zwar, aber leider auch beim IE11.
    Eigentlich suche ich etwas, was nur bis einschließlich IE10 greift, als Ersatz für die nicht mehr vorhandenen Conditional Comments.

    Ansonsten muss ich es wohl Serverseitig lösen, um bei allen IE Versionen außer der aktuellsten dem User eine entsprechende Meldung auszugeben, dass der Browser nicht unterstützt wird.

    • Offizieller Beitrag

    Naja, dann musst Du das erweitern. Es gibt mit dem IE11 neue Pseudoklassen/-elemente die Du zur Differenzierung verwenden kannst, bspw. -ms-backdrop:


    Da -ms-backdrop erst ab IE11 erkannt wird, ignoriert der IE10 diese Zeile komplett.
    Ab Edge entfällt das experimentelle Präfix -ms, so dass dieser einen roten Hintergrund haben sollte.

    Ungetestet, aber die Richtung sollte stimmen...

    Wenn Du noch mehr Einschränkungen suchst, wirst Du hier fündig: https://msdn.microsoft.com/de-de/library/…3(v=vs.85).aspx
    Sollte ständiger Begleiter sein, wenn man Hacks für den IE benötigt.

    Gruß Arne

  • Hi.

    Danke für Dein Beispiel. Ich habe es mal ein wenig erweitert.
    Alte IE Versionen bis 9 werden über Conditional Comments erkannt.
    IE10 wird wie bei dir im Beispiel erkannt, wobei ich noch einen Hack (das \9) eingebaut habe, damit IE11 die Meldung nicht anzeigt.

    Bei IE11 wird nur ein Hinweis angezeigt, der den User zum Wechseln animieren soll.
    IE11 Support ist "Gerade noch so" mit im Boot. (Flexbox ist da Buggy, da müssen schon Workarounds eingesetzt werden)

    Und warum das ganze?
    Ziel des Ganzen ist, bei IE älter als 11 dann ein stark vereinfachtes CSS auszuliefern, welches mehr oder weniger nur einen "Textmodus" ohne Schnickschnack und ohne die interaktiven Seitenelemente darstellt.
    Und da gerade in Firmen noch manchmal alte IE Versionen im Einsatz sind, aber dann oft auch JS gesperrt ist, soll die IE Erkennung auch ohne JS auskommen.
    Bestes Beispiel: Meine Firma. Die nutzen heute stellenweise noch Windows XP zusammen mit IE 8. Und natürlich ist JS per Gruppenrichtlinie ausgeschaltet.

    Einmal editiert, zuletzt von Yosh (29. Dezember 2016 um 19:37)

  • Hi.

    Ich hab nun eine noch viel einfachere Lösung gefunden.

    Im HTML Dokument, wo Flexbox verwendet wird, wird eine zusätzliche Box oben eingefügt.

    HTML
    <div id="wrapper" class="flexbox-vertical">
            <div id="warn">            Sie verwenden einen Browser, der Flexbox nicht unterstützt!        </div>
            ... weitere Flexbox Divs
        </div>

    Im CSS wird folgendes eingefügt:


    Durch dieses Vorgehen werden nicht nur alte IEs die Meldung zeigen, sondern auch alle anderen Browser, die kein Flexbox können, weil sie das DIV ganz normal als Blockelement anzeigen.
    Browser, die @supports unterstützen, zeigen nichts an, weil display:none gesetzt wird.

    Der IE11 unterstützt zwar kein @supports, würde somit die Meldung eigentlich anzeigen, aber weil er flex: 0 1 0px; auswertet, wird die Box eben auf 0px verkleinert.
    Genau hier wäre dadurch dann aber noch die Möglichkeit gegeben, eine weitere Box einzubauen, die speziell für IE11 User gedacht ist und für einen Umstieg auf einen neueren Browser wirbt.
    Statt flex: 0 1 0px muss man dann z.B. flex: 0 0 20px verwenden. (Der IE11 wird zwar noch von mir unterstützt aber nicht empfohlen)


    Weiterhin ist es auch möglich, verschiedene "optionale" Divs mit einer Höhe von 0px auszustatten und overflow:hidden zu setzen, und dann erst über Flexbox eine Höhe zu geben wie gewünscht zu positionieren. Dann sieht man die bei alten Browsern erst gar nicht.
    Nur die notwendigsten Blöcke, wie z.B. den eigentlichen Inhalt, lässt man mit Defaultwerten anzeigen. Je weniger "Optionales" gezeigt wird, desto weniger Probleme gibts bei den alten Browsern.


    LG und einen guten Rutsch ins neue Jahr.

    Einmal editiert, zuletzt von Yosh (31. Dezember 2016 um 10:38)

    • Offizieller Beitrag

    Soweit ich das kenne, wird @supports auf M$ bezogen erst ab Edge unterstützt, so dass die Meldung eigentlich bei allen Edge-Vorgängern angezeigt sein sollte.
    Um jetzt den IE11 auszuschliessen, baust Du ein Hack, das den flex minimiert, so dass er nicht mehr zu sehen ist?

    Also @supports macht sicher an anderen Stellen Sinn, aber für Deine Problemstellung aus #1 hätte ich das jetzt nicht eingesetzt.

  • Hi.
    Genau so hab ich das gemacht.

    Ich hab aber nun nochmals etwas umgeschwenkt und doch JavaScript mit dazu genommen.
    Dort gibts mehrere zuverlässige Methoden, um IE10 oder älter herauszufiltern und auch noch weitere Feature Detections zu machen.

    Ohne aktiviertes JavaScript bekommt man dann nur das Basis-Stylesheet (Inklusive einer Anzeige, dass JS benötigt wird).
    Das Basis-Stylesheet ist sozusagen ohne jeglichen Schnickschnack, so dass es selbst auf richtig alten Browsern lesbar bleibt. (Defacto ein einfaches 1-Spalten Layout, in dem auch noch jeglicher optionale Content mit display: none ausgeblendet ist)
    Das eigentliche Stylesheet wird dann erst mit DOM Zugriff durch JS eingefügt.