유튜브모바일

하리보좋아·2023년 4월 20일
0
post-thumbnail


유튜브 보면서 이거 똑같이 따라해봤음!

먼저 섹션을 어떻게 나눌지 흠,, 생각해본다!

크게 4개로 분류 헤더/ 영상나오는 부분/ 영상 정보나오는 부분/ 업넥스트부분 크게 나누어서 시작한다!

헤더부분

<header>
      <div class="logo">
        <i class="fab fa-youtube"></i>
        <span>Youtube</span>
      </div>
      <div class="icons">
        <i class="fa-search"></i>
        <i class="fa-ellipsis-v"></i>
      </div>
    </header>
header {
  display: flex;
  justify-content: space-between;
  padding: var(--side-padding);
  background-color: var(--blaack-color);
  color: var(--white-color);
}

header .logo {
  font-size: var(--font-large);
}

header .logo i {
  color: var(--red-color);
}
header .icons .fa-search {
  margin-right: var(--side-padding);
}

헤더안에서도 유튜브로고부분/헤더오른쪽에 아이콘들 이렇게 나눠야겠다는 생각을해야한다. 이제 좀 감이잡혀서 바로 어떻게해야할지 그려진다 ㅎ 디스플레이로 저 두개를 양끝쪽으로 붙여야하기때문에 space-between바로 고고! 다음 패딩값주고 색들 바꿔주고 아이콘끼리 간격줘야하니깐 마진값 주기!!
여기는 쉬움 ㅎㅎ

<section class="player">
      <div>
        <iframe
          width="1000"
          height="500"
          src="https://www.youtube.com/embed/67stn7Pu7s4"
          title="YouTube video player"
          frameborder="0"
          allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
          allowfullscreen
        ></iframe>
      </div>
    </section>
.player {
  position: sticky;
  top: 0;
  display: flex;
  justify-content: center;
  background-color: var(--blaack-color);
}
.player video {
  width: 100%;
  height: 100%;
  max-width: 1000px;
}

이거 만들면서 새로배운거 position: sticky;! 이건 뭐 크기주고 정렬맞추고 끝!

다음, 영상 정보 섹션!

<section class="info">
        <div class="metadata">
          <ul class="hashtags">
            <li>#쉬고싶어</li>
            <li>#술마시고싶어</li>
            <li>#술?생각도하지마</li>
          </ul>
          <div class="titleAndButton">
            <span class="title">
              Clone Coding: Youtube Mobile Website 유투브 모바일 웹사이트 따라
            만들기 ㅣ 프론트엔드 개발자 입문편: HTML, CSS, Javascript 드림코딩과
            함께하는 프론트엔드 실전 입문편
            </span>
            <button class="noreBtn">
              <i class="fas fa-caret-down"></i>
            </button>
          </div>
          <div class="views">
            <span class="views">1M views 1 month ago</span>
          </div>   
          
        </div>
        <ul class="actions">
          <li><button><i class="fas fa-thumbs-up"></i><span>1K</span>/button></li>
          <li><button><i class="fas fa-thumbs-down"></i><span>0</span></button></li>
          <li><button><i class="fas fa-share"></i><span>Share</span></button></li>
          <li><button><i class="fas fa-plus"></i><span>Save</span></button></li>
          <li><button><i class="fab fa-font-awesome-flag"></i><span>Report</span></button></li>
        </ul>
        <div class="channel">
          <div class="metadata">
            <img src="./assets/img/main_bg.jpeg" alt="">
            <div class="info">
              <span class="name">이재원</span>
              <span class="subscribers">1M subcribers</span>
            </div>
          </div>
          <button class="subscribe">subscribe</button>
        </div>
      </section>
body > .info {
  padding: var(--side-padding);
}
.info .metadata .hashtags {
  display: flex;
  font-size: var(--font-small);
  color: var(--blue-color);
}
.info .metadata .hashtags li {
  margin-right: var(--side-padding);
}
.info .metadata .titleAndButton {
  display: flex;
}
.info .metadata .titleAndButton .title {
  font-size: var(--font-medium);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  margin-right: var(--side-padding);
}
.info .metadata .titleAndButton .moreBtn {
  height: 100%;
}
.info .views {
  font-size: var(--font-small);
  color: var(--grey-dark-color);
}
.actions {
  display: flex;
  justify-content: space-around;
  margin: var(--side-padding) 0;
}
.actions button {
  display: flex;
  flex-direction: column;
  font-size: var(--font-small);
  color: var(--grey-dark-color);
}
.actions button i {
  margin: 0 auto;
  margin-bottom: calc(var(--side-padding)/2);
  font-size: 16px;
}
.actions button i.actions {
  color: var(--blue-color);
}

.channel {
  display: flex;
  justify-content: space-between;
  border-top: 1px solid var(--grey-light-color);
  border-bottom: 1px solid var(--grey-light-color);
  
}
.channel .metadata {
  display: flex;
  align-items: center;
}
.channel .metadata .info {
  display: flex;
  flex-direction: column;
}
.channel .metadata img {
  
  width: var(--avatar-size);
  height: var(--avatar-size);
  border-radius: 50%;
}
.channel .metadata .info .subscriber {
  font-size: var(--font-small);
  color: var(--grey-dark-color);
}
.channel .subscriber {
  text-transform: uppercase;
  color: var(--red-color);
  font-size: var(--font-medium);
}
.channel .metadata .info .name {
  font-size: var(--font-medium);
}
.channel .metadata .info .subscribers {
  font-size: var(--font-small);
  color: var(--grey-dark-color);
}

.channel .subscribe {
  text-transform: uppercase;
  color: var(red);
  font-size: var(--font-medium);
}

여기선 해시태그부분와 타이틀부분 / 아이콘쭈르룩들어가는부분 / 채널부분으로 크게 나뉜다.
해시태그부분 가로로 정렬하기위해선 먼저 플렉스! 그리고 리스트 스타일 논! 해야 점없애기
타이틀이 두줄을 넘어가지 않게하기위해선 display:webkit-box라는게 있다고한다. webkit-line-clamp에 2라는 수치를 주면 두줄이 된다!
다음 아이콘버튼들을 가로로 만들어야하기때문에 여기도 플렉스를 사용한다. 각각 떨어트려야하기때문에 space-around사용하였고 각각 패딩값을 주어서 떨어트려주었다. 그안에 버튼들과 아이콘부분은 세로방향으로 해줘야하기때문에 flex-direction: column;사용하였다.

마지막 업넥스트 부분

.UpNext {
  padding: 0 var(--side-padding);
} 
.UpNext > .title {
  font-size: var(--font-medium);
  color: var(--grey-dark-color);
  margin-bottom: calc(var(--side-padding) / 2);
}
.UpNext .item {
  display: flex;
  margin-top: var(--side-padding);
}
.UpNext .item .img {
  flex: 1 1 35%
  
   
}
.UpNext .item .img img {
  width: 100%;
}
.UpNext .item .info {
   flex: 1 1 60%;
   margin-left: var(--side-padding);
}
.UpNext .item .moreBtn {
   flex: 1 1 5%;
}
.UpNext .item .info {
  display: flex;
  flex-direction: column;
}
.UpNext .item .info .title{
  font-size: var(--font-small);
}
.UpNext .item .info .name,
.UpNext .item .info .views {
  font-size: var(--font-micro);
  color: var(--grey-dark-color);
}

영상에 .UpNext > .title이렇게하면 바로 밑에있는 타이틀만 선택된다고해서 따라하긴했는데 잘 모르겠음,, 뭔소리인지 ,
그리고 섬네일부분과 타이틀부분 버튼부분 세개로 꽉차게 삼등분을 해야하기때문에 flex: 1 1 35%/60%/5% 각각 주어서 나누었다,

마지막으로 반응형으로 만들기

@media screen and (min-width:768px) {
  .infoandUpNext {
    flex-direction: row;
    margin: var(--side-padding) 0;
  }
}

가로길이가 최소768px부터 info와 upnext부분이 row로 바뀌게 설정하였다.
768px이하면 세로

결과!!

0개의 댓글