- 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