add modal component
This commit is contained in:
parent
3a2a44d828
commit
3896c1be0d
@ -28,6 +28,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
|
<div id="root-overlays"></div>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
<!--
|
<!--
|
||||||
This HTML file is a template.
|
This HTML file is a template.
|
||||||
|
@ -2,10 +2,12 @@ import React from "react";
|
|||||||
|
|
||||||
import Header from "./components/Layout/Header";
|
import Header from "./components/Layout/Header";
|
||||||
import Meals from "./components/Meals/Meals";
|
import Meals from "./components/Meals/Meals";
|
||||||
|
import Cart from "./components/Cart/Cart";
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Cart />
|
||||||
<Header />
|
<Header />
|
||||||
<main>
|
<main>
|
||||||
<Meals />
|
<Meals />
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import classes from "./Cart.module.css";
|
import classes from "./Cart.module.css";
|
||||||
|
import Modal from "../UI/Modal";
|
||||||
|
|
||||||
const Cart = (props) => {
|
const Cart = (props) => {
|
||||||
const cartItems = (
|
const cartItems = (
|
||||||
@ -10,7 +11,7 @@ const Cart = (props) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<Modal>
|
||||||
{cartItems}
|
{cartItems}
|
||||||
<div className={classes.total}>
|
<div className={classes.total}>
|
||||||
<span>Total Amount</span>
|
<span>Total Amount</span>
|
||||||
@ -20,7 +21,7 @@ const Cart = (props) => {
|
|||||||
<button className={classes["button--alt"]}>Close</button>
|
<button className={classes["button--alt"]}>Close</button>
|
||||||
<button className={classes.button}>Order</button>
|
<button className={classes.button}>Order</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</Modal>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
30
src/components/UI/Modal.js
Normal file
30
src/components/UI/Modal.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import classes from "./Modal.module.css";
|
||||||
|
import ReactDOM from "react-dom";
|
||||||
|
|
||||||
|
const Backdrop = (props) => {
|
||||||
|
return <div className={classes.backdrop}></div>;
|
||||||
|
};
|
||||||
|
|
||||||
|
const ModalOverlay = (props) => {
|
||||||
|
return (
|
||||||
|
<div className={classes.modal}>
|
||||||
|
<div className={classes.content}>{props.children}</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const portalElement = document.getElementById("root-overlays");
|
||||||
|
|
||||||
|
const Modal = (props) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{ReactDOM.createPortal(<Backdrop />, portalElement)}
|
||||||
|
{ReactDOM.createPortal(
|
||||||
|
<ModalOverlay>{props.children}</ModalOverlay>,
|
||||||
|
portalElement
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Modal;
|
40
src/components/UI/Modal.module.css
Normal file
40
src/components/UI/Modal.module.css
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
.backdrop {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
z-index: 20;
|
||||||
|
background-color: rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal {
|
||||||
|
position: fixed;
|
||||||
|
top: 20vh;
|
||||||
|
left: 5%;
|
||||||
|
width: 90%;
|
||||||
|
background-color: white;
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 14px;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
|
||||||
|
z-index: 30;
|
||||||
|
animation: slide-down 300ms ease-out forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.modal {
|
||||||
|
width: 40rem;
|
||||||
|
left: calc(50% - 20rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slide-down {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-3rem);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user