- From: Guillaume via GitHub <sysbot+gh@w3.org>
- Date: Mon, 19 Dec 2022 06:53:52 +0000
- To: public-css-archive@w3.org
`<basic-shape>` is defined in CSS Shapes 1 with the following functions:
- `circle(<shape-radius>? [at <position>]?)`
- `ellipse([<shape-radius>{2} ]? [at <position>]?)`
- `inset(<length-percentage>{1,4} [round <'border-radius'>]?)`
- `polygon(<'fill-rule'>? , [<length-percentage> <length-percentage>]#)`
- `rect([<length-percentage> | auto ]{4} [round <'border-radius'>]?)`
- `xywh(<length-percentage>{2} <length-percentage [0,∞]>{2} [round <'border-radius'>]?)`
- `path(<'fill-rule'>? , <string>)`
CSS Shapes 2 extends this list with `shape(<'fill-rule'>? from <coordinate-pair>, <shape-command>#)`.
---
`<basic-shape>` is used in:
- CSS Masking: [`clip-path`](https://drafts.fxtf.org/css-masking-1/#propdef-clip-path)
- Motion: [`offset-path`](https://drafts.fxtf.org/motion-1/#propdef-offset-path)
- CSS Shapes 1: [`shape-outside`](https://drafts.csswg.org/css-shapes-1/#propdef-shape-outside)
- CSS Shapes 2: [`shape-inside`](https://drafts.csswg.org/css-shapes-2/#propdef-shape-inside)
- CSS Round Display 1: [`shape-inside`](https://drafts.csswg.org/css-round-display-1/#propdef-shape-inside)
- SVG 2: [`shape-inside`](https://svgwg.org/svg2-draft/text.html#TextShapeInside), [`shape-substract`](https://svgwg.org/svg2-draft/text.html#TextShapeSubtract)
For `clip-path`, CSS Masking links `<basic-shape>` to CSS Shapes 1 and does not restrict its value.
For `offset-path`, Motion links `<basic-shape>` to CSS Shapes 1 and restricts its value to `inset()`, `circle()`, `ellipse()`, `polygon()`. I think `rect()` and `xywh()` should be allowed. `path()` may be problematic because it takes `<'fill-rule'>`, which seems meaningless for `offset-path`, but `polygon()` also takes it and is already accepted in `offset-path`, so should `<'fill-rule'>` have no effect?
For `shape-outside`, CSS Shapes 1 restricts `<basic-shape>` to `inset()`, `circle()`, `ellipse()`, `polygon()`. CSS Shapes 2 links it to CSS Shapes 1 and restricts it to the same value. I think other basic shapes should be allowed in both specs.
For `shape-inside` in CSS Round Display 1, `<basic-shape>` is not linked and its value is not restricted. The spec says that *CSS Shapes 2 define the `shape-inside` property [...which] is extended with a new value named `display`*, which is already included in CSS Shapes 2.
For `shape-inside` and `shape-substract` in SVG 2, `<basic-shape>` is not linked and its value is restricted to `circle()`, `ellipse()`, `polygon()`. The spec has *Issue 76: do not re-specify `shape-inside` but reference CSS Shapes*, and its value definition is different than in CSS Shapes 2. I think other basic shapes should be allowed.
---
I propose the following changes.
In [CSS Shapes 1](https://github.com/w3c/csswg-drafts/blob/7ee1e95e546c62d0e1af5fa1a5f52f5a0def3696/css-shapes-1/Overview.bs#L567), add the production rule of `<basic-shape>`:
```diff
+ Basic shapes in CSS are represented by the <<basic-shape>> type.
Additionally, the three rectangular shape functions
are grouped into a production for convenience:
<pre class=prod>
+ <<basic-shape>> = <<basic-shape-rect>> | <<circle()>> | <<ellipse()>> | <<polygon()>> | <<path()>>
<dfn><basic-shape-rect></dfn> = <<inset()>> | <<rect()>> | <<xywh()>>
</pre>
```
In [CSS Shapes 1](https://github.com/w3c/csswg-drafts/blob/7ee1e95e546c62d0e1af5fa1a5f52f5a0def3696/css-shapes-1/Overview.bs#L974), accept all functions of `<basic-shape>` in `shape-outside`:
```diff
<dd>
The shape is computed based on the values of one
- of ''inset()'', ''circle()'', ''ellipse()''
- or ''polygon()''. If a <<shape-box>> is also supplied, this defines the <a>reference box</a> for the <<basic-shape>> function. If <<shape-box>> is not supplied, then the <a>reference box</a> defaults to ''margin-box''.
+ of the <<basic-shape>> functions. If a <<shape-box>> is also supplied, this defines its <a>reference box</a>. If <<shape-box>> is not supplied, then the <a>reference box</a> defaults to ''margin-box''.
</dd>
```
In [Motion](https://github.com/w3c/fxtf-drafts/blob/bc48bfa2e7b1773f8081315f474af400e5b0b699/motion-1/Overview.bs#L168)
```diff
: <<inset()>>
+ : <<rect()>>
+ : <<xywh()>>
::
The <var>initial position</var> is the left end of the top horizontal line, immediately to the right of any 'border-radius' arc.
: <<polygon()>>
+ : <<path()>>
::
The <var>initial position</var> is defined by the first coordinate pair of the polygon.
- The <var>initial direction</var> is defined by the vector connecting.
+ The <var>initial direction</var> is defined by the vector connecting
-
the <var>initial position</var> with the next following coordinate pair that isn't equal to the <var>initial position</var>.
+
+ The `<<'fill-rule'>>` argument of `<<polygon()>>` and `<<path()>>` is ignored.
```
--
GitHub Notification of comment by cdoublev
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/7390#issuecomment-1357175930 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Monday, 19 December 2022 06:53:54 UTC