-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add clipping, shapes and masking #1649
Changes from 4 commits
ccfbbe4
44d926c
4c4cea6
03371d7
2073278
5a0a03f
8008e5d
945cf79
47a127f
285b6db
9a5137f
f5e1e26
735b990
19a4493
f1758ca
d4b7d39
3e4a0a6
2f575f6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,6 @@ | ||||||
name: Animatable clipping paths | ||||||
description: Clipping paths in CSS are animated using transitions and CSS animations. | ||||||
spec: https://drafts.fxtf.org/css-masking-1/#the-clip-path | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The 'current' spec:
Suggested change
I would update the other spec links to match. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll defer this until resolution of #1785 |
||||||
group: clipping-shapes-masking | ||||||
compat_features: | ||||||
- css.properties.clip-path.is_animatable |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# Generated from: clip-path-animatable.yml | ||
# Do not edit this file by hand. Edit the source file instead! | ||
|
||
status: | ||
baseline: false | ||
support: | ||
chrome: "55" | ||
chrome_android: "55" | ||
edge: "79" | ||
firefox: "49" | ||
firefox_android: "49" | ||
compat_features: | ||
- css.properties.clip-path.is_animatable |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,8 @@ | ||||||
name: Clip path boxes | ||||||
description: The `fill-box`, `stroke-box`, and `view-box` values for the `clip-path` set the part of the shape that will be used to clip the element. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I added an apostrophe in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the intent was possessive, but I'm dyslexic. The element has a box. :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I just wanted to confirm it wasn't like |
||||||
spec: https://drafts.fxtf.org/css-masking-1/#the-clip-path | ||||||
group: clipping-shapes-masking | ||||||
compat_features: | ||||||
- css.properties.clip-path.fill-box | ||||||
- css.properties.clip-path.stroke-box | ||||||
- css.properties.clip-path.view-box |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# Generated from: clip-path-boxes.yml | ||
# Do not edit this file by hand. Edit the source file instead! | ||
|
||
status: | ||
baseline: low | ||
baseline_low_date: 2023-11-02 | ||
support: | ||
chrome: "119" | ||
chrome_android: "119" | ||
edge: "119" | ||
firefox: ≤72 | ||
firefox_android: "79" | ||
safari: "13.1" | ||
safari_ios: "13.4" | ||
compat_features: | ||
# baseline: low | ||
# baseline_low_date: 2023-11-02 | ||
# support: | ||
# chrome: "119" | ||
# chrome_android: "119" | ||
# edge: "119" | ||
# firefox: "51" | ||
# firefox_android: "51" | ||
# safari: "13.1" | ||
# safari_ios: "13.4" | ||
- css.properties.clip-path.fill-box | ||
- css.properties.clip-path.stroke-box | ||
|
||
# baseline: low | ||
# baseline_low_date: 2023-11-02 | ||
# support: | ||
# chrome: "119" | ||
# chrome_android: "119" | ||
# edge: "119" | ||
# firefox: ≤72 | ||
# firefox_android: "79" | ||
# safari: ≤13.1 | ||
# safari_ios: ≤13.4 | ||
- css.properties.clip-path.view-box |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
name: clip-path | ||
description: The `clip-path` CSS property and SVG attribute sets an area of an element that should be displayed. Everything outside the area will be hidden. | ||
jamesnw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
spec: https://drafts.fxtf.org/css-masking-1/#the-clip-path | ||
# caniuse groups more clip-path features and tells a spottier support story. | ||
# caniuse: css-clip-path | ||
group: clipping-shapes-masking | ||
compat_features: | ||
- css.properties.clip-path | ||
- css.properties.clip-path.basic_shape | ||
- css.properties.clip-path.html_elements | ||
- css.properties.clip-path.path | ||
- css.properties.clip-path.svg_elements | ||
- svg.global_attributes.clip-path | ||
- api.SVGClipPathElement | ||
- api.SVGClipPathElement.clipPathUnits | ||
- api.SVGClipPathElement.transform | ||
- svg.elements.clipPath | ||
- svg.elements.clipPath.clipPathUnits | ||
- svg.elements.clipPath.systemLanguage |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
# Generated from: clip-path.yml | ||
# Do not edit this file by hand. Edit the source file instead! | ||
|
||
status: | ||
baseline: high | ||
baseline_low_date: 2021-01-21 | ||
baseline_high_date: 2023-07-21 | ||
support: | ||
chrome: "88" | ||
chrome_android: "88" | ||
edge: "88" | ||
firefox: "71" | ||
firefox_android: "79" | ||
safari: "13.1" | ||
safari_ios: "13" | ||
compat_features: | ||
# baseline: high | ||
# baseline_low_date: 2015-07-29 | ||
# baseline_high_date: 2018-01-29 | ||
# support: | ||
# chrome: "1" | ||
# chrome_android: "18" | ||
# edge: "12" | ||
# firefox: "1.5" | ||
# firefox_android: "4" | ||
# safari: "3" | ||
# safari_ios: "1" | ||
- api.SVGClipPathElement | ||
- api.SVGClipPathElement.clipPathUnits | ||
- api.SVGClipPathElement.transform | ||
|
||
# baseline: high | ||
# baseline_low_date: 2015-07-29 | ||
# baseline_high_date: 2018-01-29 | ||
# support: | ||
# chrome: "1" | ||
# chrome_android: "18" | ||
# edge: "12" | ||
# firefox: "1.5" | ||
# firefox_android: "4" | ||
# safari: "3" | ||
# safari_ios: "3" | ||
- svg.elements.clipPath | ||
- svg.elements.clipPath.clipPathUnits | ||
|
||
# baseline: high | ||
# baseline_low_date: 2015-07-29 | ||
# baseline_high_date: 2018-01-29 | ||
# support: | ||
# chrome: "1" | ||
# chrome_android: "18" | ||
# edge: "12" | ||
# firefox: "12" | ||
# firefox_android: "14" | ||
# safari: "3" | ||
# safari_ios: "3" | ||
- svg.elements.clipPath.systemLanguage | ||
|
||
# baseline: high | ||
# baseline_low_date: 2017-03-07 | ||
# baseline_high_date: 2019-09-07 | ||
# support: | ||
# chrome: "23" | ||
# chrome_android: "25" | ||
# edge: "12" | ||
# firefox: "52" | ||
# firefox_android: "52" | ||
# safari: "7" | ||
# safari_ios: "7" | ||
- svg.global_attributes.clip-path | ||
|
||
# baseline: high | ||
# baseline_low_date: 2020-01-15 | ||
# baseline_high_date: 2022-07-15 | ||
# support: | ||
# chrome: "55" | ||
# chrome_android: "55" | ||
# edge: "79" | ||
# firefox: "3.5" | ||
# firefox_android: "4" | ||
# safari: "9.1" | ||
# safari_ios: "9.3" | ||
- css.properties.clip-path | ||
- css.properties.clip-path.html_elements | ||
|
||
# baseline: high | ||
# baseline_low_date: 2020-01-15 | ||
# baseline_high_date: 2022-07-15 | ||
# support: | ||
# chrome: "55" | ||
# chrome_android: "55" | ||
# edge: "79" | ||
# firefox: "52" | ||
# firefox_android: "52" | ||
# safari: "9.1" | ||
# safari_ios: "9.3" | ||
- css.properties.clip-path.svg_elements | ||
|
||
# baseline: high | ||
# baseline_low_date: 2020-01-15 | ||
# baseline_high_date: 2022-07-15 | ||
# support: | ||
# chrome: "55" | ||
# chrome_android: "55" | ||
# edge: "79" | ||
# firefox: "54" | ||
# firefox_android: "54" | ||
# safari: "9.1" | ||
# safari_ios: "9.3" | ||
- css.properties.clip-path.basic_shape | ||
|
||
# ⬇️ Same status as overall feature ⬇️ | ||
# baseline: high | ||
# baseline_low_date: 2021-01-21 | ||
# baseline_high_date: 2023-07-21 | ||
# support: | ||
# chrome: "88" | ||
# chrome_android: "88" | ||
# edge: "88" | ||
# firefox: "71" | ||
# firefox_android: "79" | ||
# safari: "13.1" | ||
# safari_ios: "13" | ||
- css.properties.clip-path.path |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
name: Masks | ||
description: The `mask` CSS property (and several longhand properties) partially or completely hides an element according to the shape and depth of an image. | ||
spec: https://drafts.fxtf.org/css-masking-1/#positioned-masks | ||
group: clipping-shapes-masking | ||
caniuse: css-masks |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
name: "`path()` shape" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's do this feature in a separate PR (from synchronous discussion) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To elaborate here: the BCD data is very messy. It has subfeatures to describe support in (Please @ me on that PR, when you open it.) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Moved to #1799 |
||
description: The `path()` CSS shape function creates an shapes for use with `clip-path`, `shape-outside`, and the `d` property on an SVG. | ||
spec: https://drafts.csswg.org/css-shapes-1/#supported-basic-shapes | ||
group: clipping-shapes-masking | ||
compat_features: | ||
- css.types.basic-shape.path | ||
- css.types.basic-shape.path.clip-path | ||
- css.types.basic-shape.path.d | ||
- css.types.basic-shape.path.shape-outside |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a bit of a surprising result- these features do have some implementation, and I'm not sure if I'm misreading the BCD data, or if there is a bug in generating this. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Generated from: path-shape.yml | ||
# Do not edit this file by hand. Edit the source file instead! | ||
|
||
status: | ||
baseline: false | ||
support: {} | ||
compat_features: | ||
- css.types.basic-shape.path | ||
- css.types.basic-shape.path.clip-path | ||
- css.types.basic-shape.path.d | ||
- css.types.basic-shape.path.shape-outside |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
name: shape-outside | ||
description: The `shape-outside` CSS property, along with `shape-margin` and `shape-image-threshold`, sets the shape around which adjacent content will wrap. | ||
spec: https://drafts.csswg.org/css-shapes-1/#declaring-shapes | ||
group: clipping-shapes-masking | ||
status: | ||
compute_from: css.properties.shape-outside | ||
compat_features: | ||
- css.properties.shape-image-threshold | ||
- css.properties.shape-margin | ||
- css.properties.shape-outside | ||
- css.properties.shape-outside.none | ||
- css.properties.shape-outside.circle | ||
- css.properties.shape-outside.gradient | ||
- css.properties.shape-outside.image | ||
- css.properties.shape-outside.inset | ||
- css.properties.shape-outside.path | ||
- css.properties.shape-outside.polygon |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Generated from: shape-outside.yml | ||
# Do not edit this file by hand. Edit the source file instead! | ||
|
||
status: | ||
baseline: high | ||
baseline_low_date: 2020-01-15 | ||
baseline_high_date: 2022-07-15 | ||
support: | ||
chrome: "37" | ||
chrome_android: "37" | ||
edge: "79" | ||
firefox: "62" | ||
firefox_android: "62" | ||
safari: "10.1" | ||
safari_ios: "10.3" | ||
compat_features: | ||
# ⬇️ Same status as overall feature ⬇️ | ||
# baseline: high | ||
# baseline_low_date: 2020-01-15 | ||
# baseline_high_date: 2022-07-15 | ||
# support: | ||
# chrome: "37" | ||
# chrome_android: "37" | ||
# edge: "79" | ||
# firefox: "62" | ||
# firefox_android: "62" | ||
# safari: "10.1" | ||
# safari_ios: "10.3" | ||
- css.properties.shape-image-threshold | ||
- css.properties.shape-margin | ||
- css.properties.shape-outside | ||
- css.properties.shape-outside.circle | ||
- css.properties.shape-outside.gradient | ||
- css.properties.shape-outside.image | ||
- css.properties.shape-outside.inset | ||
- css.properties.shape-outside.none | ||
- css.properties.shape-outside.polygon | ||
|
||
# baseline: false | ||
# support: {} | ||
- css.properties.shape-outside.path |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
name: shapes | ||
description: The `circle()`, `ellipse()`, `inset()`, `polygon()`, `rect()`, and `xywh()` CSS shape functions create shapes for use with `clip-path` and `shape-outside`. | ||
spec: https://drafts.csswg.org/css-shapes-1/#basic-shape-functions | ||
caniuse: css-shapes | ||
group: clipping-shapes-masking | ||
status: | ||
compute_from: css.types.basic-shape | ||
compat_features: | ||
- css.types.basic-shape | ||
- css.types.basic-shape.animation | ||
- css.types.basic-shape.circle | ||
- css.types.basic-shape.ellipse | ||
- css.types.basic-shape.inset | ||
- css.types.basic-shape.polygon | ||
- css.types.basic-shape.rect | ||
- css.types.basic-shape.xywh |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# Generated from: shapes.yml | ||
# Do not edit this file by hand. Edit the source file instead! | ||
|
||
status: | ||
baseline: high | ||
baseline_low_date: 2020-01-15 | ||
baseline_high_date: 2022-07-15 | ||
support: | ||
chrome: "37" | ||
chrome_android: "37" | ||
edge: "79" | ||
firefox: "54" | ||
firefox_android: "54" | ||
safari: "10.1" | ||
safari_ios: "10.3" | ||
compat_features: | ||
# ⬇️ Same status as overall feature ⬇️ | ||
# baseline: high | ||
# baseline_low_date: 2020-01-15 | ||
# baseline_high_date: 2022-07-15 | ||
# support: | ||
# chrome: "37" | ||
# chrome_android: "37" | ||
# edge: "79" | ||
# firefox: "54" | ||
# firefox_android: "54" | ||
# safari: "10.1" | ||
# safari_ios: "10.3" | ||
- css.types.basic-shape | ||
- css.types.basic-shape.animation | ||
- css.types.basic-shape.circle | ||
- css.types.basic-shape.ellipse | ||
- css.types.basic-shape.inset | ||
- css.types.basic-shape.polygon | ||
|
||
# baseline: false | ||
# support: | ||
# firefox: "122" | ||
# firefox_android: "122" | ||
# safari: "17.2" | ||
# safari_ios: "17.2" | ||
- css.types.basic-shape.rect | ||
- css.types.basic-shape.xywh |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
name: Clipping, shapes and masking | ||
parent: css | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The potential issue with this group is that it now contains features that apply to both CSS and SVG. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good point- I've been thinking we will need to address the overlap between CSS and SVG more thoroughly at some point. Allowing for multiple parents for a group would be complex, so I'll remove the parent group here for now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.