我的子菜单没有按照我的意愿放置自己 + 无法用复选框关闭它们
My submenus didn't place themselves as I want + can't close them with a checkbox
我是编码新手,实际上正在学习 back-end,但仍然想制作一些漂亮的东西。 (如有英文错误请见谅)
无论如何,我做了这个:
HTML :
<header>
<nav>
<a href="#" class="logo"><i class="fas fa-globe-asia fa-2x"></i><span>Title<br>Title</span></a>
<input class="menu-btn" type="checkbox" id="menu-btn" />
<label class="menu-icon" for="menu-btn"><span class="navicon"></span></label>
<ul class="menu">
<li><a href="index.php"><i class="fas fa-home mr-2"></i> Accueil</a></li>
<li class="nav-expand"><a href="#" class="nav-link"><span><i class="fas fa-chalkboard-teacher mr-2"></i> Click here for submenu </span></a>
<ul class="nav-expand-content">
<li><a href="">1</a></li>
<li class="nav-expand"><a href="#" class="nav-link">2</a>
<ul class="nav-expand-content">
<li><a href="#">2.1</a></li>
<li><a href="#">2.2</a></li>
</ul>
</li>
<li class="nav-expand"><a href="#" class="nav-link">3</a>
<ul class="nav-expand-content">
<li><a href="#">3.1</a></li>
<li><a href="#">3.2</a></li>
</ul>
</li>
<li class="nav-expand"><a href="#" class="nav-link">4 : click here for another submenu</a>
<ul class="nav-expand-content">
<li><a href="#">4.1</a></li>
<li class="nav-expand"><a href="#" class="nav-link">Test lvl 3</a>
<ul class="nav-expand-content">
<li class="nav-expand"><a href="#" class="nav-link">Test lvl 4</a>
<ul class="nav-expand-content">
<li class="nav-expand"><a href="#">Test lvl 5</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">5</a></li>
<li><a href="#">6</a></li>
<li><a href="#">7</a></li>
<li><a href="#">8</a></li>
</ul>
</li>
</ul>
</nav>
CSS :
/* ----------------------------------------------------------------
ALL
---------------------------------------------------------------- */
*{
margin:0;
padding:0;
box-sizing:border-box;
}
/* ----------------------------------------------------------------
HEADER
---------------------------------------------------------------- */
header {
background-color: rgb(235, 235, 235);
box-shadow: 1px 1px 4px 0 rgba(0,0,0,.5), inset 0px 5px #C44816;
padding-top: 5px;
position: fixed;
width: 100%;
}
header ul {
margin: 0;
padding: 5px;
list-style: none;
overflow: hidden;
background-color: rgb(235, 235, 235);
}
header li a {
display: block;
padding: 20px 20px;
border-right: 1px solid rgb(225, 225, 225);
border-left: 1px solid rgb(225, 225, 225);
text-decoration: none;
color: #333;
}
header li a:hover {
background-color: rgb(225, 225, 225);
}
.logo {
display: block;
float: left;
font-size: 20px;
padding: 10px 20px;
text-decoration: none;
color: #333;
}
.logo span {
vertical-align: bottom;
display: inline-block;
}
header .menu { /* Objectif : cacher le menu par défaut */
clear: both;
max-height: 0;
transition: max-height .2s ease-out;
}
/* ----------------- Hamburger menu-icon ----------------- */
header .menu-icon {
cursor: pointer;
float: right;
padding: 28px 20px;
position: relative;
user-select: none; /* L'icone du menu ne peut pas être sélectionnée par l'utilisateur */
}
header .menu-icon .navicon { /* Barre du milieu qui disparait en transition */
background: #333;
display: block;
height: 2px;
width: 18px;
position: relative;
transition: background .2s ease-out;
}
header .menu-icon .navicon:before,
header .menu-icon .navicon:after { /* Les deux autres barres */
background: #333;
content: '';
display: block;
height: 100%;
width: 100%;
position: absolute;
transition: all .2s ease-out;
}
header .menu-icon .navicon:before { /* Barre du bas */
top: 5px;
}
header .menu-icon .navicon:after { /* Barre du haut */
top: -5px;
}
/* ----------------- Hamburger Menu button behavior ----------------- */
header .menu-btn {
display: none;
}
header .menu-btn:checked ~ .menu {
max-height: 100vh;
}
header .menu-btn:checked ~ .menu-icon .navicon { /* Barre du milieu qui disparait*/
background: transparent;
}
header .menu-btn:checked ~ .menu-icon .navicon:before { /* Barre du bas qui tourne */
transform: rotate(-45deg);
}
header .menu-btn:checked ~ .menu-icon .navicon:after { /* Barre du haut qui tourne */
transform: rotate(45deg);
}
header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:before,
header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:after { /* Les deux barres se croisent en leur milieu */
top: 0;
}
/* ----------------- Sous-catégories ----------------- */
.nav-expand-content {
position: absolute;
top: 76px;
left: 0;
width: 100%;
height: 100vh;
overflow-y: auto;
transform: translateX(100%);
transition: 0.3s;
visibility: hidden;
}
.active > .nav-expand-content {
transform: translateX(0);
visibility: visible;
box-shadow: 1px 1px 4px 0 rgba(0,0,0,.5);
}
.nav-link {
display: flex;
justify-content: space-between;
}
/* ----------------- Media Queries ----------------- */
@media (min-width: 768px) {
header li {
float: left;
}
header li a {
padding: 20px 30px;
}
header .menu {
clear: none;
float: right;
max-height: none;
}
header .menu-icon {
display: none;
}
}
JS :
/* -------------------------------------
Menu + sub-menu
--------------------------------------*/
let navExpand = document.querySelectorAll('.nav-expand')
let backLink = `<li class="nav-item">
<a class="nav-back-link" href="javascript:;">
<i class="fas fa-caret-left"></i> Back
</a>
</li>`
let forwardIcon = '<i class="fas fa-caret-right"></i>'
navExpand.forEach(item => {
item.querySelector('.nav-expand-content').insertAdjacentHTML('afterbegin', backLink)
item.querySelector('.nav-link').insertAdjacentHTML('beforeend', forwardIcon)
item.querySelector('.nav-link').addEventListener('click', () => item.classList.add('active'))
item.querySelector('.nav-back-link').addEventListener('click', () => item.classList.remove('active'))
})
/* ----------- Close sub-menu when checkbox unchecked ----------- */
let checkBox = document.getElementById('menu-btn');
checkbox.addEventListener('change', e => {
if(e.target.checked==false){
navExpand.forEach(item => {
item.classList.remove('active')
})
}
})
现在知道了,我正在处理 mobile-first,因此,您需要调整大小才能看到我的问题。
问题 1:CSS 问题
第一级子菜单按预期工作,位于原始菜单之上,我们仍然可以看到标题和汉堡包徽标。但在此之后,下一层就在它下面,而不是在它上面,依此类推。如果他们没有其他位置,我不知道如何堆叠它们。如果我将它们的最高位置设置为 0,它们将按照我的预期工作,但会覆盖 ma 标题和图标。所以,我把 76px 放在这个下面...我尝试了很多不同的东西,但这两个是最接近我想要的。
有人建议我将所有内容放在另一个 div 中作为侧边栏。我开始做这个,但是后来,对于更大的屏幕,它看起来很难做,从那时起我就会有 2 个导航作为一个工作。我猜,这似乎比让移动设备的一个导航作为两个导航更难?而且我不明白为什么如果它在同一个导航中,它就不能工作,(当我不明白的时候我不喜欢它) 所以我停了下来。即使如此,侧面菜单也能按预期工作。所以,我想如果我做不到,我会去那里。但我很想避免它。
问题2:JS问题
如您所见,这产生了很多子菜单,并且在 class 处于活动状态的情况下,我们必须将它们一一删除。我写了一些代码,让它好像我们取消选中菜单汉堡包一样,他们应该都删除他们的活动 class,但无论代码如何,它都不起作用,我什至无法开始理解为什么。
感谢您的时间和提前的建议
PS: 我还不知道 JQuery '^^
CSS 问题可能会使菜单 "position: relative;" 它们的子菜单使用 top:0 相互覆盖。
js 当 item.querySelector('XXX') 找不到什么不能 "insertAdjacentHTML" 否则会崩溃然后出现未知错误所以尽量避免它。
p.s。在js中,checkBox和checkbox是不一样的。 :p
搜索 "check this" 以检查我修改了哪一行。
let navExpand = document.querySelectorAll('.nav-expand')
let backLink = `<li class="nav-item">
<a class="nav-back-link" href="javascript:;">
<i class="fas fa-caret-left"></i> Back
</a>
</li>`
let forwardIcon = '<i class="fas fa-caret-right"></i>'
navExpand.forEach(item => { // check this
if (item.querySelector('.nav-expand-content')) item.querySelector('.nav-expand-content').insertAdjacentHTML('afterbegin', backLink);
if (item.querySelector('.nav-link')) item.querySelector('.nav-link').insertAdjacentHTML('beforeend', forwardIcon);
if (item.querySelector('.nav-link')) item.querySelector('.nav-link').addEventListener('click', () => item.classList.add('active'));
if (item.querySelector('.nav-back-link')) item.querySelector('.nav-back-link').addEventListener('click', () => item.classList.remove('active'));
})
//
/* ----------- Close sub-menu when checkbox unchecked ----------- */
let checkBox = document.getElementById('menu-btn');
checkBox.addEventListener('change', e => { // check this
if (e.target.checked == false) {
let actives = document.querySelectorAll('.active');
actives.forEach(item => {
item.classList.remove('active')
})
}
})
/* ----------------------------------------------------------------
ALL
---------------------------------------------------------------- */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* ----------------------------------------------------------------
HEADER
---------------------------------------------------------------- */
header {
background-color: rgb(235, 235, 235);
box-shadow: 1px 1px 4px 0 rgba(0, 0, 0, .5), inset 0px 5px #C44816;
padding-top: 5px;
position: fixed;
width: 100%;
}
header ul {
margin: 0;
padding: 5px;
list-style: none;
overflow: hidden;
background-color: rgb(235, 235, 235);
}
header li a {
display: block;
padding: 20px 20px;
border-right: 1px solid rgb(225, 225, 225);
border-left: 1px solid rgb(225, 225, 225);
text-decoration: none;
color: #333;
}
header li a:hover {
background-color: rgb(225, 225, 225);
}
.logo {
display: block;
float: left;
font-size: 20px;
padding: 10px 20px;
text-decoration: none;
color: #333;
}
.logo span {
vertical-align: bottom;
display: inline-block;
}
header .menu {
/* check this */
position: relative;
/* Objectif : cacher le menu par défaut */
clear: both;
max-height: 0;
transition: max-height .2s ease-out;
}
/* ----------------- Hamburger menu-icon ----------------- */
header .menu-icon {
cursor: pointer;
float: right;
padding: 28px 20px;
position: relative;
user-select: none;
/* L'icone du menu ne peut pas être sélectionnée par l'utilisateur */
}
header .menu-icon .navicon {
/* Barre du milieu qui disparait en transition */
background: #333;
display: block;
height: 2px;
width: 18px;
position: relative;
transition: background .2s ease-out;
}
header .menu-icon .navicon:before,
header .menu-icon .navicon:after {
/* Les deux autres barres */
background: #333;
content: '';
display: block;
height: 100%;
width: 100%;
position: absolute;
transition: all .2s ease-out;
}
header .menu-icon .navicon:before {
/* Barre du bas */
top: 5px;
}
header .menu-icon .navicon:after {
/* Barre du haut */
top: -5px;
}
/* ----------------- Hamburger Menu button behavior ----------------- */
header .menu-btn {
display: none;
}
header .menu-btn:checked~.menu {
max-height: 100vh;
/* check this */
overflow: visible;
}
header .menu-btn:checked~.menu-icon .navicon {
/* Barre du milieu qui disparait*/
background: transparent;
}
header .menu-btn:checked~.menu-icon .navicon:before {
/* Barre du bas qui tourne */
transform: rotate(-45deg);
}
header .menu-btn:checked~.menu-icon .navicon:after {
/* Barre du haut qui tourne */
transform: rotate(45deg);
}
header .menu-btn:checked~.menu-icon:not(.steps) .navicon:before,
header .menu-btn:checked~.menu-icon:not(.steps) .navicon:after {
/* Les deux barres se croisent en leur milieu */
top: 0;
}
/* ----------------- Sous-catégories ----------------- */
.nav-expand-content {
/* check this */
position: absolute;
top: 0px;
left: 0;
width: 100%;
height: 100vh;
overflow-y: auto;
transform: translateX(100%);
transition: 0.3s;
visibility: hidden;
}
.active>.nav-expand-content {
transform: translateX(0);
visibility: visible;
box-shadow: 1px 1px 4px 0 rgba(0, 0, 0, .5);
}
.nav-link {
display: flex;
justify-content: space-between;
}
/* ----------------- Media Queries ----------------- */
@media (min-width: 768px) {
header li {
float: left;
}
header li a {
padding: 20px 30px;
}
header .menu {
clear: none;
float: right;
max-height: none;
}
header .menu-icon {
display: none;
}
}
<header>
<nav>
<a href="#" class="logo"><i class="fas fa-globe-asia fa-2x"></i><span>Title<br>Title</span></a>
<input class="menu-btn" type="checkbox" id="menu-btn" />
<label class="menu-icon" for="menu-btn"><span class="navicon"></span></label>
<ul class="menu">
<li><a href="index.php"><i class="fas fa-home mr-2"></i> Accueil</a></li>
<li class="nav-expand"><a href="#" class="nav-link"><span><i class="fas fa-chalkboard-teacher mr-2"></i> Click
here for submenu </span></a>
<ul class="nav-expand-content">
<li><a href="">1</a></li>
<li class="nav-expand"><a href="#" class="nav-link">2</a>
<ul class="nav-expand-content">
<li><a href="#">2.1</a></li>
<li><a href="#">2.2</a></li>
</ul>
</li>
<li class="nav-expand"><a href="#" class="nav-link">3</a>
<ul class="nav-expand-content">
<li><a href="#">3.1</a></li>
<li><a href="#">3.2</a></li>
</ul>
</li>
<li class="nav-expand"><a href="#" class="nav-link">4 : click here for another submenu</a>
<ul class="nav-expand-content">
<li><a href="#">4.1</a></li>
<li class="nav-expand"><a href="#" class="nav-link">Test lvl 3</a>
<ul class="nav-expand-content">
<li class="nav-expand"><a href="#" class="nav-link">Test lvl 4</a>
<ul class="nav-expand-content">
<li class="nav-expand"><a href="#">Test lvl 5</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">5</a></li>
<li><a href="#">6</a></li>
<li><a href="#">7</a></li>
<li><a href="#">8</a></li>
</ul>
</li>
</ul>
</nav>
</header>
我是编码新手,实际上正在学习 back-end,但仍然想制作一些漂亮的东西。 (如有英文错误请见谅)
无论如何,我做了这个:
HTML :
<header>
<nav>
<a href="#" class="logo"><i class="fas fa-globe-asia fa-2x"></i><span>Title<br>Title</span></a>
<input class="menu-btn" type="checkbox" id="menu-btn" />
<label class="menu-icon" for="menu-btn"><span class="navicon"></span></label>
<ul class="menu">
<li><a href="index.php"><i class="fas fa-home mr-2"></i> Accueil</a></li>
<li class="nav-expand"><a href="#" class="nav-link"><span><i class="fas fa-chalkboard-teacher mr-2"></i> Click here for submenu </span></a>
<ul class="nav-expand-content">
<li><a href="">1</a></li>
<li class="nav-expand"><a href="#" class="nav-link">2</a>
<ul class="nav-expand-content">
<li><a href="#">2.1</a></li>
<li><a href="#">2.2</a></li>
</ul>
</li>
<li class="nav-expand"><a href="#" class="nav-link">3</a>
<ul class="nav-expand-content">
<li><a href="#">3.1</a></li>
<li><a href="#">3.2</a></li>
</ul>
</li>
<li class="nav-expand"><a href="#" class="nav-link">4 : click here for another submenu</a>
<ul class="nav-expand-content">
<li><a href="#">4.1</a></li>
<li class="nav-expand"><a href="#" class="nav-link">Test lvl 3</a>
<ul class="nav-expand-content">
<li class="nav-expand"><a href="#" class="nav-link">Test lvl 4</a>
<ul class="nav-expand-content">
<li class="nav-expand"><a href="#">Test lvl 5</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">5</a></li>
<li><a href="#">6</a></li>
<li><a href="#">7</a></li>
<li><a href="#">8</a></li>
</ul>
</li>
</ul>
</nav>
CSS :
/* ----------------------------------------------------------------
ALL
---------------------------------------------------------------- */
*{
margin:0;
padding:0;
box-sizing:border-box;
}
/* ----------------------------------------------------------------
HEADER
---------------------------------------------------------------- */
header {
background-color: rgb(235, 235, 235);
box-shadow: 1px 1px 4px 0 rgba(0,0,0,.5), inset 0px 5px #C44816;
padding-top: 5px;
position: fixed;
width: 100%;
}
header ul {
margin: 0;
padding: 5px;
list-style: none;
overflow: hidden;
background-color: rgb(235, 235, 235);
}
header li a {
display: block;
padding: 20px 20px;
border-right: 1px solid rgb(225, 225, 225);
border-left: 1px solid rgb(225, 225, 225);
text-decoration: none;
color: #333;
}
header li a:hover {
background-color: rgb(225, 225, 225);
}
.logo {
display: block;
float: left;
font-size: 20px;
padding: 10px 20px;
text-decoration: none;
color: #333;
}
.logo span {
vertical-align: bottom;
display: inline-block;
}
header .menu { /* Objectif : cacher le menu par défaut */
clear: both;
max-height: 0;
transition: max-height .2s ease-out;
}
/* ----------------- Hamburger menu-icon ----------------- */
header .menu-icon {
cursor: pointer;
float: right;
padding: 28px 20px;
position: relative;
user-select: none; /* L'icone du menu ne peut pas être sélectionnée par l'utilisateur */
}
header .menu-icon .navicon { /* Barre du milieu qui disparait en transition */
background: #333;
display: block;
height: 2px;
width: 18px;
position: relative;
transition: background .2s ease-out;
}
header .menu-icon .navicon:before,
header .menu-icon .navicon:after { /* Les deux autres barres */
background: #333;
content: '';
display: block;
height: 100%;
width: 100%;
position: absolute;
transition: all .2s ease-out;
}
header .menu-icon .navicon:before { /* Barre du bas */
top: 5px;
}
header .menu-icon .navicon:after { /* Barre du haut */
top: -5px;
}
/* ----------------- Hamburger Menu button behavior ----------------- */
header .menu-btn {
display: none;
}
header .menu-btn:checked ~ .menu {
max-height: 100vh;
}
header .menu-btn:checked ~ .menu-icon .navicon { /* Barre du milieu qui disparait*/
background: transparent;
}
header .menu-btn:checked ~ .menu-icon .navicon:before { /* Barre du bas qui tourne */
transform: rotate(-45deg);
}
header .menu-btn:checked ~ .menu-icon .navicon:after { /* Barre du haut qui tourne */
transform: rotate(45deg);
}
header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:before,
header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:after { /* Les deux barres se croisent en leur milieu */
top: 0;
}
/* ----------------- Sous-catégories ----------------- */
.nav-expand-content {
position: absolute;
top: 76px;
left: 0;
width: 100%;
height: 100vh;
overflow-y: auto;
transform: translateX(100%);
transition: 0.3s;
visibility: hidden;
}
.active > .nav-expand-content {
transform: translateX(0);
visibility: visible;
box-shadow: 1px 1px 4px 0 rgba(0,0,0,.5);
}
.nav-link {
display: flex;
justify-content: space-between;
}
/* ----------------- Media Queries ----------------- */
@media (min-width: 768px) {
header li {
float: left;
}
header li a {
padding: 20px 30px;
}
header .menu {
clear: none;
float: right;
max-height: none;
}
header .menu-icon {
display: none;
}
}
JS :
/* -------------------------------------
Menu + sub-menu
--------------------------------------*/
let navExpand = document.querySelectorAll('.nav-expand')
let backLink = `<li class="nav-item">
<a class="nav-back-link" href="javascript:;">
<i class="fas fa-caret-left"></i> Back
</a>
</li>`
let forwardIcon = '<i class="fas fa-caret-right"></i>'
navExpand.forEach(item => {
item.querySelector('.nav-expand-content').insertAdjacentHTML('afterbegin', backLink)
item.querySelector('.nav-link').insertAdjacentHTML('beforeend', forwardIcon)
item.querySelector('.nav-link').addEventListener('click', () => item.classList.add('active'))
item.querySelector('.nav-back-link').addEventListener('click', () => item.classList.remove('active'))
})
/* ----------- Close sub-menu when checkbox unchecked ----------- */
let checkBox = document.getElementById('menu-btn');
checkbox.addEventListener('change', e => {
if(e.target.checked==false){
navExpand.forEach(item => {
item.classList.remove('active')
})
}
})
现在知道了,我正在处理 mobile-first,因此,您需要调整大小才能看到我的问题。
问题 1:CSS 问题
第一级子菜单按预期工作,位于原始菜单之上,我们仍然可以看到标题和汉堡包徽标。但在此之后,下一层就在它下面,而不是在它上面,依此类推。如果他们没有其他位置,我不知道如何堆叠它们。如果我将它们的最高位置设置为 0,它们将按照我的预期工作,但会覆盖 ma 标题和图标。所以,我把 76px 放在这个下面...我尝试了很多不同的东西,但这两个是最接近我想要的。
有人建议我将所有内容放在另一个 div 中作为侧边栏。我开始做这个,但是后来,对于更大的屏幕,它看起来很难做,从那时起我就会有 2 个导航作为一个工作。我猜,这似乎比让移动设备的一个导航作为两个导航更难?而且我不明白为什么如果它在同一个导航中,它就不能工作,(当我不明白的时候我不喜欢它) 所以我停了下来。即使如此,侧面菜单也能按预期工作。所以,我想如果我做不到,我会去那里。但我很想避免它。
问题2:JS问题
如您所见,这产生了很多子菜单,并且在 class 处于活动状态的情况下,我们必须将它们一一删除。我写了一些代码,让它好像我们取消选中菜单汉堡包一样,他们应该都删除他们的活动 class,但无论代码如何,它都不起作用,我什至无法开始理解为什么。
感谢您的时间和提前的建议
PS: 我还不知道 JQuery '^^
CSS 问题可能会使菜单 "position: relative;" 它们的子菜单使用 top:0 相互覆盖。
js 当 item.querySelector('XXX') 找不到什么不能 "insertAdjacentHTML" 否则会崩溃然后出现未知错误所以尽量避免它。
p.s。在js中,checkBox和checkbox是不一样的。 :p
搜索 "check this" 以检查我修改了哪一行。
let navExpand = document.querySelectorAll('.nav-expand')
let backLink = `<li class="nav-item">
<a class="nav-back-link" href="javascript:;">
<i class="fas fa-caret-left"></i> Back
</a>
</li>`
let forwardIcon = '<i class="fas fa-caret-right"></i>'
navExpand.forEach(item => { // check this
if (item.querySelector('.nav-expand-content')) item.querySelector('.nav-expand-content').insertAdjacentHTML('afterbegin', backLink);
if (item.querySelector('.nav-link')) item.querySelector('.nav-link').insertAdjacentHTML('beforeend', forwardIcon);
if (item.querySelector('.nav-link')) item.querySelector('.nav-link').addEventListener('click', () => item.classList.add('active'));
if (item.querySelector('.nav-back-link')) item.querySelector('.nav-back-link').addEventListener('click', () => item.classList.remove('active'));
})
//
/* ----------- Close sub-menu when checkbox unchecked ----------- */
let checkBox = document.getElementById('menu-btn');
checkBox.addEventListener('change', e => { // check this
if (e.target.checked == false) {
let actives = document.querySelectorAll('.active');
actives.forEach(item => {
item.classList.remove('active')
})
}
})
/* ----------------------------------------------------------------
ALL
---------------------------------------------------------------- */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* ----------------------------------------------------------------
HEADER
---------------------------------------------------------------- */
header {
background-color: rgb(235, 235, 235);
box-shadow: 1px 1px 4px 0 rgba(0, 0, 0, .5), inset 0px 5px #C44816;
padding-top: 5px;
position: fixed;
width: 100%;
}
header ul {
margin: 0;
padding: 5px;
list-style: none;
overflow: hidden;
background-color: rgb(235, 235, 235);
}
header li a {
display: block;
padding: 20px 20px;
border-right: 1px solid rgb(225, 225, 225);
border-left: 1px solid rgb(225, 225, 225);
text-decoration: none;
color: #333;
}
header li a:hover {
background-color: rgb(225, 225, 225);
}
.logo {
display: block;
float: left;
font-size: 20px;
padding: 10px 20px;
text-decoration: none;
color: #333;
}
.logo span {
vertical-align: bottom;
display: inline-block;
}
header .menu {
/* check this */
position: relative;
/* Objectif : cacher le menu par défaut */
clear: both;
max-height: 0;
transition: max-height .2s ease-out;
}
/* ----------------- Hamburger menu-icon ----------------- */
header .menu-icon {
cursor: pointer;
float: right;
padding: 28px 20px;
position: relative;
user-select: none;
/* L'icone du menu ne peut pas être sélectionnée par l'utilisateur */
}
header .menu-icon .navicon {
/* Barre du milieu qui disparait en transition */
background: #333;
display: block;
height: 2px;
width: 18px;
position: relative;
transition: background .2s ease-out;
}
header .menu-icon .navicon:before,
header .menu-icon .navicon:after {
/* Les deux autres barres */
background: #333;
content: '';
display: block;
height: 100%;
width: 100%;
position: absolute;
transition: all .2s ease-out;
}
header .menu-icon .navicon:before {
/* Barre du bas */
top: 5px;
}
header .menu-icon .navicon:after {
/* Barre du haut */
top: -5px;
}
/* ----------------- Hamburger Menu button behavior ----------------- */
header .menu-btn {
display: none;
}
header .menu-btn:checked~.menu {
max-height: 100vh;
/* check this */
overflow: visible;
}
header .menu-btn:checked~.menu-icon .navicon {
/* Barre du milieu qui disparait*/
background: transparent;
}
header .menu-btn:checked~.menu-icon .navicon:before {
/* Barre du bas qui tourne */
transform: rotate(-45deg);
}
header .menu-btn:checked~.menu-icon .navicon:after {
/* Barre du haut qui tourne */
transform: rotate(45deg);
}
header .menu-btn:checked~.menu-icon:not(.steps) .navicon:before,
header .menu-btn:checked~.menu-icon:not(.steps) .navicon:after {
/* Les deux barres se croisent en leur milieu */
top: 0;
}
/* ----------------- Sous-catégories ----------------- */
.nav-expand-content {
/* check this */
position: absolute;
top: 0px;
left: 0;
width: 100%;
height: 100vh;
overflow-y: auto;
transform: translateX(100%);
transition: 0.3s;
visibility: hidden;
}
.active>.nav-expand-content {
transform: translateX(0);
visibility: visible;
box-shadow: 1px 1px 4px 0 rgba(0, 0, 0, .5);
}
.nav-link {
display: flex;
justify-content: space-between;
}
/* ----------------- Media Queries ----------------- */
@media (min-width: 768px) {
header li {
float: left;
}
header li a {
padding: 20px 30px;
}
header .menu {
clear: none;
float: right;
max-height: none;
}
header .menu-icon {
display: none;
}
}
<header>
<nav>
<a href="#" class="logo"><i class="fas fa-globe-asia fa-2x"></i><span>Title<br>Title</span></a>
<input class="menu-btn" type="checkbox" id="menu-btn" />
<label class="menu-icon" for="menu-btn"><span class="navicon"></span></label>
<ul class="menu">
<li><a href="index.php"><i class="fas fa-home mr-2"></i> Accueil</a></li>
<li class="nav-expand"><a href="#" class="nav-link"><span><i class="fas fa-chalkboard-teacher mr-2"></i> Click
here for submenu </span></a>
<ul class="nav-expand-content">
<li><a href="">1</a></li>
<li class="nav-expand"><a href="#" class="nav-link">2</a>
<ul class="nav-expand-content">
<li><a href="#">2.1</a></li>
<li><a href="#">2.2</a></li>
</ul>
</li>
<li class="nav-expand"><a href="#" class="nav-link">3</a>
<ul class="nav-expand-content">
<li><a href="#">3.1</a></li>
<li><a href="#">3.2</a></li>
</ul>
</li>
<li class="nav-expand"><a href="#" class="nav-link">4 : click here for another submenu</a>
<ul class="nav-expand-content">
<li><a href="#">4.1</a></li>
<li class="nav-expand"><a href="#" class="nav-link">Test lvl 3</a>
<ul class="nav-expand-content">
<li class="nav-expand"><a href="#" class="nav-link">Test lvl 4</a>
<ul class="nav-expand-content">
<li class="nav-expand"><a href="#">Test lvl 5</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">5</a></li>
<li><a href="#">6</a></li>
<li><a href="#">7</a></li>
<li><a href="#">8</a></li>
</ul>
</li>
</ul>
</nav>
</header>