- From: Brad Kemper <brad.kemper@gmail.com>
- Date: Thu, 13 Aug 2009 09:00:19 -0700
- To: robert@ocallahan.org
- Cc: fantasai <fantasai.lists@inkedblade.net>, "www-style@w3.org" <www-style@w3.org>
On Aug 13, 2009, at 1:08 AM, Robert O'Callahan wrote:
> That seems far more complicated than what we currently have.
Not to me, not for the most common uses, which are gradients that
stretch from one edge to another, one corner to another, and/or are
either vertical or horizontal. For those, an angle is simpler than a
coordinate point.
> By writing it as a 'gradient' rule you don't benefit background-
> clip, background-position, background-repeat, multiple backgrounds,
> and falling back to a background image. It's not extensible to other
> kinds of gradients, and doesn't handle repeating gradients.
That's kind of the point, since the conversation is about making
gradients into an image type. You want to use a bunch of background
properties for the image definition, and then use them again when that
image is used in a background? That would be pretty confusing, and
most of the time not that useful. As an author, I will probably never,
ever need a gradient to repeat over and over again in a background as
tiles. Using background-position to define the position of the
starting and stopping points (but not the in between points) just
complicates it unnecessarily, when an angle and 0 or more percentages
will do the trick.
Once the gradient is considered an image, then it can be used with
multiple backgrounds, fallback to another image type, background-clip,
and even repeating tiled gradients.
> And even so,
>
> { gradient: white #666 -90deg; }
> [..]
> seem much less clear than
> background: linear-gradient(top, white, bottom, #666);
Perhaps that is because you are already very familiar with your more
verbose form. If you were familiar with the default being linear
(which is not hard to remember, since linear gradients are far more
common), then leaving the word "linear" out of it would not be any
less clear. Then just listing 2 colors and the angle between then is
pretty damn simple.
In fact, having an angle and a distance from the zero point of that
angle is actually much less ambiguous than something like "20%
center" (as in one of the examples on the mozilla page). Is the 20%
horizontal or vertical? I know I should know that, but I always have
to stop and think about it when using backgrounds because it is the
opposite order than when using two values for borders, padding,
margin, etc. And angles are what I am most used to when creating
gradients in PhotoShop and other applications. I really don't find
anything clear about "20% center, 30% center". So to figure out what
angle is meant by that I have to imagine where those points lie and
then draw an imaginary line between them. If clarity is the goal, then
just tell me the angle, or let me type an angle. I don't want to do
math to convert between angles and two points on a coordinate system.
Once you go to multiple color stops, my way groups each color and the
percentage stop much more simply, without resorting to lengthy,
multiple functional notations to do that. My way uses the same
notation for the first and last stops as for the stops in-between,
instead of listing both the position and the color using a completely
different notation for the first and last stops. I'd have to say that
for linear gradients, my way is simpler AND clearer, without giving up
anything in power.
For radials, the most complicated part is the keywords, but they are
also pretty simple and clear, basically just the combination of [width
| height | longest | shortest] with [sides | corners]. They allow the
creation of oval gradients, gradients based on the size of the box (in
several different ways), and do not force you to switch from using
percentages in linear to fixed-distances-only in radial. I specified
percentages for both, but it could easily accommodate fixed distances
for both too. This makes my way more powerful, but it is also easier
to learn and understand too, because the notation is mostly identical
to the linear version. I find the examples on the mozilla page much
more confusing, as they switch between two lengths and a comma, to a
single length and a comma, back to two lengths again, then back to a
single length again. Seriously? You think that's clearer to someone
not already mired in it?? I guess it allows you to have radial center
that is not actually centered with the outside of the radial, but that
hardly seems like a useful reason to make it so complex.
I think a far better way to approach this is to make the commonest
uses dead simple (three values for the simplest gradients, go to
corners or sides with radial gradients), and add extra values in a
simple, consistent, easy-to-understand-as-possible manner for the more
complex cases. But having different center points for the inside of
the gradient than the outside is an extreme edge case and not worth
the excessively hard to fathom syntax it requires.
Received on Thursday, 13 August 2009 16:00:58 UTC