fix(docs): fix nav alignment by grouping label+link pairs as flex units
This commit is contained in:
+41
-10
@@ -188,8 +188,6 @@ li { margin: 0.35em 0; }
|
||||
|
||||
/* ── Chunk navigation bar (prev / up / next) ───────────────── */
|
||||
nav:not(#TOC):not([role="doc-toc"]) {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 8px;
|
||||
@@ -201,16 +199,19 @@ nav:not(#TOC):not([role="doc-toc"]) p {
|
||||
margin: 0;
|
||||
padding: 0.65em 1.2em;
|
||||
display: flex;
|
||||
gap: 1.75em;
|
||||
gap: 0.4em 1.75em;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
nav:not(#TOC):not([role="doc-toc"]) a {
|
||||
color: var(--blue);
|
||||
/* JS wraps each "Label: <a>" pair in .nav-item so they flex as a unit */
|
||||
.nav-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.3em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
nav:not(#TOC):not([role="doc-toc"]) a:hover { color: var(--lavender); }
|
||||
.nav-item a { color: var(--blue); }
|
||||
.nav-item a:hover { color: var(--lavender); }
|
||||
|
||||
/* ── Table of contents panel ───────────────────────────────── */
|
||||
nav#TOC, nav[role="doc-toc"] {
|
||||
@@ -257,14 +258,44 @@ nav#TOC a:hover, nav[role="doc-toc"] a:hover {
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
/* Hide the ToC on every page except index.html */
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var p = location.pathname;
|
||||
var onIndex = p === '/' || p === '' || /\/index\.html(\?.*)?$/.test(p);
|
||||
/* ── Hide ToC on every page except index.html ───────────── */
|
||||
var path = location.pathname;
|
||||
var onIndex = path === '/' || path === '' || /\/index\.html(\?.*)?$/.test(path);
|
||||
if (!onIndex) {
|
||||
var toc = document.getElementById('TOC') ||
|
||||
document.querySelector('[role="doc-toc"]');
|
||||
if (toc) toc.remove();
|
||||
}
|
||||
|
||||
/* ── Wrap each "Label: <a>" pair in a .nav-item span ───────
|
||||
Pandoc emits label text nodes and anchors as siblings;
|
||||
flex sees them as separate items, causing labels to split
|
||||
from their links when wrapping. Grouping them in a span
|
||||
keeps each label+link as a single flex unit. */
|
||||
document.querySelectorAll('nav:not(#TOC):not([role="doc-toc"])').forEach(function (nav) {
|
||||
var p = nav.querySelector('p');
|
||||
if (!p) return;
|
||||
var children = Array.from(p.childNodes);
|
||||
var pairs = [];
|
||||
for (var i = 0; i + 1 < children.length; i++) {
|
||||
var cur = children[i];
|
||||
var nxt = children[i + 1];
|
||||
if (cur.nodeType === Node.TEXT_NODE &&
|
||||
/[A-Z][a-z]*:\s*/.test(cur.textContent) &&
|
||||
nxt.nodeType === Node.ELEMENT_NODE &&
|
||||
nxt.tagName === 'A') {
|
||||
pairs.push([cur, nxt]);
|
||||
i++; // skip the anchor on the next iteration
|
||||
}
|
||||
}
|
||||
pairs.forEach(function (pair) {
|
||||
var span = document.createElement('span');
|
||||
span.className = 'nav-item';
|
||||
p.insertBefore(span, pair[0]);
|
||||
span.appendChild(pair[0]);
|
||||
span.appendChild(pair[1]);
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user