Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] todo list 만들기 - jeongorl #14

Open
wants to merge 13 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.DS_Store
42 changes: 19 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
# 42gg 프론트엔드 온보딩 1단계

## 공통 조건
## todo list 만들기

- 온보딩 프로젝트는 개인 계정으로 fork하여 진행하고 PR로 제출합니다.
- git / github / code 컨벤션은 42gg notion에 있는 자료를 적극 반영합니다.
- 기본 기능 외 추가 기능, 디자인 구현은 자유입니다.
- 최종 제출품에는 README 작성이 되있어야 합니다.([예시](https://github.com/42organization/42gg.client/blob/main/README.md))
1. todo list 추가하기

## todo list 만들기
- 입력창에 텍스트를 입력 후, **Enter**를 누르면 todo list가 추가됩니다.

2. todo list 삭제하기

- **DELETE 버튼** : todo list가 삭제됩니다.

3. todo list 수정하기

- **MODIFY 버튼** : 수정 form으로 변환이 됩니다.
- 수정 form 상태에서 텍스트를 수정할 수 있습니다.
- **SAVE 버튼** : 수정한 텍스트가 이전의 텍스트를 대체하여 todo list에 저장됩니다.
- **CANCEL 버튼** : MODIFY 버튼을 누르기 전의 텍스트의 todo list 상태로 돌아갑니다.

4. todo list 완료하기

- 클릭을 통해 todo list 완료 상태 유무를 지정해 줄 수 있습니다.

- (필수) Javascript, HTML, CSS
- (필수) todo 생성(Create), 조회(Read) 기능 구현하기 (새로고침 고려 X)
- (필수) todo 완료 상태 체크 기능 구현하기 (정렬은 선택사항)
- (필수) todo 수정(Update), 삭제(Delete) 기능 구현하기 (새로고침 고려 X)
- (선택) 디자인 적용하기
- (선택) 무료로 배포하기

## 참고

- 데이터 관리는 하단의 방식 중 하나 선택하시면 됩니다.
- localstorage
- local server(예. [https://github.com/shal0mdave/todo-api.git](https://github.com/shal0mdave/todo-api.git), lowdb)
- mock api(예. [https://dummyjson.com/](https://dummyjson.com/))
- todo list를 구현하기 위해 필요한 기능들을 미리 생각(그려보고)해보고, 구현해보세요.
- 궁금한 사항은 issue에 등록해주세요.
- yoouyeon 님 배포 페이지| https://verysimpletodolist.netlify.app/
- github io 배포방법 | https://velog.io/@mangojang/github-pages-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0
![투두 리스트 영상](./todoList.gif)
128 changes: 128 additions & 0 deletions srcs/css/reset.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/

html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
body {
line-height: 1;
}
ol,
ul {
list-style: none;
}
blockquote,
q {
quotes: none;
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: "";
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
99 changes: 99 additions & 0 deletions srcs/css/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
@import url("./reset.css");

* {
font-family: "Nanum Pen Script", cursive, sans-serif;
font-weight: 400;
font-style: normal;
}

body {
height: 100vh;
width: 100vw;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 30px;
background-color: #eaf6f6;
}

h1 {
font-size: 80px;
}

.todoListContainer {
display: flex;
flex-direction: column;
align-items: center;
width: 1000px;
height: 800px;
background-color: #66bfbf;
border-radius: 40px;
padding: 40px 10px;
gap: 40px;
box-shadow: rgba(0, 0, 0, 0.56) 0px 22px 70px 4px;
}

.todoListInputBox {
background-color: #f0ffff;
width: 800px;
height: 70px;
border-radius: 20px;
border: none;
padding: 0px 30px;
font-size: 30px;
}

.todoListItemsContainer {
display: flex;
flex-direction: column;
width: 800px;
height: 100%;
gap: 10px;
padding: 0px 30px;
overflow: scroll;
}

.todoListItemsWrapper {
display: flex;
align-items: center;
width: 760px;
height: 50px;
min-height: 50px;
font-size: 30px;
background-color: #f0ffff;
border-radius: 10px;
padding: 0px 20px;
}

.todoListItemsWrapper p {
width: 620px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

.todoListItemsWrapper button {
margin-left: 10px;
width: 60px;
height: 30px;
border: none;
border-radius: 5px;
font-size: 20px;
background-color: #f0ffff;
color: #d16ba5;
cursor: pointer;
}

.modifyInput {
width: 620px;
height: 100%;
background-color: #f0ffff;
border: dashed 2px #d16ba5;
font-size: 30px;
padding: 0 0;
}

.complete {
text-decoration: line-through;
}
31 changes: 31 additions & 0 deletions srcs/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="./css/reset.css" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Nanum+Pen+Script&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="./css/style.css" />
<title>TO-DO LIST</title>
</head>
<body>
<h1>TO-DO LIST</h1>
<div class="todoListContainer">
<form>
<input
type="text"
class="todoListInputBox"
placeholder="Write a To do and Press Enter . . ."
maxlength="30"
/>
</form>
<div class="todoListItemsContainer"></div>
</div>
<script type="module" src="./js/app.js"></script>
</body>
</html>
Loading