content/assets/stylesheets/toc.scss (144 lines of code) (raw):
@use 'variables' as *;
@use 'utilities' as *;
$base-nav-link-padding: 0.75rem;
$sm-nav-link-padding: 0.25rem;
$nav-link-font-size: 0.875rem;
@mixin nav-link-toc-level($i) {
padding-left: $base-nav-link-padding * ($i + 0.75);
padding-top: 0;
line-height: 1rem;
}
@mixin toc-nav-link {
font-size: $nav-link-font-size;
color: $toc-link-color;
border-radius: 0;
border-left: 3px solid $gds-indigo-100;
border-bottom: 0;
&:hover {
color: $link-color-nav-hover;
text-decoration: underline;
background-color: transparent;
box-shadow: none;
border-bottom: 0;
}
&.active {
color: $link-color-nav;
background-color: transparent;
border-color: $gds-indigo-800;
/* stylelint-disable-next-line selector-list-comma-newline-after */
&:hover, &:only-child {
color: $link-color-nav-hover;
background-color: transparent;
}
}
}
// ToC styles
.table-of-contents {
padding: 0.5rem 1rem 0;
li {
list-style: none;
}
.nav-link {
@include toc-nav-link;
}
}
// ToC before JavaScript loads
#markdown-toc {
position: absolute;
top: $header-height;
right: 0;
padding-top: calc(4.75rem + 1.375rem * 1.125);
padding-left: 3rem;
margin: 0;
transform: translateX(100%);
overflow-x: hidden;
overflow-y: scroll;
width: calc(25vw - 1rem); // max scrollbar size
code {
all: revert;
font: inherit;
}
a {
display: block;
padding: 0 1rem 0.5rem;
line-height: 1rem;
@include toc-nav-link;
}
ul,
li {
list-style: none;
margin: 0;
padding: 0;
line-height: 1;
}
}
.markdown-toc {
top: $header-height;
@media(min-width: $bp-xl) {
padding-left: 1rem;
margin-bottom: 1.5rem;
overflow-y: scroll;
height: 100vh;
}
@media(max-width: calc($bp-xl - 1px)) {
margin-top: 6rem;
}
}
.nav-pills {
flex-wrap: nowrap;
}
// NOTE: This only allows for 10 levels.
// This should be acceptable since levels are determined by the `<h1-6>` which is less
// than 10 anyways...
@for $i from 0 to 10 {
.nav-link.toc-level-#{$i} {
@include nav-link-toc-level($i);
}
#markdown-toc #{repeat-str('ul', $i)} a {
@include nav-link-toc-level($i);
}
}
@media(max-width: calc($bp-xl - 1px)) {
.doc-nav {
margin-left: -20px;
margin-top: -55px;
position: relative;
z-index: 1;
}
.table-of-contents {
padding: 0 1rem;
font-size: 0.875rem;
.nav-link {
border-left: 0;
padding: $sm-nav-link-padding;
}
h4 {
font-size: $nav-link-font-size;
}
}
.sm-collapsing {
height: 0;
overflow: hidden;
transition: height 0.2s ease;
}
.sm-collapsed {
display: none;
}
.toc-lg {
display: none;
}
.toc-sm {
display: block;
}
}
// wide enough to show toc but not quick nav
@media(min-width: $bp-xl) {
.header {
top: 0;
left: 0;
}
.doc-nav {
&.toc-no-breadcrumbs {
padding-top: 6px;
}
}
.toc-lg {
display: block;
}
.toc-sm {
display: none;
}
}