- From: Brad Kemper <brkemper.comcast@gmail.com>
- Date: Sun, 16 Nov 2008 12:18:41 -0800
- To: Boris Zbarsky <bzbarsky@MIT.EDU>
- Cc: "www-style@w3.org List" <www-style@w3.org>
On Nov 16, 2008, at 11:34 AM, Boris Zbarsky wrote: > 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? I think there is no WINDOW element in HTML or CSS where I can specify (in HTML or CSS) what should happens in response to the window gaining focus. HTML solves this by allowing the onfocus handler to be attached to the BODY tag, which seems like a sensible, intuitive place to put it. I could see the argument for putting it on the HTML element instead, but they didn't. And the following also does not work: html:focus { background-color:green; } Which is good, really, because it is far more likely that authors will set the background color of the BODY than of HTML (and any changes to the background color of HTML get covered up or replaced by that of BODY). So, is there some other abstraction of a screen region that does represent the window or viewport, in which the :focus pseudo- class can be used in a way that is consistent with how it is done in HTML and JavaScript? >> 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. It seems to me that you are spitting hairs that JavaScript and HTML do not split. It is useful in JavaScript to have the event listening attributes on the BODY tag, since there is no WINDOW element to use with selectors. So why would you think it would be less desirable to have the :focus pseudo-element work in a consistent manner? Is there another way of doing this that will select the focused viewport? >> *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. What would then? A reference to the event handlers as they are expressed as attributes in HTML? >> 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. And there is no mousedown event for the window itself that can be set as an attribute. A situation similar to what we have in CSS, that I would like corrected. I prefer a way of correcting it that is similar to the way it was dealt with in HTML (pretending that the BODY is the WINDOW, for certain things), as that would be familiar and intuitive for authors. I am less concerned with the purity of how an implementor would think of it (no disrespect intended). > > > -Boris >
Received on Sunday, 16 November 2008 20:19:20 UTC