Skip to content

Commit 0310677

Browse files
committed
Layout: Restructured tri-layout for sidebar control
Restructured tri-layout grid system, so the sidebars are contained in their own child grid system, mimicking the parent grid, so we can treat them as part of the same parent scroll container at smaller screen sizes for consistent scroll/sticky behavior. Tested on Firefox, Chromium, Gnome Web and Safari (MacOS). For #4394 Changes made during review of #4562
1 parent 588ed78 commit 0310677

File tree

2 files changed

+93
-71
lines changed

2 files changed

+93
-71
lines changed

resources/sass/_layout.scss

Lines changed: 79 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -354,59 +354,84 @@ body.flexbox {
354354
grid-template-columns: 1fr 4fr 1fr;
355355
grid-template-areas: "a b c";
356356
grid-column-gap: $-xl;
357-
.tri-layout-right {
358-
grid-area: c;
359-
min-width: 0;
360-
}
361-
.tri-layout-left {
362-
grid-area: a;
363-
min-width: 0;
364-
}
365-
.tri-layout-middle {
366-
grid-area: b;
367-
padding-top: $-m;
368-
min-width: 0;
369-
}
357+
position: relative;
370358
}
371-
@include smaller-than($xxl) {
372-
.tri-layout-container {
373-
grid-template-areas: "c b b"
374-
"a b b"
375-
". b b";
376-
grid-template-columns: 1fr 3fr;
377-
grid-template-rows: min-content min-content 1fr;
378-
padding-inline-end: $-l;
379-
}
359+
.tri-layout-sides {
360+
grid-column-start: a;
361+
grid-column-end: c;
362+
grid-row: 1;
363+
min-width: 0;
364+
z-index: 4;
380365
}
381-
@include between($xxl, $xxxl) {
382-
.tri-layout-container {
383-
grid-template-columns: 1fr calc(940px + (2 * $-m)) 1fr;
384-
grid-column-gap: $-s;
385-
margin-inline-start: $-m;
386-
margin-inline-end: $-m;
387-
}
366+
.tri-layout-sides-content {
367+
display: grid;
368+
grid-template-areas: "a b c";
369+
grid-template-columns: 1fr 4fr 1fr;
370+
height: 100%;
388371
}
389-
@include between($l, $xxl) {
390-
.tri-layout-left {
391-
position: sticky;
392-
top: $-m;
393-
}
394-
.tri-layout-left-contents {
372+
.tri-layout-middle {
373+
grid-area: b;
374+
padding-top: $-m;
375+
min-width: 0;
376+
z-index: 5;
377+
}
378+
.tri-layout-right {
379+
grid-area: c;
380+
min-width: 0;
381+
}
382+
.tri-layout-left {
383+
grid-area: a;
384+
min-width: 0;
385+
}
386+
387+
@include larger-than($xxl) {
388+
.tri-layout-left-contents, .tri-layout-right-contents {
389+
padding: $-xl $-m;
395390
position: sticky;
396391
top: 0;
397392
max-height: 100vh;
393+
min-height: 50vh;
398394
overflow-y: scroll;
395+
overflow-x: hidden;
399396
height: 100%;
400397
scrollbar-width: none;
401398
-ms-overflow-style: none;
402399
&::-webkit-scrollbar {
403400
display: none;
404401
}
405402
}
403+
.tri-layout-middle-contents {
404+
max-width: 940px;
405+
margin: 0 auto;
406+
}
406407
}
407-
@include larger-than($xxl) {
408-
.tri-layout-left-contents, .tri-layout-right-contents {
409-
padding: $-xl $-m;
408+
@include between($xxl, $xxxl) {
409+
.tri-layout-sides-content, .tri-layout-container {
410+
grid-template-columns: 1fr calc(940px + (2 * $-m)) 1fr;
411+
}
412+
.tri-layout-container {
413+
grid-column-gap: $-s;
414+
margin-inline-start: $-m;
415+
margin-inline-end: $-m;
416+
}
417+
}
418+
@include smaller-than($xxl) {
419+
.tri-layout-container {
420+
grid-template-areas: "a b b";
421+
grid-template-columns: 1fr 3fr;
422+
grid-template-rows: min-content min-content 1fr;
423+
padding-inline-end: $-l;
424+
}
425+
.tri-layout-sides {
426+
grid-column-start: a;
427+
grid-column-end: a;
428+
}
429+
.tri-layout-sides-content {
430+
display: block;
431+
}
432+
}
433+
@include between($l, $xxl) {
434+
.tri-layout-sides-content {
410435
position: sticky;
411436
top: 0;
412437
max-height: 100vh;
@@ -420,31 +445,39 @@ body.flexbox {
420445
display: none;
421446
}
422447
}
423-
.tri-layout-middle-contents {
424-
max-width: 940px;
425-
margin: 0 auto;
448+
}
449+
@include larger-than($l) {
450+
.tri-layout-mobile-tabs {
451+
display: none;
452+
}
453+
.tri-layout-left-contents > *, .tri-layout-right-contents > * {
454+
@include lightDark(opacity, 0.6, 0.75);
455+
transition: opacity ease-in-out 120ms;
456+
&:hover, &:focus-within {
457+
opacity: 1 !important;
458+
}
459+
@media (prefers-contrast: more) {
460+
opacity: 1 !important;
461+
}
426462
}
427463
}
428-
429464
@include smaller-than($l) {
430465
.tri-layout-container {
431466
grid-template-areas: none;
432467
grid-template-columns: 1fr;
433468
grid-column-gap: 0;
434469
padding-inline-end: $-xs;
435470
padding-inline-start: $-xs;
436-
.tri-layout-left-contents, .tri-layout-right-contents {
471+
.tri-layout-sides {
437472
padding-inline-start: $-m;
438473
padding-inline-end: $-m;
474+
grid-column: 1/1;
439475
}
440476
.tri-layout-left > *, .tri-layout-right > * {
441477
display: none;
442478
pointer-events: none;
443479
}
444480
.tri-layout-left, .tri-layout-right {
445-
grid-area: none;
446-
grid-column: 1/1;
447-
grid-row: 1;
448481
padding-top: 0 !important;
449482
}
450483
.tri-layout-middle {
@@ -470,21 +503,6 @@ body.flexbox {
470503
}
471504
}
472505
}
473-
@include larger-than($l) {
474-
.tri-layout-mobile-tabs {
475-
display: none;
476-
}
477-
.tri-layout-left-contents > *, .tri-layout-right-contents > * {
478-
@include lightDark(opacity, 0.6, 0.75);
479-
transition: opacity ease-in-out 120ms;
480-
&:hover, &:focus-within {
481-
opacity: 1 !important;
482-
}
483-
@media (prefers-contrast: more) {
484-
opacity: 1 !important;
485-
}
486-
}
487-
}
488506

489507
@include smaller-than($m) {
490508
.tri-layout-container {

resources/views/layouts/tri.blade.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,27 @@ class="tri-layout-mobile-tab px-m py-m text-link active">
2727

2828
<div refs="tri-layout@container" class="tri-layout-container" @yield('container-attrs') >
2929

30-
<div class="tri-layout-left print-hidden" id="sidebar">
31-
<aside class="tri-layout-left-contents">
32-
@yield('left')
33-
</aside>
30+
<div class="tri-layout-sides print-hidden">
31+
<div class="tri-layout-sides-content">
32+
<div class="tri-layout-right print-hidden">
33+
<aside class="tri-layout-right-contents">
34+
@yield('right')
35+
</aside>
36+
</div>
37+
38+
<div class="tri-layout-left print-hidden" id="sidebar">
39+
<aside class="tri-layout-left-contents">
40+
@yield('left')
41+
</aside>
42+
</div>
43+
</div>
3444
</div>
3545

3646
<div class="@yield('body-wrap-classes') tri-layout-middle">
3747
<div id="main-content" class="tri-layout-middle-contents">
3848
@yield('body')
3949
</div>
4050
</div>
41-
42-
<div class="tri-layout-right print-hidden">
43-
<aside class="tri-layout-right-contents">
44-
@yield('right')
45-
</aside>
46-
</div>
4751
</div>
4852

4953
@stop

0 commit comments

Comments
 (0)