- From: Brad Kemper <brkemper@comcast.net>
- Date: Thu, 29 Nov 2007 09:31:03 -0800
- To: Andrew Fedoniouk <news@terrainformatica.com>
- Cc: Alan Gresley <alan1@azzurum.com>, www-style@w3.org
- Message-Id: <154E350A-0484-4476-9072-02AAC57BD163@comcast.net>
On Nov 28, 2007, at 2:04 PM, Andrew Fedoniouk wrote: >>> This construction will match IE6, IE7, Opera but not FF2 as IE >>> and Opera do have support of inline-block. >>> >>> (IE supports it partially, only for <span> alike elements, but >>> still) >>> >> >> It is exactly that word "partially" that makes such a proposal of >> very limited use. It might be worthwhile for as far as it goes, >> but it doesn't go far enough precisely because of support that is >> incomplete. I've mentioned a couple, such as how some values cause >> changes to the meaning of z-axis, and some things when gaining >> dimension cause all manner of weirdness, including to descendants. >> For many other places where support for a particular browser is >> partial, pay attention to the yellow rectangles on the following >> page that compares IE6, IE7, FireFox 2, and Opera 9: > Regarding display:inline-block > 1) It makes sense almost only for intrinsically inline elements. Maybe in your designs. That is not how "display:" is supposed to work, however. Not according to the spec, and not a restriction the others have. > 2) IE was the very first UA that implemented them right (if you > consider #1) I give them credit for implementing it. My purpose was not just IE- bashing, or even the merits of how that particular value was implemented, but rather to show the type of things that require detecting the rendering engine. There are many other instances where a property is "supported" in a particular browser, but not as fully or as accurately as other UAs. > And about supports() function in general: > > 1) As CSS makes custom keywords perfectly legal then you can do: > @media screen and supports(-moz-radius) { } > to filter out Mozilla only rules. In other words, (like other hacks) it would be a de facto Gecko- detector, if they started supporting a "supports" keyword in media queries and included their custom extensions. Except that whatever custom extension I choose might be replaced (by border-radius without the -moz prefix, for instance) before I needed to stop detecting for Gecko. I don't see how "supports(-moz-radius)" would be better than "@media screen and (renderer: gecko)" for detecting Gecko. It is just obscuring what it is the author is actually trying to do: reliably detect Gecko. > 2) @ua(name, version) is not practically useful as e.g. Mozilla is > publishing new updates pretty frequently. > I do not think that you would want to make your CSS look like > version tracker or so. I was not advocating that particular grammar. For version checking I suggested something more powerful, but still simple. To illustrate, using your Gecko example, and hypothetically supposing that the Gecko in FireFox 2 supported my proposed vocabulary, you would start with something like this: @media screen and (renderer: gecko) { /* FF general rules */ } When a new version of FF came out that changed the support for certain rules enough that you would want to change the rules you sent it, you could add another @media rule to support the new version too: @media screen and (renderer: gecko) { /* FF general rules */ } @media screen and (renderer: gecko) and (min-render-version: 1.9) { /* FF3 rules */ } ... where "min-render-version" would mean that it would only match if the version of the rendering engine was 1.9 or higher. Alternately, if everything that required the first @rule was fixed in 1.9, then you could just change your original rule to this: @media screen and (renderer: gecko) and (max-render-version: 1.8999) { /* FF2 rules */ } You could also make 2 mutually exclusive @media rules for 2 versions, use the version detection on both of them: @media screen and (renderer: gecko) and (max-render-version: 1.8999) { /* FF2 rules */ } @media screen and (renderer: gecko) and (min-render-version: 1.9) { /* FF3 rules */ } Without this, you have to track whether or not the hack you used (including the hack of looking for an identifying "-moz" property in your "supports" property) was still available in the new version. If it was, then you need a new hack, or you have to let the new version use your existing workaround instead of using the new support. I actually had a similar problem in the design I am working on now, which uses display:inline-block to create a row of centered, button- like links (anchors). Each one has a span in the middle that is styled to be display:block and position:relative, and on hover that span is moved down and to the right by one pixel in each direction. It works well, and looks nice, giving the impression of a button being pushed in, without changing the size the containing "A" tag or vertical alignment with the other elements on the same text line. The padding on the "A" tag allows the inner span to shift position without seeming to go outside the block. In FireFox 2 there is no inline-block, so I used their inline-box, and put the display attributes in this order: a.button { display:inline-box; display:inline-block; } Then I used my Gecko-detecting hack to give the span some extra 1px of margin on its upper left, since relative positioning didn't work right on the inner span in Gecko (some other factors involving padding were also involved in why it didn't work right in Gecko, but the long and short of it was that inline-block and inline-box worked differently, and for me on this project inline-block worked better). It looked something like this: a.button:not([href*=""]):hover span { margin:1px 0 0 1px; } It was a clunky workaround, but it allowed the same effect to look the same in the top 4 browsers. Other UAs without support for inline- block would still see the links, but without some of the extra styling that inline-block supports. But now I've downloaded FireFox 3 beta, which supports inline-block, and I see that it is applying the inline-block effects AND the margin, causing the inner span to move too far and actually go outside its container. Not horrible, but not what I was after. So I have a choice: I can change the order of the "display" attributes on my "A" rule so that FireFox 3 continues to work the same as FireFox 2 (in effect, negating the value of their new support for inline- block), or I can try to discover another de facto UA-version- detecting CSS hack that works only with Gecko 1.9 (FireFox 3). Ah, if only it were easier. BTW, the point of this Gecko example is not to pick on that UA in particular (I've already picked on IE), and is not meant as a "how do I do this?" for this one problem, just something to illustrate the point of how version checking could work so much better than what we have to resort to today. > 3) CSS3 is now modular - means that modules can be supported by UA > selectively. This requires some mechanism that allow > to check if module supported or not on CSS level to make all this > schema practically useful. > That would be a nightmare (precisely: combinatorial explosion ) if > you will rely on @ua(name,version) to discover features > supported in your style sheets. > Andrew Fedoniouk. > http://terrainformatica.com Its already a nightmare, and a huge time-suck. I am merely proposing a better, more reliable, standardized vocabulary for what huge numbers of authors are using today (CSS hacks) to deal with changing or limited or varied support for various attributes and values. Each UA would only have to know the name and version of its rendering engine (2 static values per implementation), so it should be very simple to implement for anyone who is already implementing the media query vocabulary. From the authoring side of the fence, it would be much, much, much simpler than what we have to do today. There is a real need that is not being addressed. The people who use the hacks today are the very ones who are trying to support the widest variety of user agents. The ones who would exclude any users agents that weren't "supported" by the those authors already have adequate means of doing so. I continue to see no downside to this proposal (aside from possibly delaying Proposed Recommendation of Media Queries), in spite of all the resistance from implementors. > Andrew Fedoniouk. > http://terrainformatica.com >
Received on Thursday, 29 November 2007 17:31:15 UTC