- From: Eric A. Meyer <eric@meyerweb.com>
- Date: Thu, 15 Oct 2015 23:24:08 -0400
- To: "CSS WG" <www-style@w3.org>
I've been testing shapes recently[1] and I feel like the way shapes are
confined to the margin box of the element is unintuitive, but more to
the point, some of the examples seem to imply different behavior than
what the spec defines. Unless of course I completely misunderstood what
the spec says, though if I did, the Chrome team came to the same
conclusion.
First off, let me quote from section 2 of
<http://www.w3.org/TR/css-shapes-1/>:
"When a shape is used to define a float area, the shape is clipped
to the float’s margin box.
In other words, a shape can only ever reduce a float area, not
increase it."
So that means if I do something like this, the shape will still be 100px
by 100px:
img {width: 50px; height: 50px; margin: 25px;
shape-outside: polygon(0 0, 200px 0, 200px 200px, 0 200px);}
First off, I object to this a little bit on general principles: if I
want a shape to stick out of the element's margin box, that seems like
it should be allowed. Suppose I have a raster image of a circle, where
the circle's edge touches the edges of the image. If I set a circle
shape that's larger than the visible circle, like so:
img {width: 50px; height: 50px; margin: 0;
shape-outside: circle(60px at 50% 50%);}
…then any text flowing past it will still jam up against the side of
the circle, because the shape is clipped on each side. The only way for
me to make the text flow nicely around the curve is to enlarge either
the image or the image's margins to encompass the shape.
But, okay. It's arguable that this is a good thing, in general: it
prevents the fallback in shape-blind browsers from having text jammed up
against floats where an author relied on shapes to push away the text.
We could probably devise scenarios in which that would not be an
advantage as well, but never mind.
The real problem is that Example 11 is fairly misleading about this
behavior, to my eyes. Looking at the figure in Example 11, I would
expect the image edges of the CSS logo to be pretty close to touching
the outermost points of the dotted line, with maybe a few pixels extra.
But the 'shape-margin: 35px' pushes all the text away 35 pixels. Sure,
we could assume that there's more image or a right margin large enough
to cover the shape-margin, but this is not what I would assume given the
visual and the CSS that accompanies it.
I also feel that Example 10, in not showing the edges of the float on
which the polygon shape has been hung, leaves readers without a sense of
the limits of shapes and their margins. (Which, yes, the shape margin
is defined to create a whole new shape, but most people won't think of
it that way, just as almost nobody thinks of an element as being resized
by its margins.)
In my ideal world, shapes would not be clipped by the margin box of the
float, That would make the examples not misleading, and also be more
intuitive in general, since there's no obvious reason why shapes should
be clipped. This could be partially accomplished by defining the
float's margin box to expand to cover the outermost points of the new
shape defined by the shape-margin, or wholly accomplished by simply
dropping the clipping behavior.
Failing that, I strongly recommend that Examples 10 and 11 be altered to
make visually clear where the floats' margin edges are placed, likely
with the addition of a declaration in Example 11.
I also (very) strongly recommend adding a new example that explicitly
demonstrates margin-box shape clipping, probably best placed in section
2.
I'm willing to create the clarified figures and the new example, if
people agree with my reading of the specification and belief that
clarification is needed.
[1] See the shape-related links on
<http://meyerweb.com/eric/css/tests/css3/>.
--
Eric A. Meyer - http://meyerweb.com/
Received on Friday, 16 October 2015 03:24:34 UTC