- From: Amelia Bellamy-Royds <amelia.bellamy.royds@gmail.com>
- Date: Wed, 13 May 2015 20:21:04 -0600
- To: "Tab Atkins Jr." <jackalmage@gmail.com>, www-svg <www-svg@w3.org>
- Message-ID: <CAFDDJ7xid3xoyQo=8x9Lme4wONLi5dc0eCLCmDKDjm4_xqOLVA@mail.gmail.com>
Thanks for the notes Tab. A couple clarifications below. On a more general note, I know that what I've written is a grand, and possibly over-reaching, proposal. But it came from looking at what was currently in the spec & trying to make it make sense. I wanted to get a discussion started about how this will work, and what it is trying to achieve. The fact is, there isn't enough detail right now for how SVG paint servers will work with the CSS-background syntax. Or even about how images as fill will work. Let alone things like background attachment and clip and <shape-box> values on an SVG shape. If someone wants to write it all out, that would be very a useful point of comparison. What would something like `fill: linear-gradient(red,blue) fixed bottom/50% 20em padding-box fill-box` look like? Is there a use case for it? Will implementations really be able to re-use existing code or would this just complicate things further? I'm a big advocate of not re-inventing the wheel, but I'm also a big advocate of keep it simple, s'il vous plait! I really feel that if we start with CSS background syntax and try to adapt it for SVG, we'll end up with something that is much more complicated than it needs to be, without addressing many of the more interesting use cases. ABR On 13 May 2015 at 16:59, Tab Atkins Jr. <jackalmage@gmail.com> wrote: > On Tue, May 12, 2015 at 6:42 AM, Amelia Bellamy-Royds > <amelia.bellamy.royds@gmail.com> wrote: > > - Particularly for strokes of different widths, it is preferable to > allow > > multiple solid color layers without needing hacks such as single color > > gradients or extra markup to create a solidColor paint server element. > > This is accomplishable through the image() function; you can omit the > urls and just supply a color, and you'll get a solid-color image. > Easier and less hacky than using a linear-gradient and repeating the > color. > Sure, if anyone implemented image(). I think it is still hanging on support for #xywh=. I know: it's in the spec, and it's coming, so it is an option. I would certainly advocate for it ahead of creating any custom function notation. But, it would be nice to be able to dispense with extra function notations altogether when all we need are a list of colors. > > > - It would be very useful to create paint server elements that can be > > customized by passing a color property at the time they are used. > > We have a number of mechanism to accomplish this already; > currentColor, use-color (or whatever it's called), var(). I can't > quite tell, from the proposal, what the "context" stuff is trying to > do. Can you elaborate? > The problem is that paint servers *do not* inherit CSS styles from the shape that they are painting. Neither do markers according to the spec (IE implements it otherwise, with messy results if you forget to over-ride the inherited stroke on your arrowheads!). So you can't use currentColor and you can't use var(). (I don't think useColor actually exists anywhere, it got standardized away to currentColor.) The idea of the context keywords is to allow basic coordinate of markers and shapes, and it has been adopted as an official requirement for SVG 2 -- but without any clear details on how it would work with paint servers (e.g., is it the original shape's bounding box that is used? Or the box for the marker and with layered paint servers in particular. Tav brought up the idea of being able to use a context-color like keyword for patterns and hatches. The main benefit would be to reduce the amount of markup you require for data viz and other mapping and other situations where you have a lot of variations on a pattern that differ by color. But that brings up the problem of circular references. It also begs the question of, if you can parameterize by color, why not by other styles? >From an implementation perspective, once you allow one it is no extra burden to allow others -- either way you have to re-render the paint server content for each context. And already, if paint servers are correctly implemented they need to be customizable to the context because of percentages and userSpaceOnUse units (there are bugs last I checked in Blink/Webkit with respect to this). I wrote more on the potential issues a few months back: https://lists.w3.org/Archives/Public/www-svg/2015Jan/0012.html This was my attempt to address those issues while also maximizing functionality. > > The idea of the *-index properties came from the need to control the > > layering of three different stacks of paint content (fill, strokes, and > > markers) rather than a single stack for background images. > > We already have 'paint-order' for controlling the relative ordering of > fill/stroke/markers. Within strokes/fills/etc, ordering is controlled > by the order in which they appear. It seems like the only new thing > added by *-index is the ability to interleave stroke/fill/marker > painting, but that's a rather new thing that hasn't had any use-cases > presented for it, and its functionality directly overlaps with > 'paint-order'. > Pretty much, yes. This was an "instead of paint-order" idea. I hadn't actually realized that anyone had implemented paint-order yet. I think paint-order as it is currently proposed is going to be a very unfortunate constraint as we move forward with advanced markers and strokes, in addition to the very practical use of being able to interleave strokes and fills. If you haven't seen use cases yet, it is because people haven't started playing around with multiple fills and strokes. I am quite confident that when they do, the paint-order approach will become an annoyance just like the current strokes-on-top rule. > > > If there is a strong desire to add back in the other background > properties > > (e.g., *-position, *-origin, *-clip, *-repeat, *-attachment, *-size), > I'd be > > happy to hear those arguments. However, I really think they confuse > things > > with unnecessary complexity more than they simplify things with > similarity > > to the background shorthand. > > They need to be in there. CSS paint servers are usable with SVG as > well, and proper use of them requires those properties. Yes, they > more or less overlap with <pattern> use, but having them in a property > form is useful, and keeps them close to the CSS properties we're > deriving these from. > I think your last line says it all. I'm really arguing that we should be looking at SVG use cases and working from there, rather than making SVG a derivative of CSS. I don't think these properties would be bad, I just think they add a lot of complexity without a lot of benefit, both for authors and for SVG implementations that don't already implement CSS layout. > > I'm not sure why there would be a need for CSS WG review first, since > these > > would be SVG-specific properties. However, I would be happy to have > > additional feedback if you want to suggest that group members take a > look at > > the proposal. I definitely want to discuss the *-box properties with > those > > active on the FX specs that use SVG graphical effects elements with > > objectBoundingBox vs userSpaceOnUse units. > > There's no such thing as "SVG-specific properties". They're still > CSS, even if they only have an effect on SVG elements, and review by > the CSSWG prevents problems. We can help ensure that they don't make > common mistakes, and that they are in line with modern design patterns > for properties. > > This, in particular, is a big, involved proposal. I would strongly > object to doing anything with it without extensive CSSWG review and > feedback; there are several points I note from a quick read that > should be changed. I'll need to spend some time reviewing this more > thoroughly. > > Fair enough. Looking forward to additional comments. But I would also like to have some feedback from the SVG side. What do people want this feature to accomplish? How can we make it easier to use? How can we make it something useful and distinct from CSS-formatted HTML?
Received on Thursday, 14 May 2015 02:21:32 UTC