지난주동안 배웠던 내용들을 바탕으로 twitter와 비슷하게 웹페이지를 구현해보는 연습을 했다. 아직 실제 데이터를 자동으로(?) 넣는 방법은 배우지 않아서 HTML에 몇개의 데이터만 일일이 입력하는 식으로 목업만 완성했다! 완성하기까지의 과정 중 기억해둘만한 부분만 기록으로 남겨두려고 한다. (최종적으로 완성된 모습은 여기👈서 볼 수 있다. Change View를 Full Page View로 하고 보는걸 추천한다)
Step1. Framework
먼저 프레임워크를 오른쪽처럼 구상했다. 구성은 크게 header, writing-section, contents-section 세 부분으로 나누었다.
✔️ header
: 로고, 새로고침 버튼이 포함된 부분
✔️ writing-section
: 글을 작성하는 부분
div, img : 프로필이미지
input#new-comment : 글 작성하는 곳
✔️ contents-section
: 작성한 글을 보는 부분
div, img : 프로필 이미지
span.username : 작성한 유저
div.comment : 작성 글
span.createdAt : 작성 시간
세 부분을 html에 <header>, <section> 태그를 사용해 틀을 만들어두고, 나머지 요소들을 하위 태그로 넣는 방식으로 html을 작성하고자 했다.
실제 트위터를 보니 왼쪽에는 메뉴바(menubar)가, 오른쪽에는 사이드바(sidebar)가 있길래 이 부분도 더해보고자 했다. 위의 main부분 양 옆에다가 두 부분을 추가해 보았다.
Step2. HTML, CSS 작성하기
HTML은 다행히도 프레임워크를 짤 때 class와 id 이름까지 대략 지정해두어서 차례대로 입력만 하면 되었다.
CSS에서는 먼저 flex를 사용해 전체적인 레이아웃을 먼저 잡았다. 먼저 menubar, main, sidebar 세 부분은 가로방향으로 정렬하기 위해 flex-direction:row를 설정했고, 각각의 박스 안에서는 내부 요소들이 세로로 정렬될 수 있도록 박스마다 또 다시 flex를 설정해 flex-direction:column을 적용해줬다. 특히 메인부분은 세로 방향으로 header, writing-section, contents-section으로 나뉘고, contents-section 안에서 여러개의 글(contents)들이 다시 세로 정렬되기 때문에 flex를 여러겹으로 사용해야 했다.
✔️ contents-section 내부 정렬
가장 어려웠던 부분은 contents-section 내부에서의 정렬이었다. 프로필 사진을 왼쪽에 넣고싶었는데, 이렇게 하려니까 이 안에서 또! flex를! 두번이나 이용해야했다. 다른 방법이 있을 것 같기도 했지만,,, 일단 flex를 마스터해보자는 마음으로 flex만 이용해서 구현해보았다. 우선 이미지가 들어갈 div.userimg 부분과 작성자, 내용, 날짜가 들어갈 div.content 두 부분으로 크게 나누어 가로로 정렬했다.(flex-direction:row;). 그리고 div.content 안에서 작성자(span.username), 글 내용(div.comment), 작성날짜(span.createdAt)는 세로로 정렬(flex-direction:column;)해주었다.
✔️ hover(색상 전환 효과), cursor(마우스 포인터 모양 변경)
메뉴바 부분에서 마우스를 가져다 댈 때만 그 부분의 글자 색상이 변하고, 커서의 모양이 화살표가 아닌 손모양으로 변하도록 하고싶었다. 그래서 가상 클래스 선택자 중 :hover를 이용해, hover(요소에 마우스가 올라간 동안 선택) 상태일 때만 color는 하늘색으로, 커서는 손모양으로 지정해주는 코드를 작성했다. 아래 보이는 .menu p가 가만히 있었을 때 메뉴 글씨들의 기본 설정 부분이고, .menu p:hover이 마우스가 올라간 동안의 설정 부분이다.
커서 모양이 바뀌는건 cursor:pointer; 이 부분인데, 편리하게도 따로 hover선택자를 사용하지 않아도, 자동으로 hover상태일 때 포인터 모양을 바꿔준다. (캡쳐할 때 커서는 빼버리고 캡쳐가 되어서 이부분은 사진이 없다😥) 이 기능은 메뉴 뿐만 아니라 모든 버튼에 적용해주었다.
✔️아이콘 넣기
위의 메뉴바를 보면, 많은 아이콘들이 들어간 것을 볼 수 있다. 아이콘은 fontawesome이라는 사이트에서 소스를 가져오는 식으로 넣어보았다. fontawesome에 가입하고, 각자 받은 script 코드를 html에 넣어두기만 하면, 여기있는 모든 아이콘들을 필요에 따라 찾아서 사용할 수 있다. 아래 두 화면 중 오른쪽 화면을 자세히 보면, <i class="fas fa-home"></i>라고 된 부분이 있는데 이부분을 복사해서 html에 붙여넣기만 하면된다. 기본적으로 검정색으로 아이콘이 들어가는데, CSS에서 color속성으로 원하는 색상을 지정해 주면 된다. 그리고 크기를 좀 더 크게 넣고자 할 때는, font-size 속성으로 사이즈를 지정해주면 된다. 사실 처음에 width와 height로 크기를 변경해보려고 시도했었는데 안돼서 검색해보니 특이하게도 font-size로 지정해 줘야 했다.
✔️ outline 설정
input태그를 사용해서 글 내용을 입력받을 수 있게 하는 박스 부분에서, border:none; 설정을 통해 윤곽선을 지워 아래와 같은 상태로 만들었다.
여기까지는 아무 문제가 없는 듯 했는데, 이렇게 내용을 입력하려고 input 박스를 선택하니 갑자기 안보이던 윤곽선이 나타났다. 좀 더 깔끔하게(?) 만들고싶어서 이렇게 나타나는 윤곽선도 없애버리고 싶어서 의식의 흐름대로 구글에 'css input 클릭시 테두리'라고 검색하니 바로 나왔다. border외에도 outline속성까지 none으로 지정해주면 해결되는 문제였다.
outline:none; 속성 지정후의 모습이다. 이렇게 input박스를 클릭해도 이제 윤곽선이 생기지 않게 되었다!
✔️ CSS 설정 초기화
추가적인 팁(?)으로, CSS파일을 작성하다보면 기본적으로 요소들에 border, margin, padding 값 등이 설정되어 있는 것을 볼 수 있다. 오히려 이런 기본 설정들이 내가 원하는 디자인을 하는 데 방해가 되기도 해서, 맨 처음에 CSS 설정을 초기화 하는 코드를 넣어줬다. CSS Tools라는 사이트에 가보면 이렇게 모든 초기 설정들을 reset해주는 코드가 있어서 CSS 파일 앞에 넣어주기만 하면 된다. 맨 처음에 적용했을 때는 정말 글자들만 덩그러니 남겨진 모습이 보여서 당황스러웠지만, 하나씩 속성을 적용하다보니 뭔가 오히려 방해되었던 것들이 없어지는 느낌..?이 들어서 앞으로도 애용할 것 같다.
Step3. 최종 완성
최종적으로 완성된 모습이다 👏👏👏 (완성본 링크) HTML, CSS만 가지고 만들어서 아직은 실제로 무언가 작동하지는 않지만, 얼른 Javascript도 더 공부해서 트윗을 누르면 글이 업로드도 되고, 그렇게 업로드된 글들이 목록에 하나씩 추가되도록 개선해나가야겠다 ✊🏻
'Project > Toy Project' 카테고리의 다른 글
포켓몬 게임 만들기 (Javascript, HTML, CSS) (3) | 2021.01.23 |
---|---|
날씨 APP 만들기 (OpenWeather API 활용) (5) | 2021.01.05 |
회원가입 페이지 만들기 (유효성 검사) (0) | 2020.12.25 |
댓글