- From: Belov, Charles <Charles.Belov@sfmta.com>
- Date: Fri, 21 Jan 2011 10:52:19 -0800
- To: "Simon Fraser" <smfr@me.com>
- Cc: "www-style list" <www-style@w3.org>
Simon Fraser [mailto:smfr@me.com] wrote on Thursday, January 20, 2011 11:14 PM: > On Jan 20, 2011, at 2:41 PM, Belov, Charles wrote: > > > I note from http://www.w3.org/TR/css3-transitions/ that > visibility can be transitioned (despite only having two > states, visible and hidden) but display, which also has only > two states, cannot. > > display has 'none', 'block', 'inline', 'inline-block', > 'table-cell' etc etc, so more than two states. Right, but in a transition there would only be two states, e.g. "none" and "block". You couldn't transition from "none" to "block" to "inline" in a single transition. > > This is a potential issue as I am seeing reports that > Webkit browsers make hidden links clickable. > > Can you expand on this, with an example or by the filing of a > bug at bugs.webkit.org? I had not personally tested this. I only know of these complaints from a search on the terms visibility hidden clickable One post provides a test case http://icant.co.uk/sandbox/hiddenNotGone.html and I see it is no longer an issue in Safari (if it was an issue, as claimed at http://archivist.incutio.com/viewlist/css-discuss/72025 in 2006). But someone is claiming it is still an issue on Android as of May 2010 http://stackoverflow.com/questions/2828118/hidden-links-are-still-clicka ble-on-the-android-browser My (side) concern is that it be somewhere in the CSS3 spec that if something is not visible (visibility:hidden) that it also not be clickable. I'm not sure where to find that in the specs. In any case I apologize for distracting side issue. > > Furthermore, I am concerned there may be an issue with a > hidden layer > > blocking activation of a link on a visible but further-back layer. > > (Unless, of course, CSS3 > > I don't understand this paragraph. Again, it is a side issue. The relevant point is that I want to be able to transition display similar to what is being allowed for visibility, that is between two different values. > > The use case I am concerned with is a time-delay cascading > menu. Currently, this can only be accomplished with > JavaScript. I would like to see CSS Transitions support it, > but this requires that display be animated. > > > > The idea of a time-delay cascading menu is to > > > > 1. avoid accidental activation, as when one moves ones cursor from > > above a horizontal cascading menu to below that menu > without intent to > > interact with it. Under current CSS cascading menus, the menu gets > > activated against the end-user's intent, sometimes even > blocking the > > screen location where the end-user was intending to go to. Also, > > > > 2. avoid accidental deactivation, as when a person > navigating their cursor through the activated menu > inadvertently cursors off the menu momentarily. > > It is not the goal of CSS transitions to deal with complex > user-interactive content that requires special event handling > to avoid usability issues. So for cases like this, you may be > able to use transitions for some of the visual effects, but > it's likely that you may still have to run some JS to tune > the user interaction. But if it is in fact usable to do those things, why not allow it? > > Using the guidelines provided by Jacob Nielsen under > "Speed" on > http://www.useit.com/alertbox/mega-dropdown-menus.html, I > would expect to be able to code something like: > > > > div#cascadingmenu ul li { > > transition-property: display; > > transition-duration: 100ms; > > transition-delay: 500ms; > > display: none; > > } > > > > div#cascadingmenu:hover ul li { > > display: block; > > } > > With CSS transitions, every intermediate state has to be > representable through CSS, and, indeed, getComputedStyle() > will return you the appropriate style if you call it while > the transition is running. > > What you're describing here is magic where the UA concocts > some kind of presentation of an element that is half way > between being not displayed at all, and being display:block. > There's just no way to specify or implement this. Then why is it possible on visibility? For visibility it states: visibility: interpolated via a discrete step. The interpolation happens in real number space between 0 and 1, where 1 is "visible" and all other values are "hidden". so why not: display: interpolated via a discrete step. The interpolation happens in real number space between 0 and 1, where 1 is a single rendered state and all other values are "none". to at least allow transition between "none" and another state? > > > (Except that "display" is currently not one of the transitionable > > properties.) > > > > I'm also concerned with some wording under > http://www.w3.org/TR/css3-transitions/#starting: > > > > Once the transition of a property has started, it must > continue running based on the original timing function, > duration, and delay, even if the > 'transition-timing-function', 'transition-duration', or > 'transition-delay' property changes before the transition is > complete. However, if the 'transition-property' property > changes such that the transition would not have started, the > transition must stop (and the property must immediately > change to its final value). > > > > versus > > > http://www.w3.org/TR/css3-transitions/#the-transition-delay-property- > > > > Otherwise, the value specifies an offset from the moment > the property is changed, and the transition will delay > execution by that offset. > > > > That is, are "execution" and "running" synonymous? The > question is whether, if the end-user's cursor passes over an > element, activating "hover" (setting display to "block") and > then exits (because there was not intent to interact) within > the 500ms before the transition begins, setting display back > to "none", would cause the end value of display to be "none" > or "block". > > Transitions never affect the final value of a property. When > the transition is done, the target properties all have their > final values as described by the normal style rules. > > If a transition is in its delay phase but is interrupted (in > your case by unhover), then the property is never animated. > Good, that's what I would want. However, I believe the wording could make this clearer in the case of use of a positive value for transition-delay. Hope this helps, Charles Belov SFMTA Webmaster
Received on Friday, 21 January 2011 18:58:58 UTC