2013-01-02 6 views

Antwort

14

In Modernizr finden Sie Der Test wird als css-calc derzeit im Nicht-Kern erkannt. Sie verwenden den folgenden Code:

+0

Was macht Modernizr._prefixes.join()? Eine Lösung ohne Modernizr müsste diese Funktion ersetzen. –

+1

@ JoseGómez Diese Zeilen Tests hängt alle Präfixe ('-webkit', etc) zu testen, wenn es irgendeine Unterstützung und nur die Standard-konforme gibt. Daher können Sie, abhängig vom Rest Ihres Codes, diese Zeile einfach löschen. – Sirko

2

Die Calc-Erkennung wurde dem Modernisierer gemäß ihrer Nachrichtenseite hinzugefügt. http://modernizr.com/news/

sowie Unterstützung für bestehende Tests Verschärfung, haben wir auch hinzugefügt eine Reihe neuer erfasst, die von der Community viele:

[...] 
css-calc 
7

Ein bisschen spät auf die Party, aber ich dachte mir, ich sollte dies teilen, weil ich selbst kämpfte mit ihm. Kam mit der Idee von jQuery, ich kann ein Div erstellen, das den Wert calc() in einer CSS-Eigenschaft (wie in diesem Fall Breite) und auch eine Fallbackbreite verwendet, falls der Browser calc() nicht unterstützt. Jetzt, um zu überprüfen, ob es es unterstützt oder nicht, das ist, was ich getan habe:

Lassen Sie uns den CSS-Stil für das derzeit "nicht vorhandene" div-Element erstellen.

/* CSS3 calc() fallback */ 
#css3-calc { 
    width: 10px; 
    width: calc(10px + 10px); 
    display: none; 
} 

Nun, wenn der Browser Calc nicht unterstützt(), würde das Element eine Breite Wert von 10 zurück, wenn es ihr nicht unterstützt, es mit 20 zurückkehren würde Spielt keine Rolle, was die Werte sind genau , aber solange die zwei Breiteneigenschaften am Ende unterschiedliche Werte haben (in diesem Fall 10 und 20).

Jetzt für das eigentliche Skript. Es ist ziemlich einfach, und ich nehme an, es mit regelmäßigen JavaScript möglich ist auch, aber hier ist der jQuery-Skript:

// CSS3 calc() fallback (for unsupported browsers) 
$('body').append('<div id="css3-calc"></div>'); 
if($('#css3-calc').width() == 10) { 
    // Put fallback code here! 
} 
$('#css3-calc').remove(); // Remove the test element 

Alternativ nativer JavaScript zu überprüfen, und die Breite:

#css3-calc { width: 1px; width: calc(1px + 1px); }

if(document.getElementById('css3-calc').clientWidth==1){ 
    // clientHeight if you need height 
    /* ... */ 
} 
+0

Ich habe diesen Trick benutzt, aber ich habe die Breite benutzt. Auf diese Weise bin ich sicher, dass es meine Seite (0px Höhe) nicht durcheinander bringt. – Martijn

+0

Eine Bearbeitung gemacht, die native JS-Variante hinzugefügt, in der ich Breite verwendet habe. Auch die 'parseInt()' entfernt, weil '.width()' eine Zahl zurückgibt – Martijn

+3

Dies ist eine hilfreiche Antwort, aber ich denke, die native Javascript Sache sollte zuerst kommen, weil Leute (wie ich) einfach nicht weiter lesen '$' Zeichen von jquery ... auch, +1. nette Art zu überprüfen. –

0
var cssCheck = document.createElement("DIV"); 
cssCheck.style.marginLeft = "calc(1px)"; 
if (cssCheck.style.getPropertyValue("margin-left")) 
{ 
    alert("calc is supported"); 
} 
cssCheck = null; 
Verwandte Themen