diff --git a/site/plugins/dark-theme-toggle.css b/site/plugins/dark-theme-toggle.css
index 463a79174..2b3bcb506 100644
--- a/site/plugins/dark-theme-toggle.css
+++ b/site/plugins/dark-theme-toggle.css
@@ -1,4 +1,4 @@
-#docsify-dark-theme-toggle {
+.docsify-dark-theme-toggle {
position: absolute;
display: inline-block;
width: 52px;
@@ -13,30 +13,38 @@
.sidebar > .app-name {
position: relative;
}
-.app-name > #docsify-dark-theme-toggle {
+.app-name > .docsify-dark-theme-toggle {
margin-right: 1rem;
margin-top: 0;
right: 0;
left: unset;
+ transition: opacity 250ms ease;
+ opacity: 0.0;
+ pointer-events: none;
}
-#docsify-dark-theme-toggle::before, #docsify-dark-theme-toggle::after {
+.sticky .app-name > .docsify-dark-theme-toggle {
+ opacity: 1.0;
+ pointer-events: auto;
+}
+
+.docsify-dark-theme-toggle::before, .docsify-dark-theme-toggle::after {
position: absolute;
top: 0.1em;
font-size: 16px;
transition: opacity 0.3s;
}
-#docsify-dark-theme-toggle::before {
+.docsify-dark-theme-toggle::before {
content: "🌙";
left: 0.1em;
opacity: 0;
z-index: 1;
}
-#docsify-dark-theme-toggle::after {
+.docsify-dark-theme-toggle::after {
content: "🌞";
right: 0.1em;
opacity: 1;
}
-#docsify-dark-theme-toggle > span {
+.docsify-dark-theme-toggle > span {
position: absolute;
top: 0;
left: 0;
@@ -46,7 +54,7 @@
border-radius: 28px;
transition: background-color 0.3s;
}
-#docsify-dark-theme-toggle > span::before {
+.docsify-dark-theme-toggle > span::before {
content: "";
position: absolute;
height: 22px;
@@ -58,15 +66,15 @@
border-radius: 50%;
transition: transform 0.3s;
}
-.dark #docsify-dark-theme-toggle::after {
+.dark .docsify-dark-theme-toggle::after {
opacity: 0;
}
-.dark #docsify-dark-theme-toggle::before {
+.dark .docsify-dark-theme-toggle::before {
opacity: 1;
}
-.dark #docsify-dark-theme-toggle > span {
+.dark .docsify-dark-theme-toggle > span {
background-color: var(--theme-color, #ea6f5a);
}
-.dark #docsify-dark-theme-toggle > span::before {
+.dark .docsify-dark-theme-toggle > span::before {
transform: translateX(24px);
-}
\ No newline at end of file
+}
diff --git a/site/plugins/dark-theme-toggle.js b/site/plugins/dark-theme-toggle.js
index 13c2e68e9..e6f74cfff 100644
--- a/site/plugins/dark-theme-toggle.js
+++ b/site/plugins/dark-theme-toggle.js
@@ -3,7 +3,6 @@
const TOGGLE_ID = "docsify-dark-theme-toggle",
dom = Docsify.dom,
darkThemeStyleSheet = dom.find('link[href$="dark.css"]'),
- toggleEl = dom.create("div", ""),
applyTheme = (swap = false) => {
const isDark = Boolean(swap ^ (localStorage[TOGGLE_ID] == "true"));
localStorage[TOGGLE_ID] = isDark;
@@ -11,10 +10,18 @@
dom.toggleClass(dom.body, isDark ? "add" : "remove", "dark");
};
localStorage[TOGGLE_ID] ??= matchMedia("(prefers-color-scheme: dark)").matches;
- toggleEl.id = TOGGLE_ID;
- dom.on(toggleEl, "click", () => applyTheme(true));
hook.init(applyTheme);
- hook.doneEach(() => dom.before(dom.find(".cover.show, .sidebar > .app-name"), toggleEl));
+ hook.doneEach(() => {
+ dom.findAll(".cover.show, .sidebar > .app-name").forEach((target) => {
+ let toggleEl = dom.find(target, `.${TOGGLE_ID}`);
+ if (null == toggleEl) {
+ toggleEl = dom.create("div", "");
+ toggleEl.className = TOGGLE_ID;
+ dom.on(toggleEl, "click", () => applyTheme(true));
+ }
+ dom.before(target, toggleEl);
+ });
+ });
};
$docsify ??= {};
$docsify.plugins = [...($docsify.plugins ?? []), darkThemeTogglePlugin];