├── src ├── App.css ├── index.css ├── reportWebVitals.js ├── StateProvider.js ├── firebase.js ├── components │ ├── Checkout.css │ ├── Home.css │ ├── Subtotal.css │ ├── CheckoutProduct.css │ ├── Subtotal.js │ ├── CheckoutProduct.js │ ├── Checkout.js │ ├── Product.js │ ├── Product.css │ ├── Header.js │ ├── Footer.js │ ├── Header.css │ ├── Footer.css │ └── Home.js ├── App.js ├── index.js └── reducer.js ├── public ├── robots.txt ├── banner2.jpg ├── banner3.jpg ├── favicon.ico ├── logo192.png ├── logo512.png ├── amazon-head.png ├── amazon-logo-main.png ├── manifest.json └── index.html ├── .gitignore ├── README.md └── package.json /src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | margin: 0; 3 | background: rgb(234, 237, 237); 4 | } 5 | 6 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /public/banner2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Subhampreet/Amazon-Clone-ReactJS/HEAD/public/banner2.jpg -------------------------------------------------------------------------------- /public/banner3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Subhampreet/Amazon-Clone-ReactJS/HEAD/public/banner3.jpg -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Subhampreet/Amazon-Clone-ReactJS/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Subhampreet/Amazon-Clone-ReactJS/HEAD/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Subhampreet/Amazon-Clone-ReactJS/HEAD/public/logo512.png -------------------------------------------------------------------------------- /public/amazon-head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Subhampreet/Amazon-Clone-ReactJS/HEAD/public/amazon-head.png -------------------------------------------------------------------------------- /public/amazon-logo-main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Subhampreet/Amazon-Clone-ReactJS/HEAD/public/amazon-logo-main.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /src/StateProvider.js: -------------------------------------------------------------------------------- 1 | import React, {createContext, useContext, useReducer} from 'react'; 2 | 3 | export const StateContext = createContext(); 4 | 5 | export const StateProvider = ({reducer, initialState, children}) => ( 6 | 7 | {children} 8 | 9 | ); 10 | 11 | 12 | export const useStateValue = () => useContext(StateContext); 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/firebase.js: -------------------------------------------------------------------------------- 1 | // For Firebase JS SDK v7.20.0 and later, measurementId is optional 2 | const firebaseConfig = { 3 | apiKey: "AIzaSyAacwKOFoLRUEJ0crtHGjtQNBldUAF_uoM", 4 | authDomain: "clone-a6865.firebaseapp.com", 5 | databaseURL: "https://clone-a6865.firebaseio.com", 6 | projectId: "clone-a6865", 7 | storageBucket: "clone-a6865.appspot.com", 8 | messagingSenderId: "987512157755", 9 | appId: "1:987512157755:web:89a3bcd713f30861200e1e", 10 | measurementId: "G-RF6CBW0L0Z" 11 | }; -------------------------------------------------------------------------------- /src/components/Checkout.css: -------------------------------------------------------------------------------- 1 | .checkout{ 2 | display: flex; 3 | padding: 20px; 4 | background-color: white; 5 | height: max-content; 6 | } 7 | 8 | .checkout-ad{ 9 | margin-bottom: 10px; 10 | width: 100%; 11 | } 12 | 13 | 14 | .checkout-title{ 15 | margin-right: 10px; 16 | padding: 10px; 17 | border-bottom: 1px solid lightgray; 18 | display: flex; 19 | align-items: center; 20 | color: rgb(53, 51, 51); 21 | } 22 | 23 | .checkout-basket-icon{ 24 | font-size: 35px !important; 25 | margin-right: 10px; 26 | } -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /src/components/Home.css: -------------------------------------------------------------------------------- 1 | .home{ 2 | /* display: flex; 3 | justify-content: center; 4 | margin-left: auto; 5 | margin-right: auto; 6 | max-width: 1450px; */ 7 | } 8 | 9 | .home { 10 | max-width: 1470px; 11 | margin-left: auto; 12 | margin-right: auto; 13 | } 14 | 15 | .home-image { 16 | width: 100%; 17 | mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0 ,0, 0.15)); 18 | z-index: -1; 19 | margin-bottom: -200px; 20 | } 21 | 22 | .home-row{ 23 | display: flex; 24 | z-index: 1; 25 | margin-left: 5px; 26 | margin-right: 5px; 27 | } 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import Header from "./components/Header"; 3 | import Home from "./components/Home"; 4 | import Footer from "./components/Footer"; 5 | import Checkout from "./components/Checkout"; 6 | import { BrowserRouter as Router, Switch, Route } from "react-router-dom"; 7 | 8 | function App() { 9 | return ( 10 | 11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
28 |
29 | ); 30 | } 31 | 32 | export default App; 33 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | import { StateProvider } from './StateProvider'; 7 | import reducer, {initialState} from "./reducer"; 8 | 9 | ReactDOM.render( 10 | 11 | 12 | 13 | 14 | , 15 | document.getElementById('root') 16 | ); 17 | 18 | // If you want to start measuring performance in your app, pass a function 19 | // to log results (for example: reportWebVitals(console.log)) 20 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 21 | reportWebVitals(); 22 | -------------------------------------------------------------------------------- /src/components/Subtotal.css: -------------------------------------------------------------------------------- 1 | .subtotal{ 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: space-between; 5 | width: 400px; 6 | height: 100px; 7 | padding: 20px; 8 | background-color: #f3f3f3; 9 | border: 1px solid #dddddd; 10 | border-radius: 3px; 11 | margin-left: 20px; 12 | } 13 | 14 | .subtotal p{ 15 | margin-top: 0px; 16 | } 17 | 18 | .subtotal_gift{ 19 | display: flex; 20 | align-items: center; 21 | } 22 | 23 | .subtotal_gift > input{ 24 | margin-right: 5px; 25 | } 26 | 27 | .subtotal > button { 28 | background: #f0c14b; 29 | border-radius: 2px; 30 | width: 100%; 31 | padding: 5px; 32 | height: 30px; 33 | border: 1px solid; 34 | margin-top: 10px; 35 | border-color: #a88734 #9c7e31 #846a29; 36 | color: #111; 37 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Amazon Clone Application using React JS 2 | 3 | 4 | 5 | ### Features 6 | 7 | Here's the feature's included in this project 8 | 9 | - 🌐 FULL Ecommerce functionality which includes both back-end and front-end 10 | - 👨‍👩‍👧‍👦 Login Page 11 | - 📦 Products Page 12 | - 🛒 Cart and Checkout Page 13 | - 💳 REAL Payments (Stripe Credit Card Payments) 14 | - 📝 Order History Page (Real time database) 15 | - ❄ Awesome animations like React Hover effects 16 | 17 | ### Referances 18 | 19 | - [Amazon Clone Application Using React JS - Video Tutorial](https://www.youtube.com/watch?v=RDV3Z1KCBvo&t=6005s) 20 | - [The Amazon Clone Written Guide](https://medium.com/cleverprogrammer/amazon-clone-using-react-the-ultimate-guide-fba2b36f3458) 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/CheckoutProduct.css: -------------------------------------------------------------------------------- 1 | .checkoutProduct{ 2 | display: flex; 3 | margin-top: 20px; 4 | margin-bottom: 20px; 5 | max-width: 800px; 6 | margin: auto; 7 | align-items: center; 8 | } 9 | 10 | .checkoutProduct_info{ 11 | padding-left: 20px; 12 | } 13 | 14 | .checkoutProduct_info > button { 15 | background: #f0c14b; 16 | border: 1px solid; 17 | margin-top: 10px; 18 | border-color: #a88734 #9c7e31 #846a29; 19 | color: #111; 20 | margin-top: 5px; 21 | } 22 | 23 | 24 | .checkoutProduct_image{ 25 | object-fit: contain; 26 | width: 180px; 27 | height: 180px; 28 | } 29 | 30 | .checkoutProduct_title{ 31 | font-size: 15px; 32 | font-weight: 700; 33 | letter-spacing: 0.04rem; 34 | margin-bottom: 0px; 35 | } 36 | 37 | .checkoutProduct_rating{ 38 | margin-top: 5px; 39 | } 40 | 41 | .checkoutProduct_price{ 42 | margin-top: 0px; 43 | margin-bottom: 0px; 44 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "amazon-clone", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@material-ui/core": "^4.11.0", 7 | "@material-ui/icons": "^4.9.1", 8 | "@testing-library/jest-dom": "^5.11.5", 9 | "@testing-library/react": "^11.1.1", 10 | "@testing-library/user-event": "^12.2.0", 11 | "react": "^17.0.1", 12 | "react-currency-format": "^1.0.0", 13 | "react-dom": "^17.0.1", 14 | "react-router-dom": "^5.2.0", 15 | "react-scripts": "4.0.0", 16 | "web-vitals": "^0.2.4" 17 | }, 18 | "scripts": { 19 | "start": "react-scripts start", 20 | "build": "react-scripts build", 21 | "test": "react-scripts test", 22 | "eject": "react-scripts eject" 23 | }, 24 | "eslintConfig": { 25 | "extends": [ 26 | "react-app", 27 | "react-app/jest" 28 | ] 29 | }, 30 | "browserslist": { 31 | "production": [ 32 | ">0.2%", 33 | "not dead", 34 | "not op_mini all" 35 | ], 36 | "development": [ 37 | "last 1 chrome version", 38 | "last 1 firefox version", 39 | "last 1 safari version" 40 | ] 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/reducer.js: -------------------------------------------------------------------------------- 1 | export const initialState = { 2 | basket: [], 3 | }; 4 | 5 | export const getBasketTotal = (basket) => 6 | basket?.reduce((amount, item) => item.price + amount, 0); 7 | 8 | const reducer = (state, action) => { 9 | 10 | console.log(action); 11 | 12 | switch(action.type){ 13 | case 'ADD_TO_BASKET': 14 | return { 15 | ...state, 16 | basket: [...state.basket, action.item], 17 | }; 18 | 19 | case 'REMOVE_FROM_BASKET': 20 | const index = state.basket.findIndex( 21 | (basketItem) => basketItem.id === action.id 22 | ) 23 | let newBasket = [...state.basket] 24 | 25 | if(index >= 0){ 26 | newBasket.splice(index, 1); 27 | } else{ 28 | console.warn( 29 | `Can't remove the product (id: ${action.id}) as its not present in the basket!` 30 | ) 31 | } 32 | 33 | return {...state, basket : newBasket} 34 | 35 | default: 36 | return state; 37 | } 38 | }; 39 | 40 | export default reducer; -------------------------------------------------------------------------------- /src/components/Subtotal.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Subtotal.css'; 3 | import CurrencyFormat from "react-currency-format"; 4 | import { ShoppingBasket } from '@material-ui/icons'; 5 | import { useStateValue } from "../StateProvider"; 6 | import {getBasketTotal} from "../reducer"; 7 | 8 | function Subtotal() { 9 | 10 | const [{ basket}, dispatch] = useStateValue(); 11 | 12 | return ( 13 |
14 | ( 16 | <> 17 |

18 | Subtotal ({basket.length} items) : 19 | {value} 20 |

21 | 22 | This order contains a gift 23 | 24 | 25 | )} 26 | decimalScale={2} 27 | value={getBasketTotal(basket)} 28 | displayType={"text"} 29 | thousandSeparator={true} 30 | prefix={"$"} 31 | /> 32 | 33 | 34 |
35 | ) 36 | } 37 | 38 | export default Subtotal 39 | -------------------------------------------------------------------------------- /src/components/CheckoutProduct.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import "./CheckoutProduct.css"; 3 | import StarIcon from "@material-ui/icons/Star"; 4 | import {useStateValue} from "../StateProvider"; 5 | 6 | function CheckoutProduct({id, image, title, price, rating}) { 7 | 8 | const [{basket}, dispatch] = useStateValue(); 9 | 10 | const removeFromBasket = () => { 11 | dispatch({ 12 | type: 'REMOVE_FROM_BASKET', 13 | id: id, 14 | }) 15 | } 16 | 17 | return ( 18 |
19 | 20 | 21 |
22 |

{title}

23 |

24 | $ 25 | {price} 26 |

27 |
28 | {Array(rating) 29 | .fill() 30 | .map((_, i) => ( 31 | 32 | ))} 33 |
34 | 35 |
36 |
37 | ) 38 | } 39 | 40 | export default CheckoutProduct 41 | -------------------------------------------------------------------------------- /src/components/Checkout.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Checkout.css'; 3 | import ShoppingCartOutlinedIcon from '@material-ui/icons/ShoppingCartOutlined'; 4 | import Subtotal from './Subtotal'; 5 | import CheckoutProduct from "./CheckoutProduct"; 6 | import { useStateValue } from "../StateProvider"; 7 | 8 | 9 | function Checkout() { 10 | 11 | const [{basket}, dispatch] = useStateValue(); 12 | 13 | return ( 14 |
15 |
16 | 17 | 18 |
19 |

Your Shopping Cart

20 | 21 | {basket.map(item => ( 22 | 29 | ))} 30 | 31 |
32 |
33 | 34 | 35 |
36 | 37 |
38 |
39 | ) 40 | } 41 | 42 | export default Checkout 43 | -------------------------------------------------------------------------------- /src/components/Product.js: -------------------------------------------------------------------------------- 1 | // import { CenterFocusStrongOutlined } from "@material-ui/icons";s 2 | import React from "react"; 3 | import "./Product.css"; 4 | import StarIcon from "@material-ui/icons/Star"; 5 | import { useStateValue } from "../StateProvider"; 6 | 7 | function Product({id, title, image, price, rating, author, subtitle }) { 8 | 9 | const [{basket}, dispatch] = useStateValue(); 10 | 11 | console.log("this is the basket >>> ", basket); 12 | 13 | const addToBasket = () => { 14 | dispatch({ 15 | type: "ADD_TO_BASKET", 16 | item: { 17 | id: id, 18 | title: title, 19 | image: image, 20 | price: price, 21 | rating: rating, 22 | }, 23 | }); 24 | }; 25 | 26 | return ( 27 |
28 |
29 |

{title}

30 |

{subtitle}

31 |

{author}

32 |
33 |
34 | {Array(rating) 35 | .fill() 36 | .map((_, i) => ( 37 | 38 | ))} 39 |
40 | 41 |

42 |

$ {price}

43 |

44 |
45 |
46 | 47 | 48 | 49 | 50 |
51 | ); 52 | } 53 | 54 | export default Product; 55 | -------------------------------------------------------------------------------- /src/components/Product.css: -------------------------------------------------------------------------------- 1 | .product{ 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | justify-content: flex-end; 6 | margin: 10px; 7 | padding: 10px; 8 | width: 100%; 9 | max-height: 400px; 10 | min-width: 100px; 11 | background-color: white; 12 | z-index: 1; 13 | } 14 | 15 | 16 | .product-info{ 17 | height: 100px; 18 | margin-bottom: 15px; 19 | width: 90%; 20 | } 21 | 22 | .product_price{ 23 | color: rgb(221, 24, 24); 24 | } 25 | 26 | .product_price h2{ 27 | font-weight: 500 !important; 28 | } 29 | 30 | .product > button{ 31 | background: #f0c14b; 32 | border: 1px solid; 33 | padding: 3px 6px; 34 | margin-top: 0px; 35 | border-color: #a88734 #9c7e31 #846a29; 36 | color: #111; 37 | margin-bottom: 8px; 38 | margin-top: 10px; 39 | } 40 | 41 | .product > button:hover{ 42 | background: #ebb839; 43 | } 44 | 45 | 46 | .product > img{ 47 | max-height: 200px; 48 | width: 100%; 49 | object-fit: contain; 50 | margin-top: 25px; 51 | } 52 | 53 | 54 | .product-title{ 55 | font-weight: 500; 56 | margin-bottom: -10px; 57 | } 58 | 59 | 60 | .product-author{ 61 | color: rgb(141, 140, 140); 62 | font-size: 13.5px; 63 | } 64 | 65 | .product-subtitle{ 66 | color: rgb(68, 66, 66); 67 | font-size: 13px; 68 | width: 95%; 69 | margin-bottom: -11px; 70 | } 71 | 72 | .star-icon{ 73 | color: rgb(250, 194, 10); 74 | font-size: 22px !important; 75 | } 76 | 77 | 78 | .product-business{ 79 | margin-top: -47px; 80 | display: flex; 81 | align-items: center; 82 | justify-content: space-between; 83 | width: 95%; 84 | } -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | 28 | 29 | 30 | React App 31 | 32 | 33 | 34 |
35 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /src/components/Header.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Header.css'; 3 | import SearchIcon from '@material-ui/icons/Search'; 4 | import ShoppingCartOutlinedIcon from '@material-ui/icons/ShoppingCartOutlined'; 5 | import {Link} from "react-router-dom"; 6 | import { useStateValue } from '../StateProvider'; 7 | 8 | function Header() { 9 | const [{ basket }, dispatch] = useStateValue(); 10 | 11 | return ( 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 |
22 | 23 |
24 |
25 | Hello, Guest 26 | Sign In 27 |
28 | 29 |
30 | Returns 31 | & Orders 32 |
33 | 34 |
35 | Your 36 | Prime 37 |
38 |
39 | 40 | 41 |
42 | 43 | {basket?.length} 44 |
45 | 46 |
47 | ) 48 | } 49 | 50 | export default Header 51 | -------------------------------------------------------------------------------- /src/components/Footer.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./Footer.css"; 3 | 4 | function Footer() { 5 | return ( 6 |
7 |
8 |

Back to top

9 |
10 |
11 |
12 |

Get to Know Us

13 |
About Us
14 |
Careers
15 |
Press Release
16 |
Amazon Cities
17 |
Gift a Smile
18 |
19 |
20 |

Connect with Us

21 |
Facebook
22 |
Twitter
23 |
Instagram
24 |
25 |
26 |

Make Money with Us

27 |
Sell on Amazon
28 |
Sell under Amazon Accelerator
29 |
Become an Affiliate
30 |
Advertise Your Products
31 |
Amazon Pau on Merchants
32 |
33 |
34 |

Let Us help You

35 |
COVID-19 and Amazon
36 |
Your Account
37 |
Returns Centre
38 |
100% App Download
39 |
Amazon App Download
40 |
41 |
42 |
43 | 44 |
45 |
Australia
46 |
Brazil
47 |
Canada
48 |
China
49 |
France
50 |
Germany
51 |
Italy
52 |
Japan
53 |
Mexico
54 |
Netherlands
55 |
Singapore
56 |
Spain
57 |
United Arab Emirates
58 |
United Kingdom
59 |
United States
60 |
61 |
62 |
63 | ); 64 | } 65 | 66 | export default Footer; 67 | -------------------------------------------------------------------------------- /src/components/Header.css: -------------------------------------------------------------------------------- 1 | .header{ 2 | height: 60px; 3 | display: flex; 4 | align-items: center; 5 | background-color: #131921; 6 | position: sticky; 7 | top: 0; 8 | z-index: 100; 9 | font-family: 'Roboto', sans-serif; 10 | } 11 | 12 | .link{ 13 | text-decoration: none ; 14 | } 15 | 16 | 17 | .header-logo{ 18 | width: 100px; 19 | object-fit: contain; 20 | margin: 0 20px; 21 | margin-top: 18px; 22 | margin-bottom: 10px; 23 | } 24 | 25 | 26 | 27 | .header-search{ 28 | display: flex; 29 | flex: 1; 30 | align-items: center; 31 | border-radius: 24px; 32 | } 33 | 34 | .header-searchInput{ 35 | height: 12px; 36 | padding: 10px; 37 | border: none; 38 | width: 100%; 39 | border-top-left-radius: 2px; 40 | border-bottom-left-radius: 2px; 41 | } 42 | 43 | .header-search-icon{ 44 | padding: 5px; 45 | height: 22px !important; 46 | background-color: #cd9042; 47 | border-bottom-right-radius: 2px; 48 | border-top-right-radius: 2px; 49 | } 50 | 51 | 52 | .header-nav{ 53 | display: flex; 54 | justify-content: space-evenly; 55 | } 56 | 57 | .header-option-main{ 58 | display: flex; 59 | flex-direction: column; 60 | margin-left: 20px; 61 | margin-right: 5px; 62 | color: white; 63 | } 64 | 65 | 66 | .header-option{ 67 | display: flex; 68 | flex-direction: column; 69 | margin-left: 10px; 70 | margin-right: 5px; 71 | color: white; 72 | } 73 | 74 | .header-option-one{ 75 | font-size: 12px; 76 | letter-spacing: 0.04rem; 77 | font-weight: 400; 78 | } 79 | 80 | .header-option-two{ 81 | font-size: 15px; 82 | font-weight: 700; 83 | letter-spacing: 0.03rem; 84 | } 85 | 86 | .header-option-basket{ 87 | display: flex; 88 | align-items: center; 89 | color: white; 90 | } 91 | 92 | .header-basket-icon{ 93 | margin-left: 10px; 94 | font-size: 30px !important; 95 | } 96 | 97 | .header-basket-count{ 98 | margin-right: 15px; 99 | margin-left: 5px; 100 | font-size: 20px; 101 | color: rgb(231, 80, 10); 102 | } 103 | -------------------------------------------------------------------------------- /src/components/Footer.css: -------------------------------------------------------------------------------- 1 | .footer{ 2 | width: 100%; 3 | display: flex; 4 | flex-direction: column; 5 | font-family: 'Roboto', sans-serif; 6 | } 7 | 8 | 9 | .footer1{ 10 | background: rgb(60, 68, 102); 11 | width: 100%; 12 | height: 45px; 13 | color: white; 14 | display: flex; 15 | align-items: center; 16 | } 17 | 18 | .footer1 h4{ 19 | margin: auto; 20 | font-weight: 400; 21 | letter-spacing: 0.04rem; 22 | font-size: 15px; 23 | } 24 | 25 | .footer-middle{ 26 | background: rgb(38, 42, 61); 27 | width: 100%; 28 | color: white; 29 | display: flex; 30 | justify-content: space-evenly; 31 | padding: 40px 0; 32 | letter-spacing: 0.05rem; 33 | border-bottom: solid 0.1px lightgray; 34 | } 35 | 36 | .footer-row{ 37 | margin-bottom: 25px; 38 | } 39 | 40 | .footer-middle h3{ 41 | font-size: 17px; 42 | margin-bottom: -5px; 43 | } 44 | 45 | .footer-middle h5{ 46 | font-weight: 400; 47 | font-size: 13.5px; 48 | margin-bottom: -12px; 49 | letter-spacing: 0.05rem; 50 | color: rgb(241, 237, 237); 51 | } 52 | 53 | 54 | .footer-bottom{ 55 | width: 100%; 56 | background: rgb(38, 42, 61); 57 | color: white; 58 | 59 | } 60 | 61 | .footer-logo{ 62 | width: 100px; 63 | margin: 20px 0 0 0; 64 | margin-left: 47%; 65 | } 66 | 67 | 68 | .footer-bottom-two{ 69 | width: 70%; 70 | display: flex; 71 | justify-content: space-evenly; 72 | margin: auto; 73 | font-size: 18px; 74 | } 75 | 76 | .footer-bottom-two h6{ 77 | font-weight: 300; 78 | letter-spacing: 0.05rem; 79 | } 80 | 81 | @media (max-width: 1100px) { 82 | 83 | .footer-bottom-two{ 84 | width: 100%; 85 | font-size: 7px; 86 | margin-bottom: 20px; 87 | } 88 | } 89 | 90 | @media (max-width: 850px) { 91 | 92 | .footer-middle{ 93 | margin: auto; 94 | } 95 | 96 | } 97 | 98 | 99 | @media (max-width: 600px) { 100 | .footer-middle{ 101 | flex-direction: column; 102 | } 103 | 104 | .footer-row{ 105 | margin-left: 30%; 106 | } 107 | } 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /src/components/Home.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Home.css'; 3 | import Product from './Product'; 4 | 5 | function Home() { 6 | return ( 7 |
8 |
9 | 10 | 11 |
12 | 22 | 32 |
33 | 34 |
35 | 44 | 54 | 64 |
65 | 66 |
67 | 77 |
78 |
79 |
80 | ) 81 | } 82 | 83 | export default Home; 84 | 85 | 86 | --------------------------------------------------------------------------------