First, see a similar question.
In addition, use transform for this task
https://jsfiddle.net/cLrkm8sf/
HTML:
<body>
<a href="#menu">Open menu</a>
<div class="menu" id="menu"></div>
</body>
CSS
.menu {
width: 400px;
height: 100vh;
background-color: #CCC;
transform: translateX(-100%);
}
.menu:target {
transform: translateX(0);
transition: transform .3s;
}
https://jsfiddle.net/6sre2mkz/
Another recommendation. In case of going beyond the screen, specify a fixed position, not an absolute.
CSS
.menu {
right: -400px;
position: fixed; /* not absolute */
top: 0;
bottom: 0;
background-color: #CCC;
height: 100vh;
width: 400px;
}
.menu:target {
right: 0;
}
https://jsfiddle.net/a2nurvpg/
Another example and no scrolling
HTML
<a href="#menu">Open</a>
<div class="menu" id="menu">
<ul>
<li><a href="#close">Close</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
<li><a href="#">Lorem ipsum.</a></li>
</ul>
</div>
CSS
.menu {
right: 0;
padding: 20px;
box-sizing: border-box;
transform: translateX(100%);
position: fixed;
overflow-y: auto;
top: 0;
bottom: 0;
background-color: #CCC;
height: 100vh;
width: 400px;
transition: transform .2s;
}
.menu:target {
transform: translateX(0);
}
.menu ul {
margin: 0;
padding: 0;
list-style: none;
}
.menu ul li {
display: block;
}
.menu ul li a {
display: block;
padding: 10px 5px;
color: #000;
text-decoration: none;
}
[href="#close"] {
font-size: 2em;
}