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
/* ... */
}
Co robi usługa Modernizr._prefixes.join()? Rozwiązanie bez Modernizatora musiałoby zastąpić tę funkcję. –
@ 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