-
-
-
+ function addTodo() {
+ if (input.trim() === "") return;
+ setTodos([...todos, {id: Date.now(), text: input, erledigt: false}]);
+ setInput("");
+ }
+
+ function deleteTodo(id) {
+ setTodos(todos.filter((todo) => todo.id !== id));
+ }
+
+ function toggleTodo(id) {
+ setTodos(todos.map((todo) =>
+ todo.id === id ? {...todo, erledigt: !todo.erledigt} : todo
+ ));
+ }
+
+ return (
+
+
+
Aufgabenliste
+
+ setInput(e.target.value)} placeholder="Neue Aufgabe eintragen..."/>
+ addTodo()}>Hinzufügen
+
+
+ {todos.map((todo) => (
+
+ toggleTodo(todo.id)}>
+ {todo.text}: {todo.erledigt ? "bereits " : "noch nicht "} erledigt
+
+ deleteTodo(todo.id)}>Entfernen
+ ))}
+
+
-
-
Get started
-
- Edit src/App.jsx and save to test HMR
-
-
-
setCount((count) => count + 1)}
- >
- Count is {count}
-
-
-
-
-
-
-
-
-
-
-
Documentation
-
Your questions, answered
-
-
-
-
-
-
-
Connect with us
-
Join the Vite community
-
-
-
-
-
-
- >
- )
-}
-
-export default App
+ );
+}
\ No newline at end of file
diff --git a/react-todolist/src/index.css b/react-todolist/src/index.css
deleted file mode 100644
index 2c84af0..0000000
--- a/react-todolist/src/index.css
+++ /dev/null
@@ -1,111 +0,0 @@
-:root {
- --text: #6b6375;
- --text-h: #08060d;
- --bg: #fff;
- --border: #e5e4e7;
- --code-bg: #f4f3ec;
- --accent: #aa3bff;
- --accent-bg: rgba(170, 59, 255, 0.1);
- --accent-border: rgba(170, 59, 255, 0.5);
- --social-bg: rgba(244, 243, 236, 0.5);
- --shadow:
- rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px;
-
- --sans: system-ui, 'Segoe UI', Roboto, sans-serif;
- --heading: system-ui, 'Segoe UI', Roboto, sans-serif;
- --mono: ui-monospace, Consolas, monospace;
-
- font: 18px/145% var(--sans);
- letter-spacing: 0.18px;
- color-scheme: light dark;
- color: var(--text);
- background: var(--bg);
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-
- @media (max-width: 1024px) {
- font-size: 16px;
- }
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --text: #9ca3af;
- --text-h: #f3f4f6;
- --bg: #16171d;
- --border: #2e303a;
- --code-bg: #1f2028;
- --accent: #c084fc;
- --accent-bg: rgba(192, 132, 252, 0.15);
- --accent-border: rgba(192, 132, 252, 0.5);
- --social-bg: rgba(47, 48, 58, 0.5);
- --shadow:
- rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px;
- }
-
- #social .button-icon {
- filter: invert(1) brightness(2);
- }
-}
-
-body {
- margin: 0;
-}
-
-#root {
- width: 1126px;
- max-width: 100%;
- margin: 0 auto;
- text-align: center;
- border-inline: 1px solid var(--border);
- min-height: 100svh;
- display: flex;
- flex-direction: column;
- box-sizing: border-box;
-}
-
-h1,
-h2 {
- font-family: var(--heading);
- font-weight: 500;
- color: var(--text-h);
-}
-
-h1 {
- font-size: 56px;
- letter-spacing: -1.68px;
- margin: 32px 0;
- @media (max-width: 1024px) {
- font-size: 36px;
- margin: 20px 0;
- }
-}
-h2 {
- font-size: 24px;
- line-height: 118%;
- letter-spacing: -0.24px;
- margin: 0 0 8px;
- @media (max-width: 1024px) {
- font-size: 20px;
- }
-}
-p {
- margin: 0;
-}
-
-code,
-.counter {
- font-family: var(--mono);
- display: inline-flex;
- border-radius: 4px;
- color: var(--text-h);
-}
-
-code {
- font-size: 15px;
- line-height: 135%;
- padding: 4px 8px;
- background: var(--code-bg);
-}
diff --git a/react-todolist/src/main.jsx b/react-todolist/src/main.jsx
index b9a1a6d..29a1802 100644
--- a/react-todolist/src/main.jsx
+++ b/react-todolist/src/main.jsx
@@ -1,6 +1,6 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
-import './index.css'
+import './style.css'
import App from './App.jsx'
createRoot(document.getElementById('root')).render(
diff --git a/react-todolist/src/style.css b/react-todolist/src/style.css
new file mode 100644
index 0000000..d525506
--- /dev/null
+++ b/react-todolist/src/style.css
@@ -0,0 +1,79 @@
+@font-face {
+ font-family: 'Fira-Sans';
+ src: url("./media/fonts/FiraSans-Regular.ttf") format("truetype");
+}
+
+html {
+ font-size: 20px;
+ box-sizing: border-box;
+}
+
+* {
+ font-family: 'Fira-Sans', sans-serif;
+}
+
+.container {
+ margin: auto;
+ border-radius: 1em;
+ corner-shape: squircle bevel;
+ width: clamp(400px, 60vw, 800px);
+}
+
+
+.aufgaben-app {
+ margin: 10px;
+ padding: 10px;
+ border-radius: 1em;
+ corner-shape: squircle bevel;
+ background-color: ivory;
+}
+
+.aufgaben-app h2 {
+ font-size: 2rem;
+}
+
+.aufgaben-app h2 img {
+ max-height: 1em;
+}
+
+.input-container {
+ display: flex;
+ flex-wrap: nowrap;
+ gap: 1em;
+}
+
+.input-container #input-box {
+ flex-grow: 1;
+}
+
+.input-container button {
+ cursor: pointer;
+ background-color: lightskyblue;
+ border-radius: 100%;
+ corner-shape: squircle;
+}
+
+
+.schatten-farbverlauf {
+ background: linear-gradient(45deg, red, orange, yellow, green, blue, violet, pink);
+ padding: 3px;
+}
+
+.checked-list-item
+{
+ text-decoration: line-through;
+ color: lightslategrey;
+}
+
+ul {
+ list-style: none;
+}
+
+li {
+ display: flex;
+ gap: .7em;
+}
+
+label {
+ flex-grow: 1;
+}
\ No newline at end of file
Connect with us
-Join the Vite community
---
-
-
- GitHub
-
-
- -
-
-
- Discord
-
-
- -
-
-
- X.com
-
-
- -
-
-
- Bluesky
-
-
-
-