2013-01-02 6 views

Odpowiedz

14

W Modernizr można znaleźć test jako css-calc obecnie w wykrywaczach nie rdzeniowych. Oni użyć następującego kodu:

Modernizr.addTest('csscalc', function() { 
    var prop = 'width:'; 
    var value = 'calc(10px);'; 
    var el = document.createElement('div'); 

    el.style.cssText = prop + Modernizr._prefixes.join(value + prop); 

    return !!el.style.length; 
}); 
+0

Co robi usługa Modernizr._prefixes.join()? Rozwiązanie bez Modernizatora musiałoby zastąpić tę funkcję. –

+1

@ JoseGómez Te testy linii dołączają wszystkie prefiksy ('-webkit', itp.) Do testowania, jeśli jest jakieś wsparcie i tylko standardowe, zgodne. Dlatego, w zależności od reszty kodu, możesz po prostu upuścić tę linię. – Sirko

2

Wykrywanie wyskalowań zostało dodane do modernizatora zgodnie z ich aktualnościami. http://modernizr.com/news/

Jak również zaostrzenie wsparcie dla istniejących badań, Dodaliśmy również szereg nowych wykrywa wiele przedłożony przez społeczność:

[...] 
css-calc 
7

trochę późno do partii, ale pomyślałem, muszę podzielić się tym, bo byłem sam zmaga się z nim. Dzięki pomysłowi użycia jQuery mogę utworzyć element div, który używa wartości calc() we właściwości CSS (takiej jak szerokość w tym przypadku), a także szerokości zastępczej w przypadku, gdy przeglądarka nie obsługuje funkcji calc(). Teraz, aby sprawdzić, czy to obsługuje, czy nie, właśnie to zrobiłem:

Stwórzmy styl CSS dla "nieistniejącego" elementu div.

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

Teraz, jeśli przeglądarka nie obsługuje calc() element powróci szerokość wartość 10. Jeśli nie obsługuje, to wrócić z 20. Nie ma znaczenia, jakie wartości są dokładnie , ale tak długo, jak właściwości dwóch szerokości mają na końcu różne wartości (w tym przypadku 10 i 20).

Teraz dla właściwego skryptu. Jest to dość proste i sądzę, że to możliwe regularne JavaScript zbyt, ale tutaj jest skrypt jQuery:

// 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 

Alternatywnie, native check JavaScript i szerokość:

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

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

Użyłem tej sztuczki, ale użyłem szerokości. W ten sposób jestem pewien, że to nie zepsuło mojej strony (wysokość 0px). – Martijn

+0

Dokonano edycji, dodano natywny wariant JS, w którym użyłem szerokości. Również usunięto 'parseInt()', ponieważ '.width()' zwraca liczbę – Martijn

+3

Jest to pomocna odpowiedź, ale myślę, że natywna sprawa javascript powinna być pierwsza, ponieważ ludzie (jak ja) po prostu nie czytają dalej po zobaczeniu '$' znak jquery ... także, +1. fajny sposób na sprawdzenie. –

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