blog/themes/next/source/css/_common/outline/sidebar/sidebar-nav.styl

130 lines
3.2 KiB
Stylus

// Sidebar Navigation
.sidebar-nav {
font-size: $font-size-small;
height: 0;
margin: 0;
overflow: hidden;
padding-left: 0;
pointer-events: none;
transition: $transition-ease;
transition-property: height, visibility;
visibility: hidden;
.sidebar-nav-active & {
height: "calc(%sem + 1px)" % $line-height-base;
pointer-events: unset;
visibility: unset;
}
li {
border-bottom: 1px solid transparent;
color: $sidebar-nav-color;
cursor: pointer;
display: inline-block;
transition: $transition-ease;
transition-property: border-bottom-color, color;
&.sidebar-nav-overview {
margin-left: 10px;
}
&:hover {
color: $sidebar-nav-hover-color;
}
}
}
.sidebar-toc-active .sidebar-nav-toc, .sidebar-overview-active .sidebar-nav-overview {
border-bottom-color: $sidebar-highlight;
color: $sidebar-highlight;
transition-delay: $transition-duration;
&:hover {
color: $sidebar-highlight;
}
}
// For TOC/Overview scrolling
.sidebar-panel-container {
align-items: start;
display: grid;
flex: 1;
overflow-x: hidden;
overflow-y: auto;
padding-top: 0;
transition: padding-top $transition-ease;
.sidebar-nav-active & {
padding-top: 20px;
}
}
.sidebar-panel {
animation: deactivate-sidebar-panel $transition-duration ease-in-out;
grid-area: 1 / 1;
height: 0;
opacity: 0;
overflow: hidden;
pointer-events: none;
transform: translateY(0);
transition: $transition-ease;
transition-delay: 0s;
transition-property: opacity, transform, visibility;
visibility: hidden;
// Apply transform to both panels when sidebar nav is active,
// to the TOC panel when switching between Overview and TOC regardless of
// whether the sidebar nav is active
.sidebar-nav-active &,
.sidebar-overview-active &.post-toc-wrap {
transform: translateY(-20px);
}
// Delay TOC transform transition when switching from TOC to Overview and
// deactivating the sidebar nav at the same time, to prevent the TOC panel
// from moving too fast
// https://github.com/next-theme/hexo-theme-next/pull/323#issuecomment-1420780965
.sidebar-overview-active:not(.sidebar-nav-active) &.post-toc-wrap {
transition-delay: 0s, $transition-duration, 0s;
}
.sidebar-overview-active &.site-overview-wrap,
.sidebar-toc-active &.post-toc-wrap {
animation-name: activate-sidebar-panel;
height: auto;
opacity: 1;
pointer-events: unset;
transform: translateY(0);
// The visibility delay is intentionally set to 0s to accommodate
// the visibility change on initial page load.
transition-delay: $transition-duration, $transition-duration, 0s;
visibility: unset;
}
&.site-overview-wrap {
// Flexbox layout makes it possible to reorder the child
// elements of .site-overview-wrap through the `order` CSS property
flex-column();
gap: 10px;
justify-content: flex-start; // TODO: Optimize the duplicate with flex-column()
}
}
@keyframes deactivate-sidebar-panel {
from {
height: var(--inactive-panel-height, 0);
}
to {
height: var(--active-panel-height, 0);
}
}
@keyframes activate-sidebar-panel {
from {
height: var(--inactive-panel-height, auto);
}
to {
height: var(--active-panel-height, auto);
}
}