【发布时间】:2020-12-05 10:45:35
【问题描述】:
我已经用 HTML 和 外部(静态)CSS 样式表构建了一个烧瓶应用程序。该应用程序有一个复选框,该复选框控制哪个 CSS 样式表在 JavaScript 中处于活动状态。两种不同的外部样式表的目的是允许用户在浅色(基本)和深色模式之间切换。
上述功能按预期工作。但是,当呈现新模板时,会加载包含<header> 中初始 CSS 样式表的 base.html 文件。
当新模板在烧瓶中呈现时,如何保持 CSS 样式表的变化?
示例
对于每个呈现的 html 页面,base.html 都会被扩展。此文件包含 base-theme.css 文件作为初始 CSS 样式表。
base.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Application Name</title>
<meta name="description" content="Application Name">
<link rel="favorite icon" href="{{ url_for('static', filename='favicon.ico') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/base-theme.css') }}" id="stylesheet_toggle">
<script type="text/javascript" src="{{ url_for('static', filename='js/switch_mode.js') }}"></script>
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
选中复选框 (topnav_right_mode_toggle) 时,CSS 样式表会使用 JavaScript 从 base-theme.css 更改为 dark-theme.css:
switch_mode.js
window.onload = function () {
const toggle = document.getElementById("topnav_right_mode_toggle");
const theme = document.getElementById("stylesheet_toggle");
toggle.addEventListener("click", function () {
if (theme.getAttribute("href") == "/static/css/base-theme.css") {
theme.href = "/static/css/dark-theme.css";
} else {
theme.href = "/static/css/base-theme.css";
}
});
}
到目前为止,一切都很好......
现在触发了另一个端点,并为此端点呈现了另一个 html 文件。此 html 文件扩展了 base.html,并且因为 base.html 包含 CSS 样式表:base-theme.css,所以对样式表:dark-theme.css 的更改已撤消。
当另一个 html 文件被渲染时,我如何记住样式表的变化?
【问题讨论】:
-
如果问题不清楚请告诉我...