Skip to content

Commit 3c2b343

Browse files
authored
[CSSGapDecorations] Add rule-visibility-items to the explainer (#1255)
1 parent de406c1 commit 3c2b343

5 files changed

Lines changed: 161 additions & 38 deletions

CSSGapDecorations/explainer.md

Lines changed: 161 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,21 @@ content location of future work and discussions.
4242
- [Extending or shortening gap decoration segments](#extending-or-shortening-gap-decoration-segments)
4343
- [Interaction with spanning items](#interaction-with-spanning-items)
4444
- [Paint order](#paint-order)
45+
- [Decorations next to empty areas](#decorations-next-to-empty-areas)
4546
- [Key scenarios](#key-scenarios)
4647
- [Scenario 1: Horizontal lines between CSS grid rows](#scenario-1-horizontal-lines-between-css-grid-rows)
4748
- [Scenario 2: Lines dividing items in both directions of a grid](#scenario-2-lines-dividing-items-in-both-directions-of-a-grid)
4849
- [Scenario 3: Segmented gap decorations](#scenario-3-segmented-gap-decorations)
50+
- [Scenario 4: Grid layout with white space in leading columns](#scenario-4-grid-layout-with-white-space-in-leading-columns)
51+
- [Scenario 5: Column decorations only between items](#scenario-5-column-decorations-only-between-items)
4952
- [Future ideas](#future-ideas)
5053
- [Images](#images)
5154
- [Corner joins](#corner-joins)
5255
- [Propagation of gap decorations into subgrids](#propagation-of-gap-decorations-into-subgrids)
56+
- [Extensions to decoration visibility controls](#extensions-to-decoration-visibility-controls)
5357
- [Placement of gap decorations](#placement-of-gap-decorations)
5458
- [Scenario: Calendar grid with header column](#scenario-calendar-grid-with-header-column)
5559
- [Scenario: Different lines for different gaps, applied to a sub-area of a grid](#scenario-different-lines-for-different-gaps-applied-to-a-sub-area-of-a-grid)
56-
- [Scenario: Grid layout with white space in leading columns](#scenario-grid-layout-with-white-space-in-leading-columns)
57-
- [Scenario: Column decorations only in specific gaps](#scenario-column-decorations-only-in-specific-gaps)
5860
- [Scenario: Periodic Table omitting decorations from certain areas](#scenario-periodic-table-omitting-decorations-from-certain-areas)
5961
- [Dropped ideas](#dropped-ideas)
6062
- [Logical properties for flex and masonry containers](#logical-properties-for-flex-and-masonry-containers)
@@ -296,6 +298,113 @@ rule-overlap: [ row-over-column | column-over-row ]
296298
```
297299
<image src="images/example-column-over-row.png">
298300

301+
### Decorations next to empty areas
302+
303+
By default, gap decoration segments appear throughout a container.
304+
In some cases, authors may not want to paint segments next to empty areas.
305+
The `*-rule-visibility-items` properties allow control over this.
306+
307+
```css
308+
.container {
309+
display: grid;
310+
grid-template: repeat(3, 100px) / repeat(3, 100px);
311+
gap: 10px;
312+
rule: 1px solid black;
313+
rule-break: intersection;
314+
rule-visibility-items: all; /* initial value */
315+
}
316+
.item {
317+
background: lightgray;
318+
}
319+
```
320+
```html
321+
<div class="container">
322+
<div class="item" style="grid-area: 1 / 1">Item 1</div>
323+
<div class="item" style="grid-area: 2 / 1">Item 2</div>
324+
<div class="item" style="grid-area: 2 / 2">Item 3</div>
325+
<div class="item" style="grid-area: 3 / 1">Item 4</div>
326+
</div>
327+
```
328+
329+
<image src="images/example-rule-visibility-items-all.png">
330+
331+
```css
332+
.container {
333+
display: grid;
334+
grid-template: repeat(3, 100px) / repeat(3, 100px);
335+
gap: 10px;
336+
rule: 1px solid black;
337+
rule-break: intersection;
338+
rule-visibility-items: around;
339+
}
340+
.item {
341+
background: lightgray;
342+
}
343+
```
344+
```html
345+
<div class="container">
346+
<div class="item" style="grid-area: 1 / 1">Item 1</div>
347+
<div class="item" style="grid-area: 2 / 1">Item 2</div>
348+
<div class="item" style="grid-area: 2 / 2">Item 3</div>
349+
<div class="item" style="grid-area: 3 / 1">Item 4</div>
350+
</div>
351+
```
352+
353+
<image src="images/example-rule-visibility-items-around.png">
354+
355+
```css
356+
.container {
357+
display: grid;
358+
grid-template: repeat(3, 100px) / repeat(3, 100px);
359+
gap: 10px;
360+
rule: 1px solid black;
361+
rule-break: intersection;
362+
rule-visibility-items: between;
363+
}
364+
.item {
365+
background: lightgray;
366+
}
367+
```
368+
```html
369+
<div class="container">
370+
<div class="item" style="grid-area: 1 / 1">Item 1</div>
371+
<div class="item" style="grid-area: 2 / 1">Item 2</div>
372+
<div class="item" style="grid-area: 2 / 2">Item 3</div>
373+
<div class="item" style="grid-area: 3 / 1">Item 4</div>
374+
</div>
375+
```
376+
377+
<image src="images/example-rule-visibility-items-between.png">
378+
379+
Note that `rule-visibility-items` in the examples above is a shorthand
380+
for `column-rule-visibility-items` and `row-rule-visibility-items`,
381+
which can also be set independently:
382+
383+
```css
384+
.container {
385+
display: grid;
386+
grid-template: repeat(3, 100px) / repeat(3, 100px);
387+
gap: 10px;
388+
rule: 1px solid black;
389+
rule-break: intersection;
390+
column-rule-visibility-items: around;
391+
row-rule-visibility-items: between;
392+
}
393+
.item {
394+
background: lightgray;
395+
}
396+
```
397+
```html
398+
<div class="container">
399+
<div class="item" style="grid-area: 1 / 1">Item 1</div>
400+
<div class="item" style="grid-area: 2 / 1">Item 2</div>
401+
<div class="item" style="grid-area: 2 / 2">Item 3</div>
402+
<div class="item" style="grid-area: 3 / 1">Item 4</div>
403+
</div>
404+
```
405+
406+
<image src="images/example-rule-visibility-items-independent.png">
407+
299408
## Key scenarios
300409

301410
### Scenario 1: Horizontal lines between CSS grid rows
@@ -344,6 +453,42 @@ example
344453
<image
345454
src="images/csswg-drafts-issues-2748-issuecomment-446781218-last-example.png">
346455

456+
### Scenario 4: Grid layout with white space in leading columns
457+
458+
https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/1099
459+
460+
```css
461+
.layout {
462+
display: grid;
463+
grid-template-areas:
464+
". . content author"
465+
". . content social";
466+
gap: 5px;
467+
rule: 1px solid gray;
468+
rule-visibility-items: around;
469+
border-top: 1px solid gray;
470+
}
471+
```
472+
473+
<image src="images/explainer-issue-1099.png">
474+
475+
### Scenario 5: Column decorations only between items
476+
477+
https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/1100
478+
479+
```css
480+
.layout {
481+
display: grid;
482+
grid-template-columns: 400px 1000px;
483+
column-gap: 90px;
484+
row-gap: 50px;
485+
column-rule: 1px solid white;
486+
column-rule-visibility-items: between;
487+
}
488+
```
489+
490+
<image src="images/explainer-issue-1100.png">
491+
347492
## Future ideas
348493

349494
### Images
@@ -388,6 +533,19 @@ special keyword on the `*-rule-width`, `*-rule-style`, and `*-rule-color`
388533
properties. See [CSSWG Issue
389534
12326](https://github.com/w3c/csswg-drafts/issues/12326) for further discussion.
390535

536+
### Extensions to decoration visibility controls
537+
538+
Design discussions for `*-rule-visibility-items` also considered companion
539+
`*-rule-visibility-self` properties which would allow the container-wide value to
540+
be overridden on specific items. For example, an author who wants to draw
541+
decorations only around a specific item in the container might set
542+
`rule-visibility-items: none` on the container, and
543+
`rule-visibility-self: around` on the specific item that they want to draw around.
544+
545+
`start-side` and `end-side` have also been suggested as additional values for both
546+
`*-rule-visibility-items` and `*-rule-visibility-self`, to draw decorations only
547+
on one side or the other of items.
548+
391549
### Placement of gap decorations
392550

393551
An author may want to apply different sets of gap decorations to different
@@ -459,42 +617,6 @@ https://github.com/w3c/csswg-drafts/issues/2748#issuecomment-595889781
459617

460618
<image src="images/csswg-drafts-issues-2748-issuecomment-595889781.png">
461619

462-
#### Scenario: Grid layout with white space in leading columns
463-
464-
https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/1099
465-
466-
```css
467-
.layout {
468-
display: grid;
469-
grid-template-areas:
470-
". . content author"
471-
". . content social";
472-
rule-areas: --left 1 / 1 / 2 / -1;
473-
rule: 1px solid gray [--left] none;
474-
rule-outset: 3px;
475-
border-top: 1px solid gray;
476-
}
477-
```
478-
479-
<image src="images/explainer-issue-1099.png">
480-
481-
#### Scenario: Column decorations only in specific gaps
482-
483-
https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/1100
484-
485-
```css
486-
.layout {
487-
display: grid;
488-
grid-template-columns: 400px 1000px;
489-
column-gap: 90px;
490-
row-gap: 50px;
491-
rule-areas: --main 2 / 2 / 2 / -1;
492-
column-rule: [--main] 1px solid white;
493-
}
494-
```
495-
496-
<image src="images/explainer-issue-1100.png">
497-
498620
#### Scenario: Periodic Table omitting decorations from certain areas
499621

500622
https://github.com/w3c/csswg-drafts/issues/12024#issuecomment-3086244002
@@ -596,6 +718,7 @@ Many thanks for valuable feedback and advice from:
596718
- Ahmad Shadeed
597719
- Alison Maher
598720
- Benoît Rouleau
721+
- Elika Etemad
599722
- Ian Kilpatrick
600723
- Josh Tumath
601724
- Kurt Catti-Schmidt
9.52 KB
Loading
9.82 KB
Loading
9.77 KB
Loading
9.72 KB
Loading

0 commit comments

Comments
 (0)