- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Thu, 27 Jun 2013 18:24:51 -0700
- To: "www-style@w3.org" <www-style@w3.org>, www-svg <www-svg@w3.org>, "public-fx@w3.org" <public-fx@w3.org>
These are the official CSSWG minutes. Unless you're correcting the minutes,
*Please respond by starting a new thread with an appropriate subject line.*
Reusing Stroke and Fill in CSS
------------------------------
The CSS and SVG WGs discussed the possibility of reusing the SVG
'stroke' and 'fill' properties to stroke and fill text in CSS.
Some concerns raised:
- controlling pattern fill boundaries when an inline breaks across lines
- figuring out appropriate initial values and interaction with 'color'
- inheriting a pattern fill doesn't work in CSS; need to know which
element specified the pattern, otherwise adding unstyled inline
around part of the text will reset the pattern
- SVG properties don't follow the CSS shorthanding patterns; need
to check back-compat wrt whether this can be fixed
- need some control over where the stroke sits on the glyph outline
ACTION fantasai + Tab: Write proposal for using stroke and fill for CSS text.
SVG Text Wrapping
-----------------
Discussed SVGWG's proposals for adding soft-wrapping to SVG:
http://www.w3.org/Graphics/SVG/WG/wiki/Proposals/Wrapping_Text
http://tavmjong.free.fr/SVG/TEXT_FLOW/
The goal is to re-use CSS functionality (and layout engines)
for SVG text layout. No objections so far to proposal to add
width to <text> for wrapping; however it was felt by some that
for formatting multi-block content, HTML markup should be reused.
In general, people want CSS text formatting to Just Work in SVG,
not require special rules for SVG text content.
====== Full minutes below ======
Reusing Stroke and Fill in CSS
------------------------------
heycam: topic added from CSS side
heycam: did someone have a specific proposal
Tab: it was me
fantasai: we've had requests to be able to do fill and stroke on letterforms
fantasai: webkit has text-stroke property. Might make more sense to
reuse existing SVG properties.
* plh wonders how confusing color and fill are going to be for devs
fantasai: Complication is filling with pattern or image of some kind...
how to handle line breaks is complicated
fantasai: stroking or filling with color is straightforward
<jdaggett> the webvtt guys have 'text-outline' as part of their spec
<jdaggett> fill/stroke would be a better way of supporting that
heycam: why do line breaks complicate things?
fantasai: need to find the bounding box
fantasai: might slice or take bounding box or fill separately per fragment
dbaron: we do sort-of have a property for this already
http://dev.w3.org/csswg/css-backgrounds/#box-decoration-break
dbaron: we do sort of have a property for this already:
http://dev.w3.org/csswg/css-backgrounds/#box-decoration-break
fantasai: do we reuse that property or have separate control?
heycam: what does box-decoration-break do?
fantasai: determines how it's handled for borders and background
fantasai: That's background, this is about foreground.
heycam: That's one issue. Another is defining how color property and
fill/stroke properties work together and whether their initial
values allow same behavior for existing things.
dirk: I think the first question is do we want something like that.
dirk: Before we talk about page break or line break or whatever.
fantasai: simplest are fill-opacity and stroke; fill could deal with later
dirk: I think fill at least as important as stroke
dino: webkit currently has custom property for gradients in text --
-webkit-background-clip -- horrible thing with backgrounds,
for filling text. Can't then do background.
dino: want to be able to say fill text with gradient/color/pattern;
seems pretty standard for CSS
fantasai: additional complication is that color inherits
fantasai: so each element paints with its own color property
fantasai: if you add more elements nothing changes unless you set
properties on those elements
fantasai: you want pattern to be consistent across an entire paragraph
with elements inside...
heycam: in SVG, two options (1) define pattern area in coordinate space
of elements or (2) define relative to bounding box of element
that's using that paint
heycam: but for tspans within a text element we use the bounding box
of the text element as a whole
dbaron: don't think (1) works with CSS model
heycam: agree
heycam: so what happens with linear-gradient on a paragraph with multiple
spans...
dbaron: background doesn't inherit
[not minuting entire discussion here]
dino: fill/stroke/color inherit and background doesn't; don't want a new
style of fill for every child
fantasai: that would be a problem
heycam: why would fill and color have different inheritance?
fantasai: if you're setting a pattern need to know which element initiated
the pattern
heycam: seems odd for fill and color to have difference in whether they
inherit, similar actions
heycam: I think we should first see if people think it's a good idea for
fill and stroke to work for text... then work out issues if people
like it.
dirk: always have option to have different properties
dbaron: I think it is a good idea to use fill/stroke. Would like to see
that work.
dbaron: We could do it by turning fill/stroke into shorthand that sets
both an inherited and non-inherited property
heycam: ???
dbaron: Say 'fill' is a shorthand for 'fill-pattern' and 'fill-root'
heycam: so having text-stroke and text-fill not inherited and shape-stroke
and shape-fill (for SVG) inherited
dbaron: latter of which has 'normal' and 'establish' or something
dino: You only want this fill/stroke to apply to text
dino: that's one reason in webkit it's text-stroke
dino: do you ever want to stroke a box?
fantasai: that's what borders are for
?: just on text
dino: then why not just do text-fill and text-stroke
dirk: if you say ... should be a shorthand ... inheritance problem ...
dino: sounds fine to me
fantasai: in SVG stroke just sets color of something ... weird
heycam: might be beneficial for 'stroke' to be shorthand to stroke-paint
and stroke-width and ...
fantasai: yes, that would follow pattern of CSS a lot better
dirk: what does stroke-paint stroke-width mean?
heycam: stroke-paint would be what stroke is currently
fantasai: then you can set all the stroke-related properties with stroke
fantasai: if you just want to touch the color you say stroke-paint
heycam: might be more convenient for SVG anyway
fantasai: possible without breaking the Web?
heycam: yeah, probably
fantasai: depends how often people use it in CSS syntax rather than in
SVG file
fantasai: because stroke-width: ...; stroke: ...; would reset the first
<shepazu> (what would stroke: blue; do?)
heycam: so I feel like somebody should look at these issues and come up
with proposal for integrating
dirk: problem here is we have the attributes
dirk: [too fast]
heycam: we already decided to allow font shorthand as presentation attribute
heycam: you take all the presentation attributes in a particular order
dirk: cannot modify this order in the dom
<SimonSapin> shepazu, if it’s a shorthand, set stroke-paint to blue and
stroke-width to the initial value
<shepazu> SimonSapin, then it won't break the web
heycam: might not have made this change
fantasai: for sure the stroke attribute would map to stroke-paint...
it would have to
fantasai: never mind
heycam: anybody think it's a bad idea to try to allow paints in stroking text?
Bert: principle is good, worried about syntax
fantasai: in SVG, if you stroke a letterform, where does the stroke lie
with respect to the glyph outline?
dirk: it half overlaps the fill
<jdaggett> seems like we need someone to work on a draft proposal
tav: can change the order now
<jdaggett> i think you want to have inset/outset control
<jdaggett> look to postscript for a good model
* fantasai agrees with jdaggett
heycam: does webkit-text-stroke paint on top of fill or beneath?
dirk: same as SVG
tav: most of the time you want fill on top of stroke
fantasai: if you put fill on top of stroke, looks fine when fill is opaque,
otherwise looks dumb
fantasai: would also lead to author confusion about stroke width
fantasai: so I agree with jdaggett, should have control over where stroke
is centered
dirk: ???
<jdaggett> also, japan has *lots* of examples of double stroking of text
heycam: we have proposal for that
tav: should we put that in?
dirk: we did
<jdaggett> white stroke surrounded by black stroke
<shepazu> +1 to controlling stroke centering
Bert: if you're doing filling of text you might want text-shadow to have
inset keyword
fantasai: inset in plans for text level 4
dirk: stroke and fill don't need to overlap... have a new property so
they don't need to
heycam: called stroke-position?
heycam: which we have a proposal for, to go in SVG2
<Cyril> http://www.w3.org/Graphics/SVG/WG/wiki/Proposals/Stroke_position
fantasai: I think Tab and I can take an action to draw this one up.
ACTION fantasai with Tab, draw up proposal for using stroke and fill for CSS text
<trackbot> Created ACTION-562
[shepazu suggests pulling him and jdaggett into that discussion for help]
jdaggett: For text stroke and text fill, parameterization could be
a complication... would like to work through multiple proposals.
SVG Text Wrapping
-----------------
heycam: so recently in SVG WG meeting yesterday or the day before we
discussed how to satisfy requests for wrapping text in SVG,
long wanted
heycam: people may remember the proposal in SVG Tiny 1.2, for <textArea>,
with text layout different from CSS... objections because different
from CSS
heycam: 2 things we want: (1) to do simple rectangular text and
(2) text in shapes, which SVG also had a proposal for long ago
heycam: so we want to follow CSS For text in shapes
heycam: and we've been discussing simple discussion for our current text
to wrap text to a particular width
<shepazu> simple: http://www.w3.org/Graphics/SVG/WG/wiki/Proposals/Wrapping_Text
and more powerful: http://tavmjong.free.fr/SVG/TEXT_FLOW/
heycam: tav will talk about what we need from arbitrary shapes perspective
and doug will talk about simple rectangular wrapping
tav: This describes what's in SVG 1.2 flowed text. Partially implemented
by Batik and Inkscape
tav: that didn't take -- was complicated and not consistent with CSS
tav: looked at what we can do to keep consistent with CSS.
tav: propose to use shape-inside, shape-outside, wrap-margin, wrap-padding
tav: here's an example, with a shape in an SVG circle
(showing examples from http://tavmjong.free.fr/SVG/TEXT_FLOW/ )
tav: mocked up flowing between shapes (from 1.2 proposal), though told
this conflicts with regions from CSS
tav: and here's one with some exclusions
tav: a couple issues, 1 is CSS region seems overkill for our needs
tav: and not close to being finished
stearns: what you want that's different is a comma-separated list of regions?
dirk: so shape-inside and flow to the next shape at the same time
tav: shows example with text flowing from circle to square
stearns: in regions you'd have a list of selectors selecting ...
dirk: he means shapes... he wants shape-inside to have comma-separated lists
Bert: so why does the text go down one and then down the other?
tav: how to do without using CSS regions... if you don't have CSS support?
SVG doesn't rely on having CSS.
Jet: and the rest of the words are just clipped?
fantasai: so what happens if someone increases the text size?
tav: just falls off the end
rossen: ... overflow: hidden... on both ...?
tav: next problem we have is SVG doesn't have <br> and <p>, though could
probably rely on 'white-space', though maybe not ideal
tav: question is what's the best way to do line breaks and paragraphs
tav: one thing we could do is position text in tspans by having x and y.
We'd keep them, but in flowing text you ignore them. But if it
doesn't it can serve as fallback for old renderers.
tav: though if renderer doesn't have right font, might be positioning
problems, but would be readable
tav: one thing SVG doesn't have is a wrapping context... doug has a proposal
<shepazu> http://www.w3.org/Graphics/SVG/WG/wiki/Proposals/Wrapping_Text
doug: link to my proposal
doug: there's a width and (optionally) height property on svg:text element
doug: and it basically passes in the position established via x and y
doug: and the width, and optionally the height
doug: as the inner box (rendering area), and has CSS engine do text wrapping
doug: cameron has rough prototype
heycam: in local build
doug: Cameron was able to implement in a couple of days.
doug: The idea is to treat SVG text like you would a paragraph or text
in a div. If it has a width, it wraps to that width. If has a
height, clips to that point.
doug: options are allowing scrolling with overflow:scroll, allowing
padding/margins. I don't have a strong feeling about padding/margins
either way. I think important part is wrapping.
doug: But the basic idea is to use the width property on the existing
text element to wrap the text.
doug: Advantage to that is that the natural fallback is that the text
still appears but is not wrapped; better than not appearing at all.
heycam: In SVG, when I get to rewriting text chapter, I plan to define
non-wrapping text this way:
heycam: SVG currently has x and y attributes to specify positions for
character (not glyph!) positions
heycam: we're treating that as a ... for defining CSS layout of the text
heycam: you set up a block that has indefinite width and treat the text
element itself as the block and tspans within that as inlines,
perform CSS text layout, and then if any glyph positioning, do
that as a layer on top of the CSS layout.
heycam: so to handle restricting the text to a width would just mean
setting that initial block width to that width rather than being
exceptionally wide
heycam: so purpose of talking about these 2 topics here was to see if
you think we're heading of the rails in any particular way,
or have any opinions on how better to integrate with CSS stuff
heycam: so we don't work away for months and then have people say it
shouldn't be done this way
fantasai: I think this makes sense
fantasai: I have concern about x and y positions and how that works with
line breaking
* Rossen wonders how different this is from foreign object in svg?
fantasai: line breaking determined by layout engine and could vary
between engines, e.g., fonts, hyphenation engine
fantasai: those glyph thingies probably assume a certain type of wrapping
heycam: in the past without support for auto-wrapped text, people used
x and y to manually wrap
heycam: so as tav was describing for text in shapes, where x and y could
be fallback positions, we'd do the same thing here for rectangular
text, so in this mode x and y would be ignored when wrapping is
supported
heycam: doug, did you have different view?
doug: I think various options we could explore.
doug: Key thing is I want CSS WG to understand we're proposing to treat
text in SVG much like text in HTML, and use existing CSS text
layout engine that browsers already have to do text wrapping.
doug: I think this is simply solved by using what CSS already has, in SVG.
doug: There may have to be tweaks or bits here and there, say text-alignment,
alignment-baseline, for certain effects or other things... we'd have
to specify that, but would run by CSS WG.
glazou: Also in Mozilla's XUL have to include HTML inside of XUL.
glazou: not specific to SVG and text
rossen: how is this different than foreignObject?
heycam: Was just about to say that I think there's a real desire to not
have to resort to having to use foreignObject -- ugly feature
syntactically -- for simple cases like rectangular text layout.
But foreignObject would still always be there.
heycam: But for simple cases would be nice not to have to escape into
HTML world.
dino: Shouldn't say these are simple cases. If you're going to do a
CSS block, it should be a CSS island inside SVG with all the
CSS properties.
dino: weird, x,y is bottom corner in SVG top corner in CSS
heycam: In my approach, I switched on whether width was specified,
and made x,y be top/left when width was specified
heycam: definitely would want to specify it like that, now you're in
CSS mode, read over here
tav: in that case fallback doesn't work
dino: I'm not so worried about fallback
dirk: margin/padding has.. (cutoff)
doug: popular libraries like d3.js where people are doing labels
doug: script library that makes SVG diagrams very easy
doug: I talked to several people using d3, people want wrapping text
without having to use HTML
doug: for those cases having fallback to older browsers would be really
nice, fall back to one line
doug: this is why I mentioned alignment-baseline
doug: could say whether origin affects glyph cell or character cell,
top/left or baseline
doug: dino, I'm fine with saying "this is a CSS block and behaves like one"
doug: whatever's easiest for implementors and authors... authors would
expect padding/margin
dino: then hyphenation, kerning, etc.
heycam: for non-wrapping case we'll just make all CSS properties work on
single-line text too
heycam: at least in Firefox (soon) we'll just do CSS layout underneath
for text, so easy to let properties just work
dino: so you're suggesting effectively flatten text content of element
dino: basically flatten tspan positioning
dino: if I say text width is 100 and inside tspans with x and y...
tspans get thrown out
heycam: tspans are effectively spans even in the single line case
doug: part of my idea was actually that in case where you wanted to have
a line break, break element, might use tspan with dx and dy
doug: to allow simple breaking in SVG so you didn't have to pull in
HTML to do paragraph
doug: obviously lists etc. out of scope
doug: for simple text breaking thought could use tspans for that
dino: should be a single block
dino: if you want >1 block, use HTML
dirk: why not have new element in SVG for anything from HTML world?
heycam: like foreignObject?
dirk: with no <html><body> etc.
dirk: inside this tag you have HTML world
dbaron: You don't need <html><body> etc. inside <foreignObject>.
Do need namespace.
dbaron: how much more violent agreement do we need here?
heycam: Just wanted to make CSS WG aware of what we're doing so we can
get course corrections; mail to list fine too.
r12a: when you collapse the tspans, how do you separate the last word
in the first tspan and the first in the next?
heycam: don't really collapse
dino: meant just ignore x and y attributes and use them as spans
doug: I think these details can be sorted out in spec... don't need
to go into them in this meeting.
doug: What I'd like in this meeting is ...
doug: was some concern in SVG F2F that CSS WG might have some objections
doug: so we wanted to socialize it with CSS WG
doug: so we wanted to make sure thought a good path forward
doug: don't know if we need a resolution per se
doug: nice to know if this is a reasonable direction
glazou: I think you have that consensus.
Bert: I'm not going to say what SVG should do... but why not just stick
with foreignObject?
Tab: You need to give it a height, you can't just flow an amount of
text in.
doug: Bert, the answer I've gotten from people doing it every day,
people want 1 element rather than 6.
Bert: soon you'll need hyperlinks, hyphenation
various: already have those
doug: if you need anything more complicated, you can use foreignObject
Bert: fine by me, just seems like double-work for half solution
Bert: but no objection
<br type="lunch" data-endtime="13:00">
Received on Friday, 28 June 2013 01:25:19 UTC