Re: Gradient syntax proposal

On Fri, Aug 14, 2009 at 8:02 PM, Andrew
Fedoniouk<news@terrainformatica.com> wrote:
> Tab Atkins Jr. wrote:
>> On Fri, Aug 14, 2009 at 6:06 PM, Andrew
>> Fedoniouk<news@terrainformatica.com> wrote:
>>
>>>
>>> What if that element has background-image (real one) too?
>>>
>>
>> Exactly the same as you would if you specified two backgrounds that
>> were both url()s.
>>
>> background: url(),url();
>> is *exactly the same* as
>> background: url(),linear-gradient();
>> in terms of how to treat it.
>>
>
> That is not the answer on my question.
>
> How would you remove gradient if element has gradient and background image
> with (e.g. no-repeat)?

I'd do the exact same thing as I would if I had two background images
and I wanted to reset it to only one.

> I suspect that you will propose something nice as this:
>
>  background: url(??????),none;

Nah, just "background: url(...)".  I mean, you *could* put "none" in
there, but that's kind of unnecessary.  Setting background
automatically resets everything.

> But what shall I put instead of ?????? if I don't know that URL(it is
> defined in other file out of my influence)?

You don't know the URL?  You can always determine it - just inspect
the element in your favorite browser's CSS inspector.

But if, for some reason, you still don't know it (say it's a
dynamically generated url and can change unpredictably), then you're
sort of screwed, exactly like you would be if you had two background
images and wanted to just remove one.  That's just one of the
limitations of CSS.

> In short: gradients shall be uniquely addressable. solid-color() and
> linear-gradient() are mutually exclusive
> as they define value of the same thing.

I'm still not sure how you're justifying gradients being the same as
colors.  They're not, in any way, as I, Brad, and several others in
other circumstances have said.  They're an image.

> So gradient should be addressable by
> background-color, border-color, etc.
> I cannot imagine real life situation when you would want to use solid color
> and gradient color at the same time.

You gave such an example in an earlier email, where you had red
starting in two different corners and fading together into blue.  To
reproduce this, you'd do "background: linear-gradient(top left to
bottom / red, transparent), blue linear-gradient(top right to bottom /
red, transparent);"

> That is why I am insisting that gradients are such colors (color
> fill/distribution functions to be precise).

Even if two things are mutually exclusive, that does not mean they are
the same thing.

> As I said, there are many cases when you will want to have gradients on
> boxes other than background box of the element.
> Think about these cases:
>
> background-color: linear-gradient(top to bottom / yellow, blue);

background: linear-gradient(top to bottom / yellow, blue);

> border-top-color: yellow;
> border-left-color: linear-gradient(top to bottom / yellow, blue);
> border-right-color: linear-gradient(top to bottom / yellow, blue);
> border-bottom-color: blue;

border-image: linear-gradient(top / yellow, blue) / ...; (though,
Brad's proposed syntax doesn't *quite* work here - I need to be able
to slice based on distance from each side, rather than distance from
the top/left of the image.)

> column-rule-color: linear-gradient(top to bottom / yellow, blue);

All right, you can't do this yet.  However, since column-rule is
basically just "borders, but between columns instead", we would be
within our right to ask for a column-rule-image that worked similarly,
so we could put fancy curlicues between our columns and such.

Yes, you can justify using a gradient in the place of a color in
certain, specific circumstances.  But you really can't ever do it in a
reasonably general way, and that makes it useless.  It's much better
to find out what you're *really* doing with the image, and lay out a
general way to use it for any image.

For example, in your code it sort of makes sense to use a vertical
gradient for column-rule-color.  But how do you treat a horizontal
gradient, or a diagonal one?  And what about radial-gradient()?  I
don't think there are good answers to these that aren't arbitrary.

~TJ

Received on Saturday, 15 August 2009 05:04:53 UTC