You can use the technique of having a label attached to a checkbox
field to control when the menu will be opened / closed, in this other answer I gave an example and explained a little better.
In your case, just leave menu in absolute position and keep it "hidden" by setting its position to the left with a negative value, which will make it leave the field of vision of what the user is seeing. And when the checkbox is selected, simply clear the menu from the left.
Left to right
*{ margin:0; box-sizing: border-box }
nav {
border: 1px solid #333;
display: flex;
flex-flow: column wrap;
left: -110%; /* para escondê-lo */
position: absolute;
transition: left 400ms ease-in;
width: 100%
}
#menu { display: none }
#menu:checked + nav {
left: 0 /* para exibi-lo */
}
<label for='menu'>Menu</label>
<input id='menu' type='checkbox'/>
<nav>
<a href='#!'>Link 1</a>
<a href='#!'>Link 2</a>
<a href='#!'>Link 3</a>
<a href='#!'>Link 4</a>
<nav>
Right to left
*{ margin:0; box-sizing: border-box; overflow: hidden }
nav {
border: 1px solid #333;
display: flex;
flex-flow: column wrap;
right: -100%; /* para escondê-lo */
position: absolute;
transition: right 400ms ease-in;
width: 100%
}
#menu { display: none }
#menu:checked + nav {
right: 0 /* para exibi-lo */
}
<label for='menu'>Menu</label>
<input id='menu' type='checkbox'/>
<nav>
<a href='#!'>Link 1</a>
<a href='#!'>Link 2</a>
<a href='#!'>Link 3</a>
<a href='#!'>Link 4</a>
<nav>