절주온 메인페이지 클론코딩 프로젝트
'절주온(alcoholstop)' 웹사이트의 메인 페이지를 클론코딩하며, 웹 퍼블리싱의 기본기와 반응형 웹 제작 능력을 향상시키는 데에 목적이 있습니다.
| 📌 팝업 버전 첫 접속 시 팝업 등장 |
📌 일반 메인 화면 팝업 비활성화 상태 |
📌 메뉴 확장 상태 드롭다운 메뉴 활성화 |
|---|---|---|
![]() |
![]() |
![]() |
- 강의에서 배운 레이아웃, 반응형, 속성에 대한 이해 및 응용
- 실제 사이트를 참고하여 구조적으로 HTML/CSS 설계하기
- 반응형 웹사이트 제작 및 미디어쿼리 적용
- 팝업, 햄버거 메뉴 등 기본 JavaScript 기능 구현
- HTML5
- CSS3
- JavaScript (Vanilla)
- 미디어쿼리 (Responsive Web)
- 2025년 3월 10일 (월) ~ 2025년 3월 28일 (금)
총 3주간 진행
멋진 절주온 클론코딩 프로젝트를 함께한 팀원들을 소개합니다.
| 이름 | 역할 | GitHub |
|---|---|---|
| 🥊김윤지 [팀장] | Main | @kkamisister |
| 🔧김하연 | Header, 팝업 | @rlaxhfn |
| 🥕사윤민 | Header | @saym010116 |
| 🦕조혜련 | Header | @HyeEmpathyDev |
| 🐰김려린 | Main | @ryeorin |
| 🐶유상은 | Main | @sangeune |
| 🕊️황선주 | Footer | @seonju21 |
1. Header 전체 메뉴 구현
- 전체메뉴(☰) 관련 기능
- 전체 메뉴 Close 버튼(x) 호버 시 transform 효과 적용
- 햄버거 버튼(☰) 클릭 시 전체 메뉴를 열거나 닫는 기능 구현
- 전체 메뉴가 show 상태일 때, scrollFixed 클래스를 추가하여 페이지 스크롤을 막음
2. Popup 구현
-
팝업창 Default 관련 기능
- 웹페이지 실행 시 팝업창이 자동으로 나타나도록 설정
- 팝업창이 show 상태일 때, scrollFixed 클래스를 추가하여 스크롤을 고정
-
팝업창 닫기 관련 기능
- Close 버튼(x) 호버 시 transform 효과 적용.
- Close 버튼(x) 클릭 시 팝업창을 닫고, scrollFixed 클래스를 삭제
- "오늘 하루 열지 않기" 버튼 호버 시 아이콘(x)에 transform 효과 적용
- "오늘 하루 열지 않기" 버튼 클릭 시 쿠키를 생성
-
웹페이지 실행 시 쿠키를 확인하여:
- 쿠키가 있다면 팝업을 닫음
- 쿠키가 없다면 팝업을 열음
-
팝업 콘텐츠 슬라이드 관련 기능
- Swiper.js를 이용하여 팝업 콘텐츠 슬라이드 구현
- swiper-slide, autoPlay, 슬라이드 개수(swiper-count-slide) 관련 기능 포함
3. Skip Navigation 구현
- 스킵 메뉴 관련 기능
- 네비게이션이 focus 상태일 때 나타나도록 설정
1. 헤더 레이아웃 구현
- 로고, 네비게이션 메뉴, 햄버거 버튼으로 구성된 헤더 영역을 생성
2. 드롭다운 메뉴 기능 구현 및 스타일링
- 상위 메뉴에 마우스를 올리면 하위 메뉴가 드롭다운으로 표시되도록 구현
- 항목에 마우스를 올릴 시 글씨 색이 흰색으로 바뀌고, 글씨 크기와 굵기가 강조되도록 처리
3. 반응형 헤더 구현
- 화면 너비가 1100px 이하일 경우 네비게이션 메뉴를 숨기고 로고가 축소되도록 반응형 구현
1. 사이트 바로가기 메뉴
- 절주온(ON) 버튼을 클릭 시 관련 사이트 리스트가 토글되며 보여지도록 구현
- 리스트는 외부 사이트 링크로 연결하여 새창으로 열리도록 구현
- 리스트 마우스오버시 메뉴 항목 hover 효과로 색상 변화, 밑줄이 생기도록 구현
2. 대표 SNS 영역
- 대표 SNS 버튼 클릭 시, Facebook / Instagram / YouTube / Naver Blog 아이콘 리스트가 토글되도록 구현
- 각 SNS는 브랜드 컬러로 원형 배경 처리
- 마우스 hover 시에는 배경이 흰색으로, 테두리와 아이콘 색상은 원래 컬러로 변경되도록 구현
- 아이콘들은 모두 xeicon 사용
3. "알콜스탑 캠페인" 버튼
- 버튼 클릭 시 외부 사이트 링크로 연결하여 알콜스탑 인스타그램 새창으로 열리도록 함
1. 메인 페이지 센터 구현
- 페이지 가운데 캐릭터 배치, 캠페인 관련 텍스트 생성
2. 반응형 디자인 구현
- 미디어 쿼리 사용하여 화면 크기에 따라 요소들의 순서가 조정되도록 반응형 구현
1. ‘소통, 이야기를 전해요’ 섹션 레이아웃 및 디자인
- 절주온 메인 페이지 중 뉴스 및 소식을 다루는 핵심 콘텐츠 영역 레이아웃 설계
- 뉴스 대표 콘텐츠 + 요약 리스트의 구조로 정보를 명확하게 전달할 수 있도록 배치
2. 탭 전환 기능 구현 (Vanilla JS)
addEventListener를 활용한 탭 전환 로직 구현- 각 탭 클릭 시 해당 뉴스 콘텐츠만 노출되도록
classList.toggle방식으로 동적 전환 - 활성화(active)된 탭에 따라 ‘더보기’ 버튼의 링크가 자동으로 변경되도록 제어하여 UX 향상
3. 주요사업 영역 레이아웃 구현
- 절주온에서 강조하는 주요사업을 아이콘과 텍스트로 시각화
- 모든 아이템의 크기를 통일하고, 반응형에서도 균형 잡힌 UI를 유지하도록
flex기반 레이아웃 구성 - 텍스트 줄바꿈 제어 및 hover 시 밑줄 애니메이션을 추가하여 정보 접근성 향상
1. 메인 레이아웃 구현
- 메인 컨텐츠를 중심으로 페이지의 전체적인 구조 설계
- display: flex를 활용하여 요소 배치
2. 최신 자료 영역 구현
- 최신 자료 목록을 담는 카드 스타일의 박스를 디자인
3. 최신 자료 리스트 스타일링
- display: flex, flex-wrap: wrap을 사용하여 반응형 목록 정렬
- text-overflow: ellipsis를 활용해 긴 제목을 말줄임 처리
4. 절주 전문 인력 양성과정 바로가기 스타일링
- 배경색과 border-radius를 사용해 버튼형 UI 구현
- hover 시 화살표 아이콘 애니메이션 효과 (transform: translateX(10px)) 구현
1. 유연한 푸터 디자인
- footer-content의 max-width와 margin: 0 auto로 중앙 정렬
- flex를 사용해 레이아웃이 반응형으로 잘 유지되도록 구현
2. 링크와 인터랙션 개선
- 링크에 호버 시 색상과 밑줄이 생겨 클릭 가능성을 직관적으로 알 수 있도록 구현
- 중요한 링크는 다른 색상으로 구분
3. 웹사이트 선택 기능 구현
- 드롭다운 메뉴로 다양한 웹사이트로 이동되도록 구현
- 메뉴 선택 시 자동으로 해당 사이트로 이동되도록 구현
- HTML / CSS 기본 구조 구현
- header, main, footer 파트 분배 후 각자 구현 진행
기본 메인 페이지
드롭다운 메뉴 활성화
- 미디어쿼리 반응형 적용
- JavaScript 기능 구현
- 팝업 인터랙션 및 세부 디자인 보완
쿠키 확인 후 팝업 확장
기관 메뉴 드롭다운
메인 메뉴 드롭다운
햄버거 메뉴 확장
화면 너비에 따라 반응형 구현
| width 821px 이상 | width 820px 이하 |
|---|---|
![]() |
![]() ![]() |
| 원본 사이트 | 클론코딩 결과 |
|---|---|
![]() |
![]() |
| 원본 사이트 | 클론코딩 결과 |
|---|---|
![]() |
![]() |
| 원본 사이트 | 클론코딩 결과 |
|---|---|
![]() |
![]() |
| 원본 사이트 | 클론코딩 결과 |
|---|---|
![]() |
![]() |
| 원본 사이트 | 클론코딩 결과 |
|---|---|
![]() |
![]() |
| 원본 사이트 | 클론코딩 결과 |
|---|---|
![]() |
![]() |
원활한 협업을 위한 브랜치 동기화 및 병합 전략
- 로컬
feature→ 원격feature최신화 - 원격
develop→ 로컬develop최신화 - 로컬
develop→ 로컬feature병합 (충돌 여부 확인) - 병합 및 충돌 해결 후 → 원격
feature에 반영 - 최종적으로 원격
feature→ 원격develop에 PR 생성 - PR approve 후
develop에 병합
형식: 키워드: 커밋 메시지 내용
예시:
Fix: 회원가입 시 비밀번호 정규식 오류 해결
| 키워드 | 설명 |
|---|---|
| Feat | 새로운 기능 추가 |
| Fix | 버그 수정 |
| Refactor | 코드 리팩토링 |
| Design | CSS 등 UI/UX 디자인 변경 |
| Comment | 주석 추가/수정 |
| Docs | 문서 관련 작업 (README 등) |
| Init | 초기 설정 및 구성 |
| Rename | 파일/폴더명 변경 |
| Remove | 파일 삭제 |
형식: feature/{issue-number}-{feature-name}
예시:
feature/1-init-projectfeature/2-main-layout
### [#이슈번호] 기능 구현 제목
## 개요
- 무엇을, 왜 수정했는지 설명해주세요.
## PR 유형
- [ ] 새로운 기능 추가
- [ ] 버그 수정
- [ ] CSS 등 사용자 UI 디자인 변경
- [ ] 코드 리팩토링
- [ ] 코드에 영향 없는 수정
- [ ] 문서 수정
- [ ] 테스트 추가/리팩토링
- [ ] 빌드/패키지 관련
- [ ] 파일/폴더명 수정
- [ ] 파일 삭제
## PR Checklist
- [ ] 커밋 메시지 컨벤션을 지켰나요?
- [ ] 기능 테스트를 완료했나요?
- [ ] develop 브랜치로 머지 요청했나요?
- name: '🐛 bugfix'
color: 'd73a4a'
description: '버그 픽스'
- name: '✨ feature'
color: '0E8A16'
description: '새로운 기능 추가'
- name: '🔁 refactor'
color: 'c2e0c6'
description: '리팩토링 작업'
- name: '📄 documentation'
color: '0075ca'
description: '문서 관련 작업'
- name: '💬 question'
color: 'd876e3'
description: '논의/질문'
- name: '🎨 design'
color: 'ffb3c6'
description: 'UI/UX 관련 작업'
- name: '🧪 test'
color: 'f9d0c4'
description: '테스트 코드 또는 테스트 관련 작업'

















