Added dark/light toggle button
This commit is contained in:
parent
34cab08d41
commit
834df78310
|
@ -144,8 +144,8 @@ input[type="radio"] {
|
||||||
float: left;
|
float: left;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
padding-top: 25px;
|
height: 56px;
|
||||||
padding-bottom: 25px;
|
margin-top: 7px;
|
||||||
background-color: var(--bg-nxt);
|
background-color: var(--bg-nxt);
|
||||||
color: var(--fg-nxt);
|
color: var(--fg-nxt);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -179,6 +179,7 @@ input[type="radio"] {
|
||||||
|
|
||||||
#next {
|
#next {
|
||||||
min-width: 100%;
|
min-width: 100%;
|
||||||
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#questions {
|
#questions {
|
||||||
|
@ -194,6 +195,14 @@ input[type="radio"] {
|
||||||
.b {
|
.b {
|
||||||
font-size: small;
|
font-size: small;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.toggle {
|
||||||
|
min-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle_label {
|
||||||
|
min-width: 100%;;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
|
@ -246,3 +255,111 @@ input[type="radio"] {
|
||||||
color: var(--fg-lnk) !important;
|
color: var(--fg-lnk) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#toggle_checkbox {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spacer {
|
||||||
|
width: 10%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle {
|
||||||
|
width: 10%;
|
||||||
|
float: left;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle_label {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
top: 35px;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 80%;
|
||||||
|
height: 56px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background-color: var(--bg-ab);
|
||||||
|
border-radius: 25px;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: 0.3s ease background-color;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#star {
|
||||||
|
position: absolute;
|
||||||
|
top: 13px;
|
||||||
|
left: 13px;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
transform: scale(1);
|
||||||
|
border-radius: 50%;
|
||||||
|
transition: 0.3s ease top, 0.3s ease left, 0.3s ease transform, 0.3s ease background-color;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#star-1 {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#star-2 {
|
||||||
|
position: absolute;
|
||||||
|
transform: rotateZ(36deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.star {
|
||||||
|
top: 0;
|
||||||
|
left: -7px;
|
||||||
|
font-size: 54px;
|
||||||
|
line-height: 28px;
|
||||||
|
color: var(--bg-a);
|
||||||
|
transition: 0.3s ease color;
|
||||||
|
}
|
||||||
|
|
||||||
|
#moon {
|
||||||
|
position: absolute;
|
||||||
|
bottom: -52px;
|
||||||
|
right: 8px;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background-color: var(--bg-a);
|
||||||
|
border-radius: 50%;
|
||||||
|
transition: 0.3s ease bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
#moon:before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: -12px;
|
||||||
|
left: -17px;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background-color: var(--bg-ab);
|
||||||
|
border-radius: 50%;
|
||||||
|
transition: 0.3s ease background-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toggle_checkbox:checked+label {
|
||||||
|
background-color: var(--bg-b);
|
||||||
|
}
|
||||||
|
|
||||||
|
#toggle_checkbox:checked+label #star {
|
||||||
|
top: 0px;
|
||||||
|
left: 640px;
|
||||||
|
transform: scale(0.3);
|
||||||
|
background-color: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#toggle_checkbox:checked+label .star {
|
||||||
|
color: var(--bg-a);
|
||||||
|
}
|
||||||
|
|
||||||
|
#toggle_checkbox:checked+label #moon {
|
||||||
|
bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toggle_checkbox:checked+label #moon:before {
|
||||||
|
background-color: var(--bg-b);
|
||||||
|
}
|
|
@ -1,4 +1,29 @@
|
||||||
:root {
|
:root {
|
||||||
|
--bg: #E7E5E2;
|
||||||
|
--fg: #243233;
|
||||||
|
--br: #243233;
|
||||||
|
--fg-lnk: #8FA3A9;
|
||||||
|
|
||||||
|
--bg-header: #8FA3A9;
|
||||||
|
--fg-header: #243233;
|
||||||
|
--bg-ab: #89A6C0;
|
||||||
|
|
||||||
|
--bg-a: #F7D214;
|
||||||
|
--fg-a: #243233;
|
||||||
|
--bg-b: #243233;
|
||||||
|
--fg-b: #F7D214;
|
||||||
|
|
||||||
|
--bg-ab-chkd: #B3472B;
|
||||||
|
--fg-ab-chkd: #E7E5E2;
|
||||||
|
--br-ab-chkd: #000000;
|
||||||
|
|
||||||
|
--fg-sep: #243233;
|
||||||
|
--fg-que: #243233;
|
||||||
|
--bg-nxt: #8FA3A9;
|
||||||
|
--fg-nxt: #243233;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="dark"] {
|
||||||
--bg: #243233;
|
--bg: #243233;
|
||||||
--fg: #E7E5E2;
|
--fg: #E7E5E2;
|
||||||
--br: #E7E5E2;
|
--br: #E7E5E2;
|
|
@ -1,24 +0,0 @@
|
||||||
:root {
|
|
||||||
--bg: #E7E5E2;
|
|
||||||
--fg: #243233;
|
|
||||||
--br: #243233;
|
|
||||||
--fg-lnk: #8FA3A9;
|
|
||||||
|
|
||||||
--bg-header: #8FA3A9;
|
|
||||||
--fg-header: #243233;
|
|
||||||
--bg-ab: #89A6C0;
|
|
||||||
|
|
||||||
--bg-a: #F7D214;
|
|
||||||
--fg-a: #243233;
|
|
||||||
--bg-b: #243233;
|
|
||||||
--fg-b: #F7D214;
|
|
||||||
|
|
||||||
--bg-ab-chkd: #B3472B;
|
|
||||||
--fg-ab-chkd: #E7E5E2;
|
|
||||||
--br-ab-chkd: #000000;
|
|
||||||
|
|
||||||
--fg-sep: #243233;
|
|
||||||
--fg-que: #243233;
|
|
||||||
--bg-nxt: #8FA3A9;
|
|
||||||
--fg-nxt: #243233;
|
|
||||||
}
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
function initToggle() {
|
||||||
|
const toggleSwitch = document.querySelector('.toggle input[type="checkbox"]');
|
||||||
|
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
|
||||||
|
|
||||||
|
function switchTheme(e) {
|
||||||
|
if (e.target.checked) {
|
||||||
|
document.documentElement.setAttribute('data-theme', 'dark');
|
||||||
|
localStorage.setItem('theme', 'dark'); //add this
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
document.documentElement.setAttribute('data-theme', 'light');
|
||||||
|
localStorage.setItem('theme', 'light'); //add this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleSwitch.addEventListener('change', switchTheme, false);
|
||||||
|
|
||||||
|
if (currentTheme) {
|
||||||
|
document.documentElement.setAttribute('data-theme', currentTheme);
|
||||||
|
|
||||||
|
if (currentTheme === 'dark') {
|
||||||
|
toggleSwitch.checked = true;
|
||||||
|
} else {
|
||||||
|
toggleSwitch.checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelectorAll('.spacer').forEach(function (el) {
|
||||||
|
el.style.display = 'none';
|
||||||
|
});
|
||||||
|
document.querySelectorAll('.toggle').forEach(function (el) {
|
||||||
|
el.style.display = 'unset';
|
||||||
|
});
|
||||||
|
}
|
|
@ -1,14 +1,15 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ lang }}">
|
{%- if theme == "light" %}
|
||||||
|
<html lang="{{ lang }}" data-theme="dark">
|
||||||
|
{%- else %}
|
||||||
|
<html lang="{{ lang }}" data-theme="light">
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>{{ title }}</title>
|
<title>{{ title }}</title>
|
||||||
|
<script src="/js/toggle.js" type="text/javascript"></script>
|
||||||
<link rel="stylesheet" type="text/css" href="/css/base.css?t={{ epoch }}">
|
<link rel="stylesheet" type="text/css" href="/css/base.css?t={{ epoch }}">
|
||||||
{%- if theme == "light" %}
|
<link rel="stylesheet" type="text/css" href="/css/colors.css?t={{ epoch }}">
|
||||||
<link rel="stylesheet" type="text/css" href="/css/light.css?t={{ epoch }}">
|
|
||||||
{%- else %}
|
|
||||||
<link rel="stylesheet" type="text/css" href="/css/dark.css?t={{ epoch }}">
|
|
||||||
{%- endif %}
|
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ url_for('static', filename='apple-touch-icon.png') }}">
|
<link rel="apple-touch-icon" sizes="180x180" href="{{ url_for('static', filename='apple-touch-icon.png') }}">
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='favicon-32x32.png') }}">
|
<link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='favicon-32x32.png') }}">
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='favicon-16x16.png') }}">
|
<link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='favicon-16x16.png') }}">
|
||||||
|
@ -45,13 +46,29 @@
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="questions">{{ questions_prefix }} {{ num_lines }} {{ questions_suffix }}<br><a
|
<div id="questions">{{ questions_prefix }} {{ num_lines }} {{ questions_suffix }}<br><a
|
||||||
href="mailto:{{ mailto }}">Einreichen!</a></div>
|
href="mailto:{{ mailto }}">Einreichen!</a></div>
|
||||||
<div class="separator"> </div>
|
<div class="spacer"> </div>
|
||||||
|
<div class="toggle">
|
||||||
|
{%- if theme == "light" %}
|
||||||
|
<input type="checkbox" id="toggle_checkbox">
|
||||||
|
{%- else %}
|
||||||
|
<input type="checkbox" id="toggle_checkbox" checked="checked">
|
||||||
|
{%- endif %}
|
||||||
|
<label for="toggle_checkbox" class="toggle_label">
|
||||||
|
<div id="star">
|
||||||
|
<div class="star" id="star-1">★</div>
|
||||||
|
<div class="star" id="star-2">★</div>
|
||||||
|
</div>
|
||||||
|
<div id="moon"></div>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<form action="/" method="get">
|
<form action="/" method="get">
|
||||||
<input type="hidden" name="t" value="{{ epoch }}">
|
<input type="hidden" name="t" value="{{ epoch }}">
|
||||||
<button id="next" type="submit">{{ more }}</button>
|
<button id="next" type="submit">{{ more }}</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
initToggle();
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
Loading…
Reference in New Issue