navbar_lightmode #2

Merged
Ghost merged 2 commits from navbar_lightmode into main 2023-11-09 19:16:06 +00:00

View File

@ -1,56 +1,64 @@
<template> <template>
<aside class="navbar"> <aside :class="[darkMode ? 'navbar-dark' : 'navbar-light', isExpanded ? 'is-expanded' : 'is-not-expanded']" >
<div class="toggle"> <div class="toggle">
<div class="icon" id="back-icon"> <div v-if="isExpanded" :class="{ 'darkStylesIcon': darkMode, 'lightStylesIcon': !darkMode }" id="back-icon">
<img loading="lazy" src="../icons/Back-Icon.svg"/> <img :style="darkMode ? darkStylesImg : lightStylesImg" loading="lazy" src="../icons/Back-Icon.svg" />
</div>
<div class="icon" id="indicator-icon">
<img loading="lazy" src="../icons/navbar-icons/Nav-Indicator-Icon-Opened.svg"/>
</div>
</div> </div>
<div class="menus"> <div :class="{ 'darkStylesIcon': darkMode, 'lightStylesIcon': !darkMode }" id="indicator-icon" @click="toggleSidebar">
<nav id="home-menu"> <img :style="[darkMode ? darkStylesImg : lightStylesImg ]"
<button id="home-button"> loading="lazy"
<div class="icon" id="home-icon"> src="../icons/navbar-icons/Nav-Indicator-Icon-Opened.svg" />
<img loading="lazy" src="../icons/navbar-icons/Home-Icon.svg"/>
</div>
<pre class="label">Home</pre>
</button>
</nav>
<nav id="site-menu">
<button id="checklists-button">
<div class="icon" id="checklists-icon">
<img loading="lazy" src="../icons/navbar-icons/Checklists-Icon.svg"/>
</div>
<pre class="label">Checklists</pre>
</button>
<button id="assets-button">
<div class="icon" id="assets-icon">
<img loading="lazy" src="../icons/navbar-icons/Assets-Icon.svg"/>
</div>
<pre class="label">Config Items</pre>
</button>
<button id="solutions-button">
<div class="icon" id="solutions-icon">
<img loading="lazy" src="../icons/navbar-icons/Solutions-Icon.svg"/>
</div>
<pre class="label">Solutions</pre>
</button>
<button id="accounting-button">
<div class="icon" id="accounting-icon">
<img loading="lazy" src="../icons/navbar-icons/Accounting-Icon.svg"/>
</div>
<pre class="label">Accounting</pre>
</button>
<button id="clients-button">
<div class="icon" id="clients-icon">
<img loading="lazy" src="../icons/navbar-icons/Clients-Icon.svg"/>
</div>
<pre class="label">Clients</pre>
</button>
</nav>
</div> </div>
</aside> </div>
<div class="menus">
<nav :class="{ 'dark-home-menu': darkMode, 'light-home-menu': !darkMode }" id="home-menu">
<button :class="{ 'dark-menu': darkMode, 'light-menu': !darkMode }" id="home-button">
<div class="icon" id="home-icon">
<img :style="darkMode ? darkStylesImg : lightStylesImg" loading="lazy"
src="../icons/navbar-icons/Home-Icon.svg" />
</div>
<pre v-if="isExpanded" :style="darkMode ? darkStylesLabel : lightStylesLabel" class="label">Home</pre>
</button>
</nav>
<nav id="site-menu">
<button :class="{ 'dark-menu': darkMode, 'light-menu': !darkMode }" id="checklists-button">
<div class="icon" id="checklists-icon">
<img :style="darkMode ? darkStylesImg : lightStylesImg" loading="lazy"
src="../icons/navbar-icons/Checklists-Icon.svg" />
</div>
<pre v-if="isExpanded" :style="darkMode ? darkStylesLabel : lightStylesLabel" class="label">Checklists</pre>
</button>
<button :class="{ 'dark-menu': darkMode, 'light-menu': !darkMode }" id="assets-button">
<div class="icon" id="assets-icon">
<img :style="darkMode ? darkStylesImg : lightStylesImg" loading="lazy"
src="../icons/navbar-icons/Assets-Icon.svg" />
</div>
<pre v-if="isExpanded" :style="darkMode ? darkStylesLabel : lightStylesLabel" class="label">Config Items</pre>
</button>
<button :class="{ 'dark-menu': darkMode, 'light-menu': !darkMode }" id="solutions-button">
<div class="icon" id="solutions-icon">
<img :style="darkMode ? darkStylesImg : lightStylesImg" loading="lazy"
src="../icons/navbar-icons/Solutions-Icon.svg" />
</div>
<pre v-if="isExpanded" :style="darkMode ? darkStylesLabel : lightStylesLabel" class="label">Solutions</pre>
</button>
<button :class="{ 'dark-menu': darkMode, 'light-menu': !darkMode }" id="accounting-button">
<div class="icon" id="accounting-icon">
<img :style="darkMode ? darkStylesImg : lightStylesImg" loading="lazy"
src="../icons/navbar-icons/Accounting-Icon.svg" />
</div>
<pre v-if="isExpanded" :style="darkMode ? darkStylesLabel : lightStylesLabel" class="label">Accounting</pre>
</button>
<button :class="{ 'dark-menu': darkMode, 'light-menu': !darkMode }" id="clients-button">
<div class="icon" id="clients-icon">
<img :style="darkMode ? darkStylesImg : lightStylesImg" loading="lazy"
src="../icons/navbar-icons/Clients-Icon.svg" />
</div>
<pre v-if="isExpanded" :style="darkMode ? darkStylesLabel : lightStylesLabel" class="label">Clients</pre>
</button>
</nav>
</div>
</aside>
</template> </template>
@ -58,7 +66,30 @@
<script> <script>
export default { export default {
name: "Navigationbar", name: "Navigationbar",
data() {
return {
darkMode: false,
isExpanded: true,
darkStylesImg: {
filter: 'invert(100%)',
},
lightStylesImg: {
filter: 'none',
},
darkStylesLabel: {
color: '#fff',
},
lightStylesLabel: {
color: '#000',
},
};
},
methods: {
toggleSidebar() {
this.isExpanded = !this.isExpanded;
}
}
} }
</script> </script>
@ -66,114 +97,203 @@ export default {
<style scoped> <style scoped>
* { * {
box-sizing: border-box; box-sizing: border-box;
} }
.navbar { aside {
display: flex; transition: 0.2s ease-out;
flex-direction: column; display: flex;
align-items: stretch; flex-direction: column;
justify-content: center; width: calc(2.5rem + 2.5rem);
width: 200px; overflow: hidden;
height: fit-content; }
min-width: 200px;
border-radius: 10px; aside.is-expanded {
gap: 10px; width: 238px;
padding: 15px; }
margin: 0;
box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25); .is-expanded .label {
background-color: #2c2c2c; opacity: 1;
} transition: 0.3s ease-out;
}
.is-not-expanded .darkStylesIcon {
transform: rotate(180deg);
}
.is-not-expanded .lightStylesIcon {
transform: rotate(180deg);
}
.toggle { .navbar-dark {
display: flex; display: flex;
flex-direction: row; flex-direction: column;
align-items: center; align-items: stretch;
justify-content: space-between; justify-content: center;
height: 40px; height: fit-content;
} border-radius: 10px;
gap: 10px;
padding: 15px;
margin: 0;
box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25);
background-color: #2c2c2c;
}
.navbar-light {
display: flex;
flex-direction: column;
justify-content: center;
height: fit-content;
border-radius: 10px;
gap: 10px;
padding: 15px;
margin: 0;
box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.25);
background-color: #FFFFFF;
}
.toggle {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
height: 40px;
}
.menus { .menus {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: stretch; position: relative;
justify-content: center; transition: 0.2s ease-out;
padding: 20px 0; justify-content: flex;
gap: 30px; padding: 20px 0;
} gap: 30px;
}
nav { nav {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: stretch; justify-content: center;
justify-content: center; padding-top: 0.8rem;
padding: 10px; padding-bottom: 0.8rem;
gap: 30px; gap: 30px;
} }
#home-menu {
border-bottom: 1px solid #8e8e8e;
}
button {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
align-self: stretch;
height: 35px;
border-radius: 5px;
gap: 5px;
border: none;
background-color: #2c2c2c;
transition-duration: 0.5s;
}
button { .dark-menu {
display: flex; background-color: #2c2c2c;
flex-direction: row; }
align-items: center;
justify-content: flex-start;
align-self: stretch;
height: 35px;
border-radius: 5px;
gap: 5px;
border: none;
background-color: #2c2c2c;
transition-duration: 0.5s;
}
button:hover {
background-color: #444444;
}
.light-menu {
background-color: #FFFFFF;
}
.icon { .dark-menu:hover {
display: flex; background-color: #444444;
flex-direction: row; }
align-items: center;
justify-content: center;
width: 35px;
height: 35px;
}
#indicator-icon, #back-icon {
width: 40px;
height: 40px;
border-radius: 5px;
background-color: #2c2c2c;
transition-duration: 0.5s;
}
#indicator-icon:hover, #back-icon:hover {
background-color: #444444;
}
.icon > img { .light-menu:hover {
width: 20px; background-color: #ACACAC;
height: 20px; }
filter: invert(100%);
object-fit: contain;
object-position: center;
overflow: hidden;
}
.icon {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
width: 35px;
height: 35px;
transition: 0.2s ease-out;
}
.label { .lightStylesIcon {
color: #fff; display: flex;
letter-spacing: 0.7px; flex-direction: row;
align-self: center; align-items: center;
white-space: nowrap; justify-content: center;
margin: auto 0; width: 35px;
font: 600 14px/20px Overpass, sans-serif; height: 35px;
} transition: 0.2s ease-out;
}
.darkStylesIcon {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
width: 35px;
height: 35px;
transition: 0.2s ease-out;
}
#back-icon {
width: 40px;
height: 40px;
border-radius: 5px;
transition-duration: 0.5s;
transition: 0.2s ease-out;
}
#indicator-icon {
width: 40px;
height: 40px;
border-radius: 5px;
transition-duration: 0.5s;
transition: transform 0.3s;
}
.lightStylesIcon:hover {
background-color: #ACACAC;
}
.darkStylesIcon:hover {
background-color: #444444;
}
.icon>img,
.lightStylesIcon>img,
.darkStylesIcon>img {
width: 20px;
height: 20px;
object-fit: contain;
object-position: center;
overflow: hidden;
transition: 0.2s ease-out;
}
.dark-home-menu {
border-bottom: 1px solid #8e8e8e;
}
.light-home-menu {
border-bottom: 1px solid #BABABA;
}
.label {
letter-spacing: 0.7px;
align-self: center;
white-space: nowrap;
margin: auto 0;
font: 600 14px/20px Overpass, sans-serif;
opacity: 0;
transition: opacity 0.5s ease-out;
}
</style> </style>