#theMenu {
position : fixed;
left : 0;
top : 0;
transform : translated3d(-100vw, 0, 0);
width : 100vw;
height : 100vh;
}
transform : translated3d(0vw, 0, 0);
transform : translated3d(-100vw, 0, 0);
transition : transform .3s cubic-bezier(0, 52, 0, 1);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sliding Menu in React</title>
</head>
<body>
<div id="container"></div>
</body>
</html>
import React from 'react';
import ReactDom from 'react-dom';
import "./index.css";
import MenuContainer from "./MenuContainer";
ReactDom.render(
<MenuContainer/>,
document.getElementById("container")
);
body {
background-color: #EEE;
font-family: sans-serif;
padding: 25px;
margin: 0;
overflow: auto;
}
#container li{
margin-bottom: 10px;
}
import React, {Component} from 'react';
class MenuContainer extends Component {
render() {
return (
<div>
<div>
<p>Can you spot the item that doesn't belong?</p>
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Dolor</li>
<li>Sit</li>
<li>Bumblebees</li>
<li>Aenean</li>
<li>Consectetur</li>
</ul>
</div>
</div>
)
}
}
export default MenuContainer;
import React, { Component } from "react";
class MenuContainer extends Component {
constructor(props) {
super(props);
this.state = {
visible : false,
};
this.handleMouseDown = this.handleMouseDown.bind(this);
this.toggleMenu = this.toggleMenu.bind(this);
}
handleMouseDown(e) {
this.toggleMenu();
console.log("clicked");
e.stopPropagation();
}
toggleMenu() {
this.setState({
visible : !this.state.visible
});
}
render() {
return (
<div>
<div>
<p>Can you spot the item that doesn't belong?</p>
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Dolor</li>
<li>Sit</li>
<li>Bumblebees</li>
<li>Aenean</li>
<li>Consectetur</li>
</ul>
</div>
</div>
);
}
}
export default MenuContainer;
import React, { Component } from "react";
import "./MenuButton.css";
class MenuButton extends Component {
render() {
return (
<button
id="roundButton"
onMouseDown={this.props.handleMouseDown}
></button>
);
}
}
export default MenuButton;
#roundButton {
background-color: #96D9FF;
margin-bottom: 20px;
width: 50px;
height: 50px;
border-radius: 50%;
border: 10px solid #0065A6;
outline: none;
transition: all .2s cubic-bezier(0, 1.26, .8, 1.28);
}
#roundButton:hover {
background-color: #96D9FF;
cursor: pointer;
border-color: #003557;
transform: scale(1.2, 1.2);
}
#roundButton:active {
border-color: #003557;
background-color: #FFF;
}
import React, { Component } from "react";
import MenuButton from "./MenuButton";
class MenuContainer extends Component {
constructor(props) {
super(props);
this.state = {
visible: false,
};
this.handleMouseDown = this.handleMouseDown.bind(this);
this.toggleMenu = this.toggleMenu.bind(this);
}
handleMouseDown(e) {
this.toggleMenu();
console.log("clicked");
e.stopPropagation();
}
toggleMenu() {
this.setState({
visible: !this.state.visible,
});
}
render() {
return (
<div>
<MenuButton handleMouseDown={this.handleMouseDown} />
<div>
<p>Can you spot the item that doesn't belong?</p>
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Dolor</li>
<li>Sit</li>
<li>Bumblebees</li>
<li>Aenean</li>
<li>Consectetur</li>
</ul>
</div>
</div>
);
}
}
export default MenuContainer;
import React, { Component } from "react";
import "./Menu.css";
class Menu extends Component {
render() {
var visibility = "hide";
if (this.props.menuVisibility) {
visibility = "show";
}
return (
<div
id="flyoutMenu"
onMouseDown={this.props.handleMouseDown}
className={visibility}
>
<h2>
<a href="/">Home</a>
</h2>
<h2>
<a href="/">About</a>
</h2>
<h2>
<a href="/">Contact</a>
</h2>
<h2>
<a href="/">Search</a>
</h2>
</div>
);
}
}
export default Menu;
#flyoutMenu {
width: 100vw;
height: 100vh;
background-color: #FFE600;
position: fixed;
top: 0;
left: 0;
transition: transform .3s cubic-bezier(0, .52, 0, 1);
overflow: scroll;
z-index: 1000;
}
#flyoutMenu.hide {
transform: translate3d(-100vw, 0, 0);
}
#flyoutMenu.show {
transform: translate3d(0vw, 0, 0);
overflow: hidden;
}
#flyoutMenu h2 a {
color: #333;
margin-left: 15px;
text-decoration: none;
}
#flyoutMenu h2 a:hover {
text-decoration: underline;
}
import React, { Component } from "react";
import MenuButton from "./MenuButton";
import Menu from "./Menu";
class MenuContainer extends Component {
constructor(props) {
super(props);
this.state = {
visible: false,
};
this.handleMouseDown = this.handleMouseDown.bind(this);
this.toggleMenu = this.toggleMenu.bind(this);
}
handleMouseDown(e) {
this.toggleMenu();
console.log("clicked");
e.stopPropagation();
}
toggleMenu() {
this.setState({
visible: !this.state.visible,
});
}
render() {
return (
<div>
<MenuButton handleMouseDown={this.handleMouseDown} />
<Menu
handleMouseDown={this.handleMouseDown}
menuVisibility={this.state.visible}
/>
<div>
<p>Can you spot the item that doesn't belong?</p>
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Dolor</li>
<li>Sit</li>
<li>Bumblebees</li>
<li>Aenean</li>
<li>Consectetur</li>
</ul>
</div>
</div>
);
}
}
export default MenuContainer;