Skip to content

Commit

Permalink
Use calc-size in .active > .nav-child
Browse files Browse the repository at this point in the history
  • Loading branch information
stevenjoezhang committed Nov 21, 2024
1 parent dcd7218 commit 7d25f67
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 22 deletions.
7 changes: 2 additions & 5 deletions source/css/_common/outline/sidebar/sidebar-toc.styl
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,16 @@ if (hexo-config('toc.enable')) {
.nav {
if (not hexo-config('toc.expand_all')) {
.nav-child {
--height: 0;
height: 0;
opacity: 0;
overflow: hidden;
transition-property: height, opacity, visibility;
transition-property: height, opacity;
transition: $transition-ease;
visibility: hidden;
}

.active > .nav-child {
height: var(--height, auto);
height: calc-size(auto, size);
opacity: 1;
visibility: unset;
}
}

Expand Down
18 changes: 1 addition & 17 deletions source/js/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -352,24 +352,16 @@ NexT.utils = {
const target = navItemList[index];
if (!target || target.classList.contains('active-current')) return;

const singleHeight = navItemList[navItemList.length - 1].offsetHeight;

nav.querySelectorAll('.active').forEach(navItem => {
navItem.classList.remove('active', 'active-current');
});
target.classList.add('active', 'active-current');

let activateEle = target.querySelector('.nav-child') || target.parentElement;
let navChildHeight = 0;

while (nav.contains(activateEle)) {
if (activateEle.classList.contains('nav-item')) {
activateEle.classList.add('active');
} else { // .nav-child or .nav
// scrollHeight isn't reliable for transitioning child items.
// The last nav-item in a list has a margin-bottom of 5px.
navChildHeight += (singleHeight * activateEle.childElementCount) + 5;
activateEle.style.setProperty('--height', `${navChildHeight}px`);
}
activateEle = activateEle.parentElement;
}
Expand Down Expand Up @@ -408,16 +400,8 @@ NexT.utils = {
const tocPanel = panelContainer.firstElementChild;
const overviewPanel = panelContainer.lastElementChild;

let postTOCHeight = tocPanel.scrollHeight;
// For TOC activation, try to use the animated TOC height
if (index === 0) {
const nav = tocPanel.querySelector('.nav');
if (nav) {
postTOCHeight = parseInt(nav.style.getPropertyValue('--height'), 10);
}
}
const panelHeights = [
postTOCHeight,
tocPanel.scrollHeight,
overviewPanel.scrollHeight
];
panelContainer.style.setProperty('--inactive-panel-height', `${panelHeights[1 - index]}px`);
Expand Down

0 comments on commit 7d25f67

Please sign in to comment.