728x90

ProductsPage.jsx
import "./ProductsPage.css";
const ProductsPage = () => {
return (
<section className="products_page">
{/* ์ผ์ชฝ ์นดํ
๊ณ ๋ฆฌ */}
{/* ์ํ๋ชฉ๋ก */}
</section>
);
};
export default ProductsPage;
ProductsPage.css
.products_page {
display: grid;
grid-template-columns: 1fr 4fr;
padding: 20px;
}
grid-template-columns: 1:4
์ํํ์ด์ง์ ๊ณต๊ฐ์ ๋ถ๋ฆฌํด์ค๋ค.
App.jsx์ ํํ์ด์ง ๋ง๊ณ ProductsPage ๋ณด์ด๊ฒ ํ๋ค.
import "./App.css";
import HomePage from "./components/Home/HomePage";
import Navbar from "./components/Navbar/Navbar";
import ProductsPage from "./components/Products/ProductsPage";
function App() {
return (
<div className="app">
<nav>
<Navbar />
</nav>
<main>
{/* <HomePage /> */}
<ProductsPage />
</main>
</div>
);
}
export default App;
์ํํ์ด์ง์ ์ผ์ชฝ ์นดํ ๊ณ ๋ฆฌ์ ํด๋นํ๋ ProductsSidebar.jsx ๋ฅผ ์์ฑํ๋ค.
ProductsSidebar.jsx
import "./ProductsSidebar.css";
import rocket from "../../assets/rocket.png";
import LinkWithIcon from "../Navbar/LinkWithIcon";
const ProductsSidebar = () => {
return (
<aside className="products_sidebar">
<h2>์นดํ
๊ณ ๋ฆฌ</h2>
<div className="category_links">
<LinkWithIcon
title="์ ์์ ํ"
link="products?category=electronics"
emoji={rocket}
sidebar={true}
/>
</div>
</aside>
);
};
export default ProductsSidebar;
ProductsSidebar.css
.products_sidebar {
padding: 10px 20px;
border-radius: 5px;
background-color: #fff;
}
.products_sidebar h2 {
font-size: 26px;
margin-bottom: 10px;
}
ProductsList.jsx
import ProductCard from "./ProductCard";
import "./ProductsList.css";
const ProductsList = () => {
return (
<section className="products_list_section">
<header className="align_center products_list_header">
<h2>์ํ๋ชฉ๋ก</h2>
<select name="sort" id="" className="products_sorting">
<option value="">์ ๋ ฌ๋ฐฉ๋ฒ</option>
<option value="price desc">๊ฐ๊ฒฉ๋์์</option>
<option value="price asc">๊ฐ๊ฒฉ๋ฎ์์</option>
<option value="rate desc">ํ์ ๋์์</option>
<option value="rate asc">ํ์ ๋ฎ์์</option>
</select>
</header>
<div className="products_list">
<ProductCard />
<ProductCard />
<ProductCard />
<ProductCard />
<ProductCard />
<ProductCard />
<ProductCard />
<ProductCard />
</div>
</section>
);
};
export default ProductsList;
ProductsList.cs
.products_list_section {
padding: 10px;
padding-left: 30px;
}
.products_list_header {
justify-content: space-between;
}
.products_list_header h2 {
font-size: 26px;
}
.products_sorting {
font-size: 18px;
font-weight: 500;
font-family: inherit;
height: 35px;
padding: 0 5px;
border: none;
outline: none;
border-radius: 5px;
}
.products_list {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
}
ProductsPage.jsx ์ ๋ง๋ค์ด๋์ ์ฌ์ด๋๋ฐ๋ ์ํ ๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐํ๋ค.
import ProductsList from "./ProductsList";
import "./ProductsPage.css";
import ProductsSidebar from "./ProductsSidebar";
const ProductsPage = () => {
return (
<section className="products_page">
<ProductsSidebar />
<ProductsList />
</section>
);
};
export default ProductsPage;

'FRONTEND > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [myCart] ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง (0) | 2023.12.19 |
|---|---|
| [myCart] ์ํ ์์ธ๋ณด๊ธฐ( SingleProductPage ) ์์ฑ (0) | 2023.12.19 |
| [myCart] FeaturedProducts ์ปดํฌ๋ํธ ๋ฐ ProductCard ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ (0) | 2023.12.19 |
| [myCart] ํํ์ด์ง ์์ฑ ๋ฐ heroSection ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ (1) | 2023.12.19 |
| [myCart] Navbar ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ /Navbar Link ์ปดํฌ๋ํธ๋ก ๊ด๋ฆฌ (2) | 2023.12.19 |