src/layout/layout.scss (133 lines of code) (raw):
// Layout component
.Layout {
display: grid;
--Layout-sidebar-width: #{map-get($sidebar-width, 'sm')};
--Layout-gutter: 16px;
@media (max-width: calc(#{$width-sm} - 0.02px)) {
@include flow-as-row;
}
&.Layout--flowRow-until-md {
@media (max-width: calc(#{$width-md} - 0.02px)) {
@include flow-as-row;
}
}
&.Layout--flowRow-until-lg {
@media (max-width: calc(#{$width-lg} - 0.02px)) {
@include flow-as-row;
}
}
// Flow as column
grid-auto-flow: column;
grid-template-columns: auto 0 minmax(0, calc(100% - var(--Layout-sidebar-width) - var(--Layout-gutter))); // sidebar column, separator, main column
grid-gap: var(--Layout-gutter);
.Layout-sidebar {
grid-column: 1;
}
.Layout-divider {
display: none;
}
.Layout-main {
grid-column: 2 / span 2;
}
// Gutter spacing
@include breakpoint(lg) {
--Layout-gutter: 24px;
}
&.Layout--gutter-none {
// stylelint-disable-next-line length-zero-no-unit
--Layout-gutter: 0px;
}
&.Layout--gutter-condensed {
--Layout-gutter: 16px;
}
&.Layout--gutter-spacious {
@include breakpoint(lg) {
--Layout-gutter: 32px;
}
@include breakpoint(xl) {
--Layout-gutter: 40px;
}
}
// Sidebar width
@each $breakpoint in map-keys($sidebar-width) {
@include breakpoint($breakpoint) {
--Layout-sidebar-width: #{map-get($sidebar-width, $breakpoint)};
}
}
&.Layout--sidebar-narrow {
@each $breakpoint in map-keys($sidebar-narrow-width) {
@include breakpoint($breakpoint) {
--Layout-sidebar-width: #{map-get($sidebar-narrow-width, $breakpoint)};
}
}
}
&.Layout--sidebar-wide {
@each $breakpoint in map-keys($sidebar-wide-width) {
@include breakpoint($breakpoint) {
--Layout-sidebar-width: #{map-get($sidebar-wide-width, $breakpoint)};
}
}
}
// Sidebar position
&.Layout--sidebarPosition-start {
.Layout-sidebar {
grid-column: 1;
}
.Layout-main {
grid-column: 2 / span 2;
}
}
&.Layout--sidebarPosition-end {
grid-template-columns: minmax(0, calc(100% - var(--Layout-sidebar-width) - var(--Layout-gutter))) 0 auto;
.Layout-main {
grid-column: 1;
}
.Layout-sidebar {
grid-column: 2 / span 2;
}
}
// Sidebar divider
&.Layout--divided {
.Layout-divider {
display: block;
grid-column: 2;
width: 1px;
// stylelint-disable-next-line primer/spacing
margin-right: -1px;
background: var(--color-border-default);
}
.Layout-main {
grid-column: 3 / span 1;
}
&.Layout--sidebarPosition-end {
.Layout-sidebar {
grid-column: 3 / span 1;
}
.Layout-main {
grid-column: 1;
}
}
}
}
.Layout-divider {
display: none;
width: 1px;
}
.Layout-sidebar {
width: var(--Layout-sidebar-width);
}
.Layout-main {
min-width: 0;
// Centered main column
// FIXME: right-aligned sidebar
.Layout-main-centered-md,
.Layout-main-centered-lg,
.Layout-main-centered-xl {
margin-right: auto;
margin-left: auto;
> .container-md,
> .container-lg,
> .container-xl {
margin-left: 0;
}
}
.Layout-main-centered-md {
max-width: calc(#{$container-md} + var(--Layout-sidebar-width) + var(--Layout-gutter));
}
.Layout-main-centered-lg {
max-width: calc(#{$container-lg} + var(--Layout-sidebar-width) + var(--Layout-gutter));
}
.Layout-main-centered-xl {
max-width: calc(#{$container-xl} + var(--Layout-sidebar-width) + var(--Layout-gutter));
}
}