diff options
Diffstat (limited to 'src/support.js')
-rw-r--r-- | src/support.js | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/src/support.js b/src/support.js index ad1bd9a57..fb730dca7 100644 --- a/src/support.js +++ b/src/support.js @@ -20,7 +20,8 @@ jQuery.support = (function() { events, eventName, i, - isSupported; + isSupported, + offsetSupport; // Preliminary tests div.setAttribute("className", "t"); @@ -249,6 +250,49 @@ jQuery.support = (function() { } } + // Determine fixed-position support early + offsetSupport = (function( body, container ) { + + var outer, inner, table, td, supports, + bodyMarginTop = parseFloat( body.style.marginTop ) || 0, + ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;", + style = "style='" + ptlm + "margin:0;border:5px solid #000;padding:0;'", + html = "<div " + style + "><div></div></div>" + + "<table " + style + " cellpadding='0' cellspacing='0'>" + + "<tr><td></td></tr></table>"; + + container.style.cssText = ptlm + "border:0;visibility:hidden"; + + container.innerHTML = html; + body.insertBefore( container, body.firstChild ); + outer = container.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + supports = { + doesNotAddBorder: (inner.offsetTop !== 5), + doesAddBorderForTableAndCells: (td.offsetTop === 5) + } + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + supports.supportsFixedPosition = (inner.offsetTop === 20 || inner.offsetTop === 15); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + supports.subtractsBorderForOverflowNotVisible = (inner.offsetTop === -5); + supports.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop); + + return supports; + + })( testElement, div ); + + jQuery.extend( support, offsetSupport ); + // Null connected elements to avoid leaks in IE testElement = fragment = select = opt = body = marginDiv = div = input = null; |