Burger menu not going to correct position - html

I have made a burger menu for my site but the dropdown menu/ element does not go inside the menu icon. It moves the wrong way. It goes from left to right but I need it to go from right to left. I can't figure out how to make the menu move the other way. I have tried to tweak some of the tags but either it's not worked or it's broken.
nav {
position: absolute;
top: -2%;
left: 93%;
}
#menuToggle {
display: block;
position: relative;
top: 50px;
left: 50px;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle a {
text-decoration: none;
color: #232323;
transition: color 0.3s ease;
}
#menuToggle a:hover {
color: tomato;
}
#menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
left: -5px;
cursor: pointer;
opacity: 0;
z-index: 2;
-webkit-touch-callout: none;
}
#menuToggle span {
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: #ffffff;
border-radius: 3px;
z-index: 1;
transform-origin: 4px 0px;
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), background 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), opacity 0.55s ease;
}
#menuToggle span:first-child {
transform-origin: 0% 0%;
}
#menuToggle span:nth-last-child(2) {
transform-origin: 0% 100%;
}
#menuToggle input:checked~span {
opacity: 1;
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
#menuToggle input:checked~span:nth-last-child(3) {
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
#menuToggle input:checked~span:nth-last-child(2) {
transform: rotate(-45deg) translate(0, -1px);
}
#menu {
position: absolute;
width: 300px;
margin: -100px 0 0 -50px;
padding: 50px;
padding-top: 125px;
background: #ffffff;
list-style-type: none;
-webkit-font-smoothing: antialiased;
transform-origin: 0% 0%;
transform: translate(-100%, 0);
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0);
}
#menu li {
padding: 10px 0;
font-size: 22px;
}
#menuToggle input:checked~ul {
transform: none;
}
<nav role="navigation">
<div id="menuToggle">
<input type="checkbox" />
<span></span>
<span></span>
<span></span>
<ul id="menu">
<li>Home</li>
<li>About us</li>
<li>Rules</li>
<li>Support us</li>
</ul>
</div>
</nav>
any help is greatly appreciated, thank you

Related

The page shows hidden items off the screen in mobile mode

I trying to resolve it, but i dont know that problems is with menu, or icon of chat(using tawk.to)
The page is also online on www.niebieskiczat.pl
I never had this problem, but i think i change something and now i got this like that, or maybe tawk.to change somethink? The hamburger menu should appear on the regular website and on the mobile. Now on PC working god, but on mobile i got problem like on picture. Here is code for CSS navbar
.menuToggle {
display: block;
position: absolute;
top: 40px;
right: 120px;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
.menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
left: -5px;
cursor: pointer;
opacity: 0;
z-index: 2;
-webkit-touch-callout: none;
}
.menuToggle span {
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: #cdcdcd;
border-radius: 3px;
z-index: 1;
transform-origin: 4px 0px;
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1),
background 0.5s cubic-bezier(0.77, 0.2, 0.05, 1), opacity 0.55s ease;
}
.menuToggle span:first-child {
transform-origin: 0% 0%;
}
.menuToggle span:nth-last-child(2) {
transform-origin: 0% 100%;
}
.menuToggle input:checked ~ span {
opacity: 1;
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
.menuToggle input:checked ~ span:nth-last-child(3) {
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
.menuToggle input:checked ~ span:nth-last-child(2) {
opacity: 1;
transform: rotate(-45deg) translate(0, -1px);
}
.menu {
position: absolute;
width: 300px;
margin: -80px 0 0 0;
padding: 50px;
padding-top: 105px;
right: -150px;
background: lightblue;
list-style-type: none;
-webkit-font-smoothing: antialiased;
transform-origin: 0% 0%;
transform: translate(100%, 0);
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1);
}
.menu li {
padding: 10px 0;
font-size: 1.2em;
}
.menuToggle input:checked ~ ul {
transform: none;
opacity: 1;
}
#media screen and (max-width: 768px) {
#menu {
transform: none;
opacity: 0;
transition: opacity 0.5s cubic-bezier(0.77, 0.2, 0.05, 1);
}
}
And HTML
<nav role='navigation'>
<div class="menuToggle">
<input type="checkbox" />
<span></span>
<span></span>
<span></span>
<ul class="menu">
<a href="pages/about.html">
<li>O nas</li>
</a>
<a href="pages/howtotalk.html">
<li>Jak rozmawiać?</li>
</a>
<a href="pages/contacts.html">
<li>Przydatne kontakty</li>
</a>
</ul>
</div>
</nav>
Add this to your menu class.
It will solve your problem.
.menu {
position: fixed;
right: 0;
}
try
#media and screen and (max-width:766px){ .menu{ display:none; } }

close checkbox hamburger menu, when clicked outside without javascript/jquery possibly

i have hamburger menu which i took from here. https://codepen.io/erikterwan/pen/EVzeRP
it is using only css by using a checkbox to expand and collapse the menu.
so what i want is when i click outside the menu (anywhere on the page), the menu should collapse. can someone help me.
this is the html code
<nav role="navigation">
<div id="menuToggle">
<input type="checkbox" />
<span></span>
<span></span>
<span></span>
<ul id="menu">
<li>Home</li>
<li>About</li>
<li>Info</li>
<li>Contact</li>
<li>Show me more</li>
</ul>
</div>
</nav>
this is the css code
body
{
margin: 0;
padding: 0;
background: #232323;
color: #cdcdcd;
font-family: "Avenir Next", "Avenir", sans-serif;
}
#menuToggle
{
display: block;
position: relative;
top: 50px;
left: 50px;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle a
{
text-decoration: none;
color: #232323;
transition: color 0.3s ease;
}
#menuToggle a:hover
{
color: tomato;
}
#menuToggle input
{
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
left: -5px;
cursor: pointer;
opacity: 0;
z-index: 2;
-webkit-touch-callout: none;
}
#menuToggle span
{
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: #cdcdcd;
border-radius: 3px;
z-index: 1;
transform-origin: 4px 0px;
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
background 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
opacity 0.55s ease;
}
#menuToggle span:first-child
{
transform-origin: 0% 0%;
}
#menuToggle span:nth-last-child(2)
{
transform-origin: 0% 100%;
}
#menuToggle input:checked ~ span
{
opacity: 1;
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
#menuToggle input:checked ~ span:nth-last-child(3)
{
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
#menuToggle input:checked ~ span:nth-last-child(2)
{
transform: rotate(-45deg) translate(0, -1px);
}
#menu
{
position: absolute;
width: 300px;
margin: -100px 0 0 -50px;
padding: 50px;
padding-top: 125px;
background: #ededed;
list-style-type: none;
-webkit-font-smoothing: antialiased;
transform-origin: 0% 0%;
transform: translate(-100%, 0);
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0);
}
#menu li
{
padding: 10px 0;
font-size: 22px;
}
#menuToggle input:checked ~ ul
{
transform: none;
}
You could use a label that expands to the whole width and height, and positioned under the nav: <label for="checkbox-id"></label>. You would need to add an id to your checkbox. Make sure to set the label background to transparent.
EDIT: You would show the label only when #checkbox-id is checked. This can be achieved using only CSS. You might need to restructure your HTML a little bit. TBH, your implementation can be much simpler than in the codepen you're drawing inspiration from. Please let me know in a comment if you want more details.
What have i done is i detected a click outside an element and setting the checkbox to false.
$(document).ready(function() {
$(document).on("click", function(event) {
if ($(event.target).closest("#checkbox").length === 0) {
$("#checkbox").prop("checked", false);
}
});
});

Having trouble aligning and increasing the width of my toggle navbar

I created a toggle navbar, where a menu and animation appear whenever the button is clicked. However, I'm having trouble with a few parts.
My content isn't aligning on the right side of the page, mainly the button itself.
I'm struggling to get the background of my menu (the lavender) to fill the full width and height of the page when it appears.
I've tried several methods, including 'float: right', 'width: 100vw', 'height: 100vh', andm more, but no luck.
Below is my code, as well as a link to essentially the look I'm trying to achieve. Any help would be greatly appreciated. Thanks!
Example: http://madetogether.com.au/case-study/sprout/
<!-- HTML -->
<!-- Navigation Bar -->
<nav role="navigation">
<div id="menuToggle">
<input type="checkbox" />
<span></span>
<span></span>
<span></span>
<ul id="menu">
<li>
<a href="#page1" class="nav-link">
Services
</a>
</li>
<li class="nav-item">
<a href="#page3" class="nav-link">
About
</a>
</li>
<li class="nav-item">
<a href="#page4" class="nav-link">
Contact
</a>
</li>
</ul>
/* CSS */
/* Navigation Bar */
#menuToggle {
display: block;
position: relative;
top: 1em;
left: 1em;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
/* top: -7px;
left: -5px; */
cursor: pointer;
opacity: 0;
z-index: 2;
-webkit-touch-callout: none;
}
a {
text-decoration: none;
color: black;
transition: color 0.3s ease;
}
a:hover {
color: red;
}
#menuToggle {
display: block;
position: relative;
top: 1em;
left: 1em;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
left: -5px;
cursor: pointer;
opacity: 0;
z-index: 2;
-webkit-touch-callout: none;
}
#menuToggle span {
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: black;
border-radius: 3px;
z-index: 1;
transform-origin: 4px 0px;
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
background 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
opacity 0.55s ease;
}
#menuToggle span:first-child {
transform-origin: 0% 0%;
}
#menuToggle span:nth-last-child(2) {
transform-origin: 0% 100%;
}
#menuToggle input:checked ~ span {
opacity: 1;
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
#menuToggle input:checked ~ span:nth-last-child(3) {
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
#menuToggle input:checked ~ span:nth-last-child(2) {
transform: rotate(-45deg) translate(0, -1px);
}
#menu {
position: absolute;
width: 100%;
margin: -100px 0 0 -50px;
padding: 50px;
padding-top: 125px;
background: lavender;
opacity: .85;
list-style-type: none;
-webkit-font-smoothing: antialiased;
transform-origin: 0% 0%;
transform: translate(-100%, 0);
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0);
}
#menu li {
padding: .5em 0;
font-size: 1.5em;
text-align: right;
}
#menuToggle input:checked ~ ul {
transform: none;
}
Wrap the menu icon span with outer div and add float right to it and for checkbox use right 0
Following is the updated code
UPDATE
I tried my level best to get the 100% height background using CSS, but failed. So I have tricked it with JavaScript.
function toggleHeight(){
var navElement = document.getElementsByTagName("nav")[0];
navElement.classList.toggle("fullHeight");
var menuElement = document.getElementById("menu");
menuElement.classList.toggle("fullHeight");
var menuToggleElement = document.getElementById("menuToggle");
menuToggleElement.classList.toggle("fullHeight");
}
#menuToggle {
display: block;
position: relative;
top: 1em;
left: 1em;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
/* top: -7px;
left: -5px; */
cursor: pointer;
opacity: 0;
z-index: 2;
-webkit-touch-callout: none;
}
a {
text-decoration: none;
color: black;
transition: color 0.3s ease;
}
a:hover {
color: red;
}
#menuToggle {
display: block;
position: relative;
top: 1em;
left: 1em;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
right: -5px;
cursor: pointer;
opacity: 0;
z-index: 2;
-webkit-touch-callout: none;
}
#menuToggle span {
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: black;
border-radius: 3px;
z-index: 1;
transform-origin: 4px 0px;
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
background 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
opacity 0.55s ease;
}
#menuToggle span:first-child {
transform-origin: 0% 0%;
}
#menuToggle span:nth-last-child(2) {
transform-origin: 0% 100%;
}
#menuToggle input:checked ~ span {
opacity: 1;
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
#menuToggle input:checked ~ span:nth-last-child(3) {
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
#menuToggle input:checked ~ span:nth-last-child(2) {
transform: rotate(-45deg) translate(0, -1px);
}
#menu {
position: absolute;
width: 100%;
margin: -100px 0 0 -50px;
padding: 50px;
padding-top: 125px;
background: lavender;
opacity: .85;
list-style-type: none;
-webkit-font-smoothing: antialiased;
transform-origin: 0% 0%;
transform: translate(-100%, 0);
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0);
}
#menu li {
padding: .5em 0;
font-size: 1.5em;
text-align: right;
}
#menuToggle input:checked ~ ul {
transform: none;
}
.menuIcon {
float: right;
}
html, body {
height: 100%;
margin: 0px;
}
.fullHeight {
height: 100% !important;
}
<nav role="navigation">
<div id="menuToggle">
<input type="checkbox" onclick="toggleHeight()"/>
<div class="menuIcon">
<span></span>
<span></span>
<span></span>
</div>
<ul id="menu">
<li>
<a href="#page1" class="nav-link">
Services
</a>
</li>
<li class="nav-item">
<a href="#page3" class="nav-link">
About
</a>
</li>
<li class="nav-item">
<a href="#page4" class="nav-link">
Contact
</a>
</li>
</ul>

HTML5 CSS3 Transition on <ul> tag to fade in

I usually don't have an issue with transitions.
But, I am implementing a hamburger menu and want the ul to fade in.
Here is the code:
nav #toggle {
display: none;
}
nav #navelements {
display: none;
transition: .7s;
}
nav #navelements ul li {
line-height: 2rem;
text-align: left;
width: 100%;
}
nav #toggle:checked+#navelements {
display: block;
transition: .7s;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<nav>
<h1>
LOGO
</h1>
<label for="toggle">&#9776</label>
<input type="checkbox" id="toggle">
<div id="navelements">
<ul>
<li>home</li>
<li>about</li>
<li>contact</li>
</ul>
</div>
</nav>
</body>
</html>
What am I doing wrong?
transition doesn't work with display & visibility values, therefore you have to do it with the opacity:
nav #toggle {
display: none;
}
nav #navelements {
opacity: 0;
transition: opacity .5s linear;
}
nav #navelements ul li {
line-height: 2rem;
text-align: left;
width: 100%;
}
nav #toggle:checked+#navelements {
opacity: 1;
}
<nav>
<h1>
LOGO
</h1>
<label for="toggle">&#9776</label>
<input type="checkbox" id="toggle">
<div id="navelements">
<ul>
<li>home</li>
<li>about</li>
<li>contact</li>
</ul>
</div>
</nav>
You may try this effective hamburger menu using only css3 and html 5
body
{
margin: 0;
padding: 0;
background: #0077CC;
color: #cdcdcd;
font-family: "Avenir Next", "Avenir", sans-serif;
}
a {
text-decoration: none;
color: #232323;
transition: color 0.3s ease;
}
a:hover {
color: #0077CC;
}
#menuToggle {
display: block;
position: relative;
top: 10px;
left: 10px;
z-index: 1;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#menuToggle input
{
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
left: -5px;
cursor: pointer;
opacity: 0; /* hide this */
z-index: 2; /* and place it over the hamburger */
-webkit-touch-callout: none;
}
#menuToggle span {
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: #cdcdcd;
border-radius: 3px;
z-index: 1;
-webkit-transform-origin: 4px 0px;
transform-origin: 4px 0px;
transition: background 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
opacity 0.55s ease,
-webkit-transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0);
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
background 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
opacity 0.55s ease;
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
background 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
opacity 0.55s ease,
-webkit-transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0);
}
#menuToggle span:first-child {
-webkit-transform-origin: 0% 0%;
transform-origin: 0% 0%;
}
#menuToggle span:nth-last-child(2) {
-webkit-transform-origin: 0% 100%;
transform-origin: 0% 100%;
}
#menuToggle input:checked ~ span {
opacity: 1;
-webkit-transform: rotate(45deg) translate(-2px, -1px);
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
#menuToggle input:checked ~ span:nth-last-child(3) {
opacity: 0;
-webkit-transform: rotate(0deg) scale(0.2, 0.2);
transform: rotate(0deg) scale(0.2, 0.2);
}
#menuToggle input:checked ~ span:nth-last-child(2) {
-webkit-transform: rotate(-45deg) translate(0, -1px);
transform: rotate(-45deg) translate(0, -1px);
}
#menu {
position: absolute;
width: 300px;
margin: -100px 0 0 -50px;
padding: 50px;
padding-top: 125px;
height:auto;
height: 200px;
background: #ededed;
list-style-type: none;
-webkit-font-smoothing: antialiased;
/* to stop flickering of text in safari */
-webkit-transform-origin: 0% 0%;
transform-origin: 0% 0%;
-webkit-transform: translate(-100%, 0);
transform: translate(-100%, 0);
transition: -webkit-transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0);
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0);
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0), -webkit-transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0);
}
#menu li {
padding: 5px 0;
font-size: 22px;
}
#menuToggle input:checked ~ ul {
-webkit-transform: none;
transform: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav role="navigation">
<div id="menuToggle">
<!--
A hidden checkbox is used as click reciever,
so you can use the :checked selector on it.
-->
<input type="checkbox" />
<!--
Some spans to act as a hamburger.
They are acting like a real hamburger,
-->
<span></span>
<span></span>
<span></span>
<ul id="menu">
<li>home</li>
<li>About</li>
<li>Contact</li>
</ul>
</div>
</nav>

CSS fold out menu not closing after clicking

I have created a simple fold out menu. When I click on menu icon, the menu opens.
Now when I click on any option, it should get closed which is not happening. Below is my code in Codepen.
I would prefer to solve this using CSS only. I do not wish to use JS.
body {
margin: 0;
padding: 0;
/* make it look decent enough */
background: #232323;
color: #cdcdcd;
font-family: "Avenir Next", "Avenir", sans-serif;
}
a {
text-decoration: none;
color: #232323;
transition: color 0.3s ease;
}
a:hover {
color: tomato;
}
#menuToggle {
display: block;
position: relative;
top: 50px;
left: 50px;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
left: -5px;
cursor: pointer;
opacity: 0;
/* hide this */
z-index: 2;
/* and place it over the hamburger */
-webkit-touch-callout: none;
}
/*
* Just a quick hamburger
*/
#menuToggle span {
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: #cdcdcd;
border-radius: 3px;
z-index: 1;
transform-origin: 4px 0px;
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), background 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), opacity 0.55s ease;
}
#menuToggle span:first-child {
transform-origin: 0% 0%;
}
#menuToggle span:nth-last-child(2) {
transform-origin: 0% 100%;
}
/*
* Transform all the slices of hamburger
* into a crossmark.
*/
#menuToggle input:checked~span {
opacity: 1;
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
/*
* But let's hide the middle one.
*/
#menuToggle input:checked~span:nth-last-child(3) {
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
/*
* Ohyeah and the last one should go the other direction
*/
#menuToggle input:checked~span:nth-last-child(2) {
transform: rotate(-45deg) translate(0, -1px);
}
/*
* Make this absolute positioned
* at the top left of the screen
*/
#menu {
position: absolute;
width: 300px;
margin: -100px 0 0 -50px;
padding: 50px;
padding-top: 125px;
background: #ededed;
list-style-type: none;
-webkit-font-smoothing: antialiased;
/* to stop flickering of text in safari */
transform-origin: 0% 0%;
transform: translate(-100%, 0);
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0);
}
#menu li {
padding: 10px 0;
font-size: 22px;
}
/*
* And let's slide it in from the left
*/
#menuToggle input:checked~ul {
transform: none;
}
<nav role="navigation">
<div id="menuToggle">
<!--
A fake / hidden checkbox is used as click reciever,
so you can use the :checked selector on it.
-->
<input type="checkbox" />
<span></span>
<span></span>
<span></span>
<ul id="menu">
<a href="#">
<li>Home</li>
</a>
<a href="#">
<li>About</li>
</a>
<a href="#">
<li>Info</li>
</a>
<a href="#">
<li>Contact</li>
</a>
<a href="https://erikterwan.com/" target="_blank">
<li>Show me more</li>
</a>
</ul>
</div>
</nav>
You can increase the size of the hidden <input type="checkbox"/> to make it cover all menu elements.
Though this ruins the hover-effect.
Otherwise you must use javascript.
body {
margin: 0;
padding: 0;
/* make it look decent enough */
background: #232323;
color: #cdcdcd;
font-family: "Avenir Next", "Avenir", sans-serif;
}
a {
text-decoration: none;
color: #232323;
transition: color 0.3s ease;
}
a:hover {
color: tomato;
}
#menuToggle {
display: block;
position: relative;
top: 50px;
left: 50px;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
left: -5px;
cursor: pointer;
opacity: 0;
/* hide this */
z-index: 2;
/* and place it over the hamburger */
-webkit-touch-callout: none;
}
/*
* Just a quick hamburger
*/
#menuToggle span {
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: #cdcdcd;
border-radius: 3px;
z-index: 1;
transform-origin: 4px 0px;
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), background 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), opacity 0.55s ease;
}
#menuToggle span:first-child {
transform-origin: 0% 0%;
}
#menuToggle span:nth-last-child(2) {
transform-origin: 0% 100%;
}
/*
* Transform all the slices of hamburger
* into a crossmark.
*/
#menuToggle input:checked~span {
opacity: 1;
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
/*
* But let's hide the middle one.
*/
#menuToggle input:checked~span:nth-last-child(3) {
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
/*
* Ohyeah and the last one should go the other direction
*/
#menuToggle input:checked~span:nth-last-child(2) {
transform: rotate(-45deg) translate(0, -1px);
}
/*
* Make this absolute positioned
* at the top left of the screen
*/
#menu {
position: absolute;
width: 300px;
margin: -100px 0 0 -50px;
padding: 50px;
padding-top: 125px;
background: #ededed;
list-style-type: none;
-webkit-font-smoothing: antialiased;
/* to stop flickering of text in safari */
transform-origin: 0% 0%;
transform: translate(-100%, 0);
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0);
}
#menu li {
padding: 10px 0;
font-size: 22px;
}
/*
* And let's slide it in from the left
*/
#menuToggle input:checked~ul {
transform: none;
}
#menuToggle input:checked {
width: 300px;
height: 290px;
}
<nav role="navigation">
<div id="menuToggle">
<!--
A fake / hidden checkbox is used as click reciever,
so you can use the :checked selector on it.
-->
<input type="checkbox" />
<span></span>
<span></span>
<span></span>
<ul id="menu">
<a href="#">
<li>Home</li>
</a>
<a href="#">
<li>About</li>
</a>
<a href="#">
<li>Info</li>
</a>
<a href="#">
<li>Contact</li>
</a>
<a href="https://erikterwan.com/" target="_blank">
<li>Show me more</li>
</a>
</ul>
</div>
</nav>
UPDATE:
Using javascript makes it quite easy to achieve it by unchecking the checkbox on every <li> click
var $input = document.querySelector('input[type="checkbox"]');
var $$menuLinks = document.querySelectorAll('#menu li');
$$menuLinks.forEach(link => {
link.addEventListener('click', function() {
$input.checked = false;
});
});
body {
margin: 0;
padding: 0;
/* make it look decent enough */
background: #232323;
color: #cdcdcd;
font-family: "Avenir Next", "Avenir", sans-serif;
}
a {
text-decoration: none;
color: #232323;
transition: color 0.3s ease;
}
a:hover {
color: tomato;
}
#menuToggle {
display: block;
position: relative;
top: 50px;
left: 50px;
z-index: 1;
-webkit-user-select: none;
user-select: none;
}
#menuToggle input {
display: block;
width: 40px;
height: 32px;
position: absolute;
top: -7px;
left: -5px;
cursor: pointer;
opacity: 0;
/* hide this */
z-index: 2;
/* and place it over the hamburger */
-webkit-touch-callout: none;
}
/*
* Just a quick hamburger
*/
#menuToggle span {
display: block;
width: 33px;
height: 4px;
margin-bottom: 5px;
position: relative;
background: #cdcdcd;
border-radius: 3px;
z-index: 1;
transform-origin: 4px 0px;
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), background 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), opacity 0.55s ease;
}
#menuToggle span:first-child {
transform-origin: 0% 0%;
}
#menuToggle span:nth-last-child(2) {
transform-origin: 0% 100%;
}
/*
* Transform all the slices of hamburger
* into a crossmark.
*/
#menuToggle input:checked~span {
opacity: 1;
transform: rotate(45deg) translate(-2px, -1px);
background: #232323;
}
/*
* But let's hide the middle one.
*/
#menuToggle input:checked~span:nth-last-child(3) {
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
/*
* Ohyeah and the last one should go the other direction
*/
#menuToggle input:checked~span:nth-last-child(2) {
transform: rotate(-45deg) translate(0, -1px);
}
/*
* Make this absolute positioned
* at the top left of the screen
*/
#menu {
position: absolute;
width: 300px;
margin: -100px 0 0 -50px;
padding: 50px;
padding-top: 125px;
background: #ededed;
list-style-type: none;
-webkit-font-smoothing: antialiased;
/* to stop flickering of text in safari */
transform-origin: 0% 0%;
transform: translate(-100%, 0);
transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0);
}
#menu li {
padding: 10px 0;
font-size: 22px;
}
/*
* And let's slide it in from the left
*/
#menuToggle input:checked~ul {
transform: none;
}
<nav role="navigation">
<div id="menuToggle">
<!--
A fake / hidden checkbox is used as click reciever,
so you can use the :checked selector on it.
-->
<input type="checkbox" />
<span></span>
<span></span>
<span></span>
<ul id="menu">
<a href="#">
<li>Home</li>
</a>
<a href="#">
<li>About</li>
</a>
<a href="#">
<li>Info</li>
</a>
<a href="#">
<li>Contact</li>
</a>
<a href="https://erikterwan.com/" target="_blank">
<li>Show me more</li>
</a>
</ul>
</div>
</nav>