Fixed css of navbar and variable itemcard postion

This commit is contained in:
FlorianSpeicher
2025-05-21 22:12:23 +02:00
parent c1d668cf91
commit c86cc8ac63
6 changed files with 46 additions and 38 deletions

View File

@@ -36,4 +36,8 @@
.read-the-docs { .read-the-docs {
color: #888; color: #888;
}
.navbar-offset {
height: 3rem;
} }

View File

@@ -14,6 +14,7 @@ export default function App() {
<BasketProvider> <BasketProvider>
<BrowserRouter> <BrowserRouter>
<NavBar /> <NavBar />
<div className='navbar-offset' />
<Routes> <Routes>
<Route path="/" element={<Home />} /> <Route path="/" element={<Home />} />
<Route path="*" element={<NoPage />} /> <Route path="*" element={<NoPage />} />

View File

@@ -2,6 +2,9 @@
.navbar { .navbar {
background-color: #1976d2; /* Material-UI Primary Color */ background-color: #1976d2; /* Material-UI Primary Color */
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
position: absolute;
top: 0;
height: 3rem;
} }
/* Logo styles */ /* Logo styles */
@@ -61,7 +64,7 @@
/* Button styles */ /* Button styles */
.navbar-button { .navbar-button {
my: 2; margin: 2;
color: white; color: white;
display: block; display: block;
} }

View File

@@ -170,7 +170,7 @@ export default function NavBar() {
textDecoration: 'none', textDecoration: 'none',
}} }}
> >
LOGO DPS
</Typography> </Typography>
<Box sx={{ flexGrow: 1, display: { xs: 'none', md: 'flex' } }}> <Box sx={{ flexGrow: 1, display: { xs: 'none', md: 'flex' } }}>
{pages.map((page) => ( {pages.map((page) => (

View File

@@ -1,7 +1,7 @@
import { Box, Pagination } from "@mui/material"; import { Box, Pagination } from "@mui/material";
import { useState, useEffect } from "react"; import { useEffect, useState } from "react";
import ItemCard from "../helper/ItemCard";
import Item from "../components/Item"; import Item from "../components/Item";
import ItemCard from "../helper/ItemCard";
import "./pages.css"; // Import der CSS-Datei import "./pages.css"; // Import der CSS-Datei
export default function Home() { export default function Home() {
@@ -131,44 +131,42 @@ export default function Home() {
const [currentPage, setCurrentPage] = useState(1); // Zustand für die aktuelle Seite const [currentPage, setCurrentPage] = useState(1); // Zustand für die aktuelle Seite
const [itemsPerPage, setItemsPerPage] = useState(9); // Dynamische Anzahl der Items pro Seite const [itemsPerPage, setItemsPerPage] = useState(9); // Dynamische Anzahl der Items pro Seite
const [visibleItems, setVisibleItems] = useState<Item[]>([]); // Zustand für die sichtbaren Items
// Berechnung der angezeigten Items basierend auf der aktuellen Seite
const indexOfLastItem = currentPage * itemsPerPage;
const indexOfFirstItem = indexOfLastItem - itemsPerPage;
const currentItems = items.slice(indexOfFirstItem, indexOfLastItem);
// Handler für die Pagination // Handler für die Pagination
const handlePageChange = (event: React.ChangeEvent<unknown>, page: number) => { const handlePageChange = (event: React.ChangeEvent<unknown>, page: number) => {
setCurrentPage(page); setCurrentPage(page);
}; };
// Aktualisiere die Anzahl der Karten bei Größenänderung
useEffect(() => {
const updateItems = () => {
const newItemsPerPage = calculateItemsPerPage();
setItemsPerPage(newItemsPerPage);
const startIndex = (currentPage - 1) * newItemsPerPage;
setVisibleItems(items.slice(startIndex, startIndex + newItemsPerPage));
};
updateItems(); // Initialer Aufruf
window.addEventListener("resize", updateItems); // Event-Listener hinzufügen
return () => window.removeEventListener("resize", updateItems); // Event-Listener entfernen
}, [currentPage]);
// Dynamische Berechnung der Anzahl der Items pro Seite basierend auf der Fensterbreite // Dynamische Berechnung der Anzahl der Items pro Seite basierend auf der Fensterbreite
const calculateItemsPerPage = () => { const calculateItemsPerPage = () => {
const width = window.innerWidth; const cardHeight = 250; // Höhe einer Karte (inkl. Margin/Padding)
const columns = Math.floor(width / 300); // Jede Spalte ist ca. 300px breit const paginationHeight = 50; // Höhe der Pagination
const rows = Math.floor(window.innerHeight / 400); // Jede Zeile ist ca. 400px hoch const availableHeight = window.innerHeight - paginationHeight - 60; // Verfügbare Höhe (inkl. Padding)
return columns * rows; const itemsPerRow = Math.floor(window.innerWidth / 220); // Karten pro Zeile (220px Breite inkl. Margin)
const rows = Math.floor(availableHeight / cardHeight); // Maximale Anzahl an vollständigen Reihen
return itemsPerRow * rows;
}; };
useEffect(() => {
const updateItemsPerPage = () => {
setItemsPerPage(calculateItemsPerPage());
};
// Initiale Berechnung und Event-Listener hinzufügen
updateItemsPerPage();
window.addEventListener("resize", updateItemsPerPage);
// Event-Listener entfernen, wenn die Komponente unmountet wird
return () => {
window.removeEventListener("resize", updateItemsPerPage);
};
}, []);
return ( return (
<div className="page-background"> <div className="page-background">
<Box className="cardgrid"> <Box className="cardgrid">
{currentItems.map((item) => ( {visibleItems.map((item) => (
<ItemCard key={item.id} item={item} /> <ItemCard key={item.id} item={item} />
))} ))}
</Box> </Box>

View File

@@ -43,14 +43,15 @@
} }
.cardgrid { .cardgrid {
display: grid; display: grid;
gap: 2%; gap: 2%;
width: 90%; width: 90%;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); /* Dynamische Spalten */ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); /* Dynamische Spalten */
padding: 16px; padding: 16px;
margin-top: auto; margin: 0 auto;
max-height: calc(100vh - 200px); /* Dynamische Höhe, abhängig von anderen Inhalten */ max-height: calc(100vh - 300px); /* Dynamische Höhe, abhängig von der Pagination */
margin: 0 auto; box-sizing: border-box; /* Stellt sicher, dass Padding in die Breite einbezogen wird */
} }
.page-background { .page-background {
@@ -60,7 +61,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: space-between;
overflow: hidden; overflow: hidden;
padding: 20px 0; /* Abstand oben und unten */ padding: 20px 0; /* Abstand oben und unten */
box-sizing: border-box; /* Stellt sicher, dass Padding in die Höhe einbezogen wird */ box-sizing: border-box; /* Stellt sicher, dass Padding in die Höhe einbezogen wird */
@@ -69,5 +70,6 @@
.pagination { .pagination {
display: flex; display: flex;
justify-content: center; justify-content: center;
margin-top: 5%; /*margin-top: 5%;*/
flex-shrink: 0;
} }