- From: Ian Hickson <ian@hixie.ch>
- Date: Tue, 10 Feb 2009 01:18:45 +0000 (UTC)
- To: www-style@w3.org
I had some notes in the HTML5 spec about what IE does for hit testing. It
was brought to my attention that the general consensus is that this should
be solved by applying the 'pointer-events' property to all content.
Since some interest has been expressed regarding the notes I had, I have
included them below.
I have also removed this issue from HTML5, under the assumption that the
CSS specifications will at some future point deal with the issue.
HIT TESTING TRANSPARENCY
Definition: IE considers a point of an element "transparent" if any
one of the following are true:
1. All of the following are true:
a: The computed value of 'background-image' is 'none', and
b: The computed value of 'background-color' is 'transparent', and
c: The point is over a pixel of an AlphaImageLoader filter image
that has an alpha value of 0 (fully transparent), or the
element does not have an AlphaImageLoader filter applied;
2. The point is outside the element's CSS clip rectangle;
3. The computed value of 'visibility' is 'hidden';
4. The element is a transparent IFRAME (in IE, an IFRAME with the
custom attribute "allowtransparency");
5. The element is an OBJECT with the custom attribute "wmode" set to
"transparent" and the point in question is fully transparent.
Given those definitions, when a mouse event occurs, IE finds the
target element as follows:
A. Take the topmost node that is under the point where the pointer
was for the event. For CSS boxes, borders, padding areas and
content areas are considered part of the node, margins and
leading generated by the 'line-height' property are not.
B. If there is no node at that point, no event is fired. STOP.
C. If the node is a text node, then the event is fired at the text
node's nearest ancestor element node. STOP.
D. If the node is not an element, assign the node's nearest
ancestor element node to a variable X. Otherwise, assign the
element node itself to X.
E. If the element X is the BODY element or the HTML element and its
document is not the document of a transparent IFRAME, goto step
H. Similarly, if the element X is a TABLE element, or is an IMG
element, goto step H.
F. If the point where the pointer was is, per the above definition,
a point that on the element X is transparent, then ignore that
element and assign the element that is below that element in the
stacking order to X. If there is no element below X, or if the
point on X is not transparent and so the previous condition
doesn't apply, then leave X as is and go straight to step H.
G. Goto step E.
H. If the element X is now a BODY or TABLE element, but the element
assigned to X in step D was some other element, assign the
element originally assigned in step D back to X.
I. The event goes to X. STOP
Cheers,
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
Received on Tuesday, 10 February 2009 01:19:22 UTC