본문 바로가기

programming study/Clone coding

[노마드코더]코코아톡 클론코딩 (7)(2021.1.8)

본 내용은 해당 강의 토대로 작성

Cloning time

1. chats.html

chats

Chats Screen part One

  • 이제부터는 전의 html코드를 가져와서 사용하므로 빠르게 진행할 수 있다.
  • 목표로하는 페이지의 모습에 맞게 headericon들을 적절한 것들로 바꾼다.
    • 상단 icon 추가
    • 하단 chat icon 채워짐 효과(다른 icon으로 대체)
    • 하단 friends icon 비워짐 효과(다른 icon으로 대체)
    • subtitle 추가 및 프로필 삭제 등
  • margin, padding을 조절한다.

Chats Screen part Two

badge component

  • 지난 시간에 만들었던 badge는 이번 페이지에도 사용되므로 component화 한다.
  • css/components/badge.css 에 아래처럼 badge의 설정을 작성
.badge {
  display: block;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: tomato;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  color: whitesmoke;
  font-weight: 600;
}
  • css/style.cssimport한다.
@import "components/badge.css";
  • chats.html에 적용한다.
<div class="user-component__column">
  <span class="user-component__time">12:00</span>
  <div class="badge">
   1
  </div>
</div>
  • firends.html에 적용한다.(chats.html하단에도 적용)
<a class="nav__link" href="chats.html">
  <span class="nav__notification badge">1</span>
  <i class="fas fa-comment fa-2x"></i>
</a>

badge와 time 정렬

  • badge와 time을 세로로 나란히 정렬한다.
  • css/components/user-component.css에서 flex-direction: column설정 한다.
.user-component__column:last-child {
  color: rgba(0, 0, 0, 0.4);
  display: flex;
  flex-direction: column;
  align-items: flex-end;
}

friends.html 수정

  • 위처럼 user-component__columnflex-direction:column을 주게 되면, friends.html의 화면이 깨지게 된다.
  • 설정을 적용하지 않으려면, 부모 요소에 영향을 받지 않게 하기 위해서 div태그를 씌워준다.
<div>
  <span>2</span>
  <i class="fas fa-chevron-right fa-xs"></i>
</div>

완성된 페이지

스크린샷 2021-01-08 오후 12.03.47

2. find.html

Find

Find Screen part One

  • chats.html을 토대로 만들 페이지를 구현하기 위해 삭제, 수정한다.

icon css

  • icon css를 만든다.
  • css/screen/fing.css에서 아래와 같이 설정한다.
.find-icons {
  display: flex;
  justify-content: space-between;
  border-bottom: 1px solid rgba(0, 0, 0, 0.3);
}
.find-icons__icon {
  display: flex;
  flex-direction: column;
  align-items: center;
}
.find-icons__icon i {
  font-size: 35px;
}
.find-icons span {
  margin-top: 18px;
}
  • 이후 styles.cssimport
@import "screens/find.css";

Find Screen part Two

색상 설정 변수화

  • 자주 쓰는 설정은 변수화를 하는 것이 좋다.
  • css/variables.css:root에 아래를 추가
  --gray: rgba(0, 0, 0, 0.5);
  • html 코드 작성
<div class="recommended-friends">
  <h6 class="recommended-friends__title">recommended Friends</h6>
  <span>You have no recommended friends.</span>
</div>
  • CSS 코드 작성 (css/screens/find.css)
.recommended-friends {
  margin: 25px 0px;
  padding: 25px 0px;
  border-top: var(--main-border);
  border-bottom: var(--main-border);
}
.recommended-friends__title {
  font-size: 14px;
  color: var(--gray);
}
.recommended-friends span {
  display: block;
  margin: 100px 0;
  text-align: center;
  font-size: 18px;
  color: var(--gray);
}

Find Screen part Three

Open post 만들기

  • html 코드 작성
        <div class="open-chat">
            <div class="open-chat__header">
                <h4 class="open-chat__title">Open chat</h4>
                <span>
                    Go to Openchat Home
                    <i class="fas fa-chevron-right fa-xs"></i>
                </span>
            </div>
            <div class="open-post">
                <div class="open-post__column">
                    <h5 class="open-post__title">#BTS</h5>
                    <h6 class="open-post__hashtags">#bts#army#friedns</h6>
                    <div class="open-post__members">
                        <img src="https://tistory3.daumcdn.net/tistory/4367973/attach/059c57a4a960451fad4115308781a782" />
                        <span class="open-post__member-count">820 members</span>
                        <div class="divider"></div>
                        <span class="open-post__member-status">Active</span>
                    </div>
                </div>
                <div class="open-post__column"></div>
            </div>
        </div>
  • CSS 코드 작성
.open-chat__header {
  display: flex;
  justify-content: space-between;
  opacity: 0.8;
  margin-bottom: 25px;
}

.open-chat__header span {
  opacity: 0.6;
}

.open-post {
  display: flex;
}

.open-post__title {
  font-weight: 600;
  margin-bottom: 7px;
}

.open-post__hashtags {
  text-transform: uppercase;
  opacity: 0.6;
}

.open-post__members {
  margin-top: 7px;
  display: flex;
  align-items: center;
}

.open-post__members img {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  margin-right: 5px;
}

.open-post__member-count {
  opacity: 0.5;
  font-size: 14px;
}

.open-post__members .divider {
  width: 2px;
  height: 15px;
  margin: 0 5px;
  background-color: rgba(0, 0, 0, 0.2);
}

.open-post__member-status {
  color: #ffb0e0;
}
  • uppercase는 해당 요소를 대문자로 만들어 준다.

Fing Screen part Four

Open post 마무리하기

  • 남은 column의 컨텐츠를 채운다.
  • html 코드 작성
                <div class="open-post__column">
                    <div class="open-post__photo">
                        <img src="https://tistory3.daumcdn.net/tistory/4367973/attach/059c57a4a960451fad4115308781a782" />
                        <div class="open-post__heart-count">
                            <i class="fas fa-heart fa-xs"></i> <span>326</span>
                        </div>
                    </div>
                </div>
  • CSS 코드 작성
.open-post {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.open-post__photo img {
  width: 120px;
  height: 120px;
  border-radius: 10px;
}

.open-post__photo {
  position: relative;
}

.open-post__heart-count {
  background-color: var(--gray);
  color: whitesmoke;
  padding: 5px;
  border-radius: 20px;
  display: flex;
  align-items: center;
  position: absolute;
  bottom: 10px;
  right: 10px;
  font-size: 12px;
}

.open-post__heart-count span {
  margin-left: 3px;
}
  • position에서 absolute는 자식 요소, relative는 부모요소인 것을 잊지말자.

완성된 페이지

스크린샷 2021-01-08 오후 4.59.45

Source Code

https://github.com/greedysiru/kokoa-clone-2021