- From: Brad Kemper <brad.kemper@gmail.com>
- Date: Fri, 14 Aug 2009 10:38:16 -0700
- To: Tab Atkins Jr. <jackalmage@gmail.com>
- Cc: www-style list <www-style@w3.org>
- Message-Id: <2502A3BF-673F-4D64-A80E-CC888D61BF76@gmail.com>
On Aug 13, 2009, at 4:35 PM, Tab Atkins Jr. wrote: > Just linear gradients for now: > > http://www.xanthir.com/document/document.php?id=d65df9d10442ef96c2dfe5e1d7bbebf7aa42f2bcf24e68fc3777c4b484fa8a4ce55fed2189cac20ccad8686127f4c08917c4ca8b7614e9f89c2a950ec083a9c6 > > ~TJ > I won't get into my objections to [inner | outer] right now, but about the rest of this: The <gradient-line> stands for: [ <angle> [inner | outer]? | [ left | right | top | bottom ] [ left | right | top | bottom ] | <bg-position>, <bg-position> ] One of the things I really hate about using "<bg-position>, <bg- position>" is that comma to separate the two lengths or keywords on the left from those on the right. Since commas are already being used to separate color-stops, this just makes the whole thing harder to read, because they are no longer used consistently to group like things. When they are used only for color-stops, then you can see in a glance how many color-stops there are instead of having to study it more closely with a line full of distances and commas. For instance, I find the following very hard to read, and it probably doesn't even make sense (which is another problem with this kind of construction). linear-gradient(10px 30%, 100% 4%, 50% green, 20% blue) The problem is too many commas being used in different ways, and too many percentages used in different ways The confusion is compounded when the color stop begins with a percentage, because then you can end up with two percentages, used in different way, separated by a comma ("4%, 50%", above), while in another place two percentages that are used the same way (mostly) are also separated by a comma ("30%, 100%", above). Some percentages are of the length of the gradient, and other percentages are of the width or height of the element for bg- position. I believe this is probably why mozilla and webkit resorted to functional notation for their three types of color stops, but I don't like that much either. The positional keywords can also create ambiguity. Such as like this: linear-gradient(top right, 50% green, 20% blue) Also, even with "top bottom" instead of "top right", this doesn't seem that clear, because it looks kind of like like 3 stops to me (or maybe even 4), instead of two. I think this can be improved significantly in a way that makes everything more clear, by using the following change: linear-gradient( [ <angle> | [ top-left | top-right | bottom-right | bottom-left | top | bottom | right | left ] ] <color-stop>, <color-stop> ) <color-stop> is [<color> [<percentage>|<distance>]*], Thus, these go from blue in the lower left corner at a 45 degree angle until the last line of the gradient intersects the opposite corner: linear-gradient(45deg green, blue) linear-gradient(45deg green 0%, blue 100%) These start in the same corner and continue directly towards the opposite corner (along an angle that would be a line connecting those corners): linear-gradient(bottom-left green, blue) linear-gradient(bottom-left green 0%, blue 100%) These start in the bottom and continue towards the top: linear-gradient(bottom green, blue) linear-gradient(bottom green 0%, blue 100%) Adding stops then is very consistent: linear-gradient(bottom green, white, orange, blue) linear-gradient(bottom green 0%, white 33.3%, orange 66.6%, blue 100%) Briefly, about "inner": I think it is very unusual. When I create an angled gradient box in PhotoShop, it fills the whole thing to all corners. It does not start in one corner and then just stop once it hits a side. That would be weird. If you did want the length of the blend to be a certain distance that is consistent between two boxes of the same width, then just use an absolute distance measure instead of 100%. On another note, I think that if the beginning and ending stops are specified as >0% and <100% respectively, then their starting and ending colors should fill the space between those corners and the points at which there is actual gradation. Don't just leave those areas transparent. In the unusual event that you DO want transparency there, you could do this: linear-gradient(bottom transparent, transparent 30%, green 30%, blue 70%, transparent 70%, transparent)
Received on Friday, 14 August 2009 17:38:56 UTC