- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Sun, 16 Nov 2008 14:34:37 -0500
- To: Brad Kemper <brkemper.comcast@gmail.com>
- CC: "www-style@w3.org List" <www-style@w3.org>
Brad Kemper wrote:
> <body onfocus="document.body.className='focus';" 
> onblur="document.body.className='';" class="focus">
Note that browsers use the DOM0 on* attributes on the body to set event 
handlers on the window, not on the body.  You can easily test this by 
outputting the value of |this| in the above focus/blur handlers, or 
simply by setting up the event handlers on the body using 
addEventListener and noting that they never fire.
You're correct that these handlers do correspond to focus/blur calls... 
on the window object.
I'm curious that this was confusing; did you really think that the load 
and error events also fire on the body and not on the window?
> With this, the background-color of the body will turn green when it 
> comes into focus
No, it'll turn green when the window comes into focus.
> and turn red when another window or frame gains focus. 
Yep.
> And when it has focus, it will not lose it do to something else in the 
> same window (including a link, but not including an iframe) gains focus.
Sure.  The window has focus, and particular elements within that window 
can also have focus.
> It should be the same for the ":focus" pseudo-class. But it isn't. 
> BODY:focus doesn't work at all (at least not in Safari or Firefox).
Right, because the body doesn't have focus.  The window does.
> *Elements that are matched by :focus should be the same elements that 
> have received the "focus" event in an applicable event-driven scripting 
> language such as JavaScript. Elements that receive the "blur" event 
> should no longer be matched by the :focus pseudo-class.*
While this could be done (and is in fact what Firefox implements, as I 
recall), it wouldn't solve your problem.
> There's probably a better way to say that, but you get the idea. There 
> does not seem to be a corresponding problem with :active, as clicking 
> and holding the mouse down on the body will change its background-color 
> when you have the following:
> 
> body:active { background-color:yellow; }
That's because :active is triggered off of mousedown (at least in 
Firefox) and the body does receive a mousedown event in this case.
-Boris
Received on Sunday, 16 November 2008 19:35:22 UTC