Esiste un metodo affidabile per rilevare se il browser supporta position fixed
?Rileva se il browser supporta la posizione: fisso
Ho trovato alcune soluzioni ma nessuna sembra funzionare correttamente su tutti i browser.
Esiste un metodo affidabile per rilevare se il browser supporta position fixed
?Rileva se il browser supporta la posizione: fisso
Ho trovato alcune soluzioni ma nessuna sembra funzionare correttamente su tutti i browser.
Durante lo sviluppo di un'applicazione mobile con jQuery Mobile ho avuto lo stesso problema. Le intestazioni dovrebbero hanno fissato la posizione (se supportato dal browser) e la soluzione era quella di impostare le intestazioni con un default position: fixed
sul CSS e controllato la proprietà sostenuti attraverso il seguente metodo:
function isPositionFixedSupported() {
return $('[data-role="header"]').css('position') === 'fixed';
}
Il valore restituito è static
se non supportato dal browser.
Questo codice funziona perfettamente. Appena testato su una scatola di Windows ME con IE6, restituisce 'null' perché IE6 non supporta position:fixed;
.
a proposito, questo NON è originariamente il mio codice. TUTTI i crediti vanno aKangax's Githubche ha molte funzioni lì per testare le caratteristiche del browser.
function() {
var container = document.body;
if (document.createElement &&
container && container.appendChild && container.removeChild) {
var el = document.createElement("div");
if (!el.getBoundingClientRect) {
return null;
}
el.innerHTML = "x";
el.style.cssText = "position:fixed;top:100px;";
container.appendChild(el);
var originalHeight = container.style.height, originalScrollTop = container.scrollTop;
container.style.height = "3000px";
container.scrollTop = 500;
var elementTop = el.getBoundingClientRect().top;
container.style.height = originalHeight;
var isSupported = elementTop === 100;
container.removeChild(el);
container.scrollTop = originalScrollTop;
return isSupported;
}
return null;
}
Se funziona, funziona, se non lo fa, si otterrà un nullo.
Questa soluzione non funziona su iOS 5. –
Questo perché IOS5 è una donna volubile. Si prega di consultare i documenti relativi a [position: fixed e l'ultima distribuzione di jQM] (http://jquerymobile.com/blog/2012/04/13/announcing-jquery-mobile-1-1-0/) – Ohgodwhy
È questo l'unico noto problema? È sicuro utilizzare questo metodo seguito da un'eccezione per iOS 5? –
Il codice di Ohgodwhy è corretto, ma per iOS è possibile controllare l'agente utente e verificare se si tratta di Safari iOS. Quindi restituire che è supportato. Le stringhe user agent sono
Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
Non sono sicuro di come codificare questo, ma sono sicuro che questo è ciò che devi fare per rilevare iOS.
Lo sniffing del dispositivo non è e non sarà mai un modo affidabile per rilevare le funzioni su tutti i browser. – user2867288
Qualcosa di simile funziona sui browser per dispositivi mobili?
function isFixedPositionSupported() {
var e = document.createElement('div')
try {
e.style.position = 'fixed'
return e.style.position == 'fixed'
} catch (exception) {
return false
}
}
Non funziona, restituisce sempre true anche se non supportato. –
Lavora su firefox e Chrome. – fred727
var supportFixed = (function() {
var elem = document.createElement('div');
elem.style.cssText = 'position:fixed';
if (elem.style.position.match('fixed')) return true;
return false;
}());
questa sembra la soluzione migliore per me di gran lunga. ho usato jQuery essere al sicuro. var $ test = $ ("
"); $ ("body"). Append ($ test); $ test.css ("position", "fixed"); var supportFixed = $ test.css ("position") === "fixed"; $ test.remove(); --- ma questo non ha risolto il mio problema.ios4 dice che supporta fisso anche se non lo fa. –Fornisce un falso positivo su iPad a causa del suo pseudo supporto di posizione: risolto – nebulousGirl
Per quale elemento? –
Intendi qualcosa per un * sticky footer * o simile? –