-
Notifications
You must be signed in to change notification settings - Fork 8
[1주차] 박유민 과제 제출합니다. #3
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
Open
waldls
wants to merge
16
commits into
CEOS-Developers:master
Choose a base branch
from
waldls:waldls
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
687eb44
[SETTING] 프로젝트 초기세팅
waldls 3ceeb05
[CHORE] 프리티어 설정 수정
waldls fdfe882
[FEAT] HTML 구조 뼈대 잡기
waldls 9eadc73
[FEAT] 달력 렌더링 및 월 이동 기능 추가
waldls 509b731
[FEAT] 할일 CRUD 및 기본 스타일링
waldls 79fe85a
[FEAT] 이번 달 통계 및 progress bar 추가
waldls 6924324
[FIX] 중복 스타일 제거 및 달력 섹션 flex 추가
waldls a10ee5b
[FEAT] 디자인 토큰 도입 및 달력 스타일 추가
waldls fed69ac
[ADD] 웹 접근성 속성 추가
waldls 99e8509
[FIX] 반응형 breakpoint 900px로 조정
waldls e1df7ff
[REFACTOR] 컨테이너 높이 고정 및 반응형 달력 스타일 개선
waldls b07e078
[REFACTOR] 주석 수정 및 할 일 없을 때 노출될 문구 수정
waldls 9f18965
[FEAT] 오늘 할 일 통계 추가 및 반응형에서 가로 배치
waldls 89ed9b5
[CHORE] 띄어쓰기 수정
waldls 4cb4a13
[DEPLOY] 배포
waldls 876d945
[DOCS] 1주차 과제 리드미 수정
waldls File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| { | ||
| "semi": false, | ||
| "singleQuote": true, | ||
| "trailingComma": "es5", | ||
| "bracketSpacing": true, | ||
| "arrowParens": "always", | ||
| "useTabs": false, | ||
| "tabWidth": 2, | ||
| "printWidth": 80, | ||
| "endOfLine": "lf" | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,60 +1,41 @@ | ||
| # 1주차 과제: Vanilla Todo | ||
| # [CEOS 23rd Week1] - Vanilla Todo | ||
|
|
||
| # 서론 | ||
| 캘린더를 기준으로 날짜별 할 일을 관리하고, 오늘과 이번 달 진행 상황을 함께 확인할 수 있는 [Vanilla Todo](https://vanilla-todo-23rd.vercel.app/) 프로젝트입니다. | ||
|
|
||
| 안녕하세요 🙌🏻 23기 프론트엔드 운영진 **원채영**입니다. | ||
| HTML, CSS, JavaScript만으로 캘린더 UI와 Todo 상태 관리를 직접 구현했습니다. | ||
|
|
||
| 이번 미션은 개발 환경 구축과 스터디 진행 방식에 익숙해지실 수 있도록 간단한 **to-do list** 만들기를 진행합니다. 무작정 첫 스터디부터 React를 다루는 것보다는 왜 React가 필요한지, React가 없으면 무엇이 불편한지 느껴 보고 본격적인 스터디에 들어가는 것이 React를 이해하는 데 더 많은 도움이 될 것이라 생각합니다. | ||
| ## 주요 기능 | ||
|
|
||
| 비교적 가벼운 미션인 만큼 코드를 짜는 데 있어 여러분의 ”**창의성**”을 충분히 발휘해 보시기 바랍니다. 작동하기만 하면 되는 것보다 같은 코드를 짜는 여러가지 방식과 패턴에 대해 고민해 보시고, 본인이 생각한 가장 창의적인 방법으로 코드를 작성해 주세요. 여러분이 미션을 수행하는 과정에서 겪는 고민과 생각의 깊이만큼 스터디에서 더 많은 것을 얻어가실 수 있을 것입니다. | ||
| - 날짜 선택 기반 Todo 추가, 완료, 삭제 | ||
| - 월간 캘린더에서 날짜 이동 및 선택 | ||
| - 오늘/월별 Todo 통계 제공 | ||
| - `localStorage` 기반 데이터 저장 | ||
| - 모바일과 데스크톱에 대응하는 반응형 UI | ||
|
|
||
| 막히는 부분이 있더라도 우선은 스스로 공부하고 찾아보는 방법을 권고드리지만, 운영진의 도움이 필요하시다면 얼마든지 프론트엔드 카톡방에 편하게 질문을 남겨 주세요! | ||
| ## 폴더 구조 | ||
|
|
||
| # 과제 | ||
| ```text | ||
| vanilla-todo-23rd/ | ||
| ├─ index.html # 앱의 마크업 구조 | ||
| ├─ script.js # 캘린더, Todo, 통계 로직 | ||
| └─ style.css # 전체 UI 스타일 및 반응형 스타일 | ||
| ``` | ||
|
|
||
| ## 목표 | ||
| ## 기술 스택 | ||
|
|
||
| - VSCode, Prettier를 이용하여 개발 환경을 관리합니다. | ||
| - HTML/CSS의 기초를 이해합니다. | ||
| - JavaScript를 이용한 DOM 조작을 이해합니다. | ||
| - Vanilla Js를 이용한 어플리케이션 상태 관리 방법을 이해합니다. | ||
| | 구분 | 기술 | 사용 이유 | | ||
| | ---------- | -------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | | ||
| | Markup | <img src="https://img.shields.io/badge/html5-E34F26.svg?style=for-the-badge&logo=html5&logoColor=white" /> | 시맨틱한 구조로 캘린더, 통계, Todo 입력/목록 UI를 구성하기 위해 사용 | | ||
| | Styling | <img src="https://img.shields.io/badge/css3-663399.svg?style=for-the-badge&logo=css&logoColor=white" /> | 레이아웃, 상태별 스타일, 반응형 UI를 직접 제어하기 위해 사용 | | ||
| | Language | <img src="https://img.shields.io/badge/javascript-F7DF1E.svg?style=for-the-badge&logo=javascript&logoColor=black" /> | 캘린더 렌더링, Todo CRUD, 통계 계산 등 동적인 동작을 구현하기 위해 사용 | | ||
| | Formatting | <img src="https://img.shields.io/badge/prettier-1A2B34.svg?style=for-the-badge&logo=prettier&logoColor=F7B93E" /> | 코드 포맷을 일관되게 유지해 가독성과 유지보수성을 높이기 위해 사용 | | ||
| | Deploy | <img src="https://img.shields.io/badge/vercel-000000.svg?style=for-the-badge&logo=vercel&logoColor=white" /> | 정적 웹 앱을 배포하고 실제 동작을 빠르게 확인하기 위해 사용 | | ||
|
|
||
| ## 기한 | ||
| ## 실행 방법 | ||
|
|
||
| - 2026년 3월 14일 토요일 23:59까지 | ||
| ```bash | ||
| git clone -b waldls https://github.com/waldls/vanilla-todo-23rd.git | ||
| cd vanilla-todo-23rd | ||
| ``` | ||
|
|
||
| ## Review Questions | ||
|
|
||
| - DOM은 무엇인가요? | ||
| - 이벤트 흐름 제어(버블링 & 캡처링)이 무엇인가요? | ||
| - 클로저와 스코프가 무엇인가요? | ||
|
|
||
| ## 필수 요건 | ||
|
|
||
| - [결과 화면](https://vanilla-todo-21th-jet.vercel.app/)의 기능을 구현합니다. (날짜, 요일별 todo 개수) | ||
| - 결과 링크의 화면 디자인 그대로 구현해도 좋고, 자신만의 디자인을 적용해도 좋습니다. | ||
| - CSS의 Flexbox를 이용하여 레이아웃을 구성합니다. | ||
| - JQuery, React, Bootstrap 등 외부 라이브러리를 사용하지 않습니다. | ||
| - 함수와 변수의 이름은 lowerCamelCase로 짓습니다. | ||
| - 코딩의 단위를 기능별로 나누어 Commit 메세지를 작성합니다. | ||
| - Semantic tag를 활용하여 HTML 구조를 완성합니다. | ||
|
|
||
| ## 선택 요건 | ||
|
|
||
| - 외부 폰트 Pretendard를 적용합니다. | ||
| - 브라우저의 `localStorage` 혹은 `sessionStorage`를 이용하여 다음 번 접속 시에 기존의 투두 데이터를 불러옵니다. | ||
| - 미디어쿼리를 이용해서 반응형을 적용합니다. | ||
| - 이 외에도 추가하고 싶은 기능이 있다면 마음껏 추가하셔도 됩니다. | ||
|
|
||
| # 링크 및 참고자료 | ||
|
|
||
| - [HTML/CSS 기초](https://heropy.blog/2019/04/24/html-css-starter/) | ||
| - [HTML 태그](https://heropy.blog/2019/05/26/html-elements/) | ||
| - [FlexBox 가이드](https://heropy.blog/2018/11/24/css-flexible-box/) | ||
| - [JS를 통한 DOM 조작](https://velog.io/@bining/javascript-DOM-%EC%A1%B0%EC%9E%91%ED%95%98%EA%B8%B0#append) | ||
| - [localStorage, sessionStorage](https://www.daleseo.com/js-web-storage/) | ||
| - [git 사용법](https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story/) | ||
| - [좋은 코드리뷰 방법](https://tech.kakao.com/2022/03/17/2022-newkrew-onboarding-codereview/) | ||
| - [MDN 공식문서-createElement()](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement) | ||
| - [MDN 공식문서-appendChild()](https://developer.mozilla.org/ko/docs/Web/API/Node/appendChild) | ||
| - [DOM 개념,HTML 요소 조작](https://poiemaweb.com/js-dom#3-dom-query--traversing-%EC%9A%94%EC%86%8C%EC%97%90%EC%9D%98-%EC%A0%91%EA%B7%BC) | ||
| 이후 `index.html`을 브라우저에서 열면 별도의 빌드 과정 없이 바로 실행할 수 있습니다. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,86 @@ | ||
| <!doctype html> | ||
| <html lang="ko"> | ||
| <head> | ||
| <meta charset="UTF-8" /> | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
| <title>Vanilla Todo</title> | ||
| <link rel="stylesheet" href="style.css" /> | ||
| </head> | ||
| <body> | ||
| <div id="app"> | ||
| <header id="appHeader"> | ||
| <h1>Vanilla Todo</h1> | ||
| </header> | ||
| <main id="appMain"> | ||
| <section id="calendarSection"> | ||
| <div id="calendar" role="region" aria-labelledby="calendarTitle"> | ||
| <div id="calendarHeader"> | ||
| <button id="prevMonthBtn" aria-label="이전 달">◀</button> | ||
| <span id="calendarTitle"></span> | ||
| <button id="nextMonthBtn" aria-label="다음 달">▶</button> | ||
| </div> | ||
| <div id="calendarWeekdays" role="row"> | ||
| <span>일</span> | ||
| <span>월</span> | ||
| <span>화</span> | ||
| <span>수</span> | ||
| <span>목</span> | ||
| <span>금</span> | ||
| <span>토</span> | ||
| </div> | ||
| <div id="calendarDays" role="grid"></div> | ||
| </div> | ||
| <aside id="todayStats" role="region" aria-label="오늘 통계"> | ||
| <div id="todayStatsHeader"> | ||
| <p id="todayStatsText" aria-live="polite"></p> | ||
| <span id="todayStatsPercent" aria-live="polite"></span> | ||
| </div> | ||
| <div | ||
| id="todayProgressBarTrack" | ||
| role="progressbar" | ||
| aria-valuemin="0" | ||
| aria-valuemax="100" | ||
| aria-valuenow="0" | ||
| aria-label="오늘 완료율" | ||
| > | ||
| <div id="todayProgressBarFill"></div> | ||
| </div> | ||
| </aside> | ||
| <aside id="monthStats" role="region" aria-label="이번 달 통계"> | ||
| <div id="statsHeader"> | ||
| <p id="statsText" aria-live="polite"></p> | ||
| <span id="statsPercent" aria-live="polite"></span> | ||
| </div> | ||
| <div | ||
| id="progressBarTrack" | ||
| role="progressbar" | ||
| aria-valuemin="0" | ||
| aria-valuemax="100" | ||
| aria-valuenow="0" | ||
| aria-label="이번 달 완료율" | ||
| > | ||
| <div id="progressBarFill"></div> | ||
| </div> | ||
| </aside> | ||
| </section> | ||
| <section id="todoSection" aria-label="할 일 목록"> | ||
| <h2 id="selectedDateTitle"></h2> | ||
| <div id="todoListWrapper"> | ||
| <ul id="todoList" aria-live="polite" aria-label="할 일 목록"></ul> | ||
| </div> | ||
| <div id="todoInputArea"> | ||
| <input | ||
| type="text" | ||
| id="todoInput" | ||
| placeholder="할 일을 입력하세요" | ||
| autocomplete="off" | ||
| aria-label="할 일 입력" | ||
| /> | ||
| <button id="todoAddBtn">추가</button> | ||
| </div> | ||
| </section> | ||
| </main> | ||
| </div> | ||
| <script src="script.js"></script> | ||
| </body> | ||
| </html> | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 시맨틱 태그를 꼼꼼하게 달아주셔서 코드를 읽는 것만으로도 발표 때 보여주셨던 그림이 상상됩니다! |
||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Prettier 를 이용해 개발 환경을 관리하셔서 코드가 전체적으로 깔끔하게 느껴졌습니다!
특히
"semi": false설정 덕분에 JS 코드가 줄 끝이 시각적으로 깔끔하게 정리되어 있어 가독성이 좋았습니다.개인적으로는
"singleQuote": true설정 덕분에 HTML에서는" "를, JS에서는' '를 사용하여 파일별로 시각적으로 구분이 되어 코드 읽기가 훨씬 편했습니다!