[30일 챌린지 Day-5] flex, classname 추가 활용

2022. 7. 25. 13:54·개발/html, css, js
728x90
반응형

1. 기본값

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Flex Panels 💪</title>
  <link href='https://fonts.googleapis.com/css?family=Amatic+SC' rel='stylesheet' type='text/css'>
</head>
<body>
  <style>
    html {
      box-sizing: border-box;
      background: #ffc600;
      font-family: 'helvetica neue';
      font-size: 20px;
      font-weight: 200;
    }
    
    body {
      margin: 0;
    }
    
    *, *:before, *:after {
      box-sizing: inherit;
    }

    .panels {
      min-height: 100vh;
      overflow: hidden;
    }

    .panel {
      background: #6B0F9C;
      box-shadow: inset 0 0 0 5px rgba(255,255,255,0.1);
      color: white;
      text-align: center;
      align-items: center;
      /* Safari transitionend event.propertyName === flex */
      /* Chrome + FF transitionend event.propertyName === flex-grow */
      transition:
        font-size 0.7s cubic-bezier(0.61,-0.19, 0.7,-0.11),
        flex 0.7s cubic-bezier(0.61,-0.19, 0.7,-0.11),
        background 0.2s;
      font-size: 20px;
      background-size: cover;
      background-position: center;
    }

    .panel1 { background-image:url(https://source.unsplash.com/gYl-UtwNg_I/1500x1500); }
    .panel2 { background-image:url(https://source.unsplash.com/rFKUFzjPYiQ/1500x1500); }
    .panel3 { background-image:url(https://images.unsplash.com/photo-1465188162913-8fb5709d6d57?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&w=1500&h=1500&fit=crop&s=967e8a713a4e395260793fc8c802901d); }
    .panel4 { background-image:url(https://source.unsplash.com/ITjiVXcwVng/1500x1500); }
    .panel5 { background-image:url(https://source.unsplash.com/3MNzGlQM7qs/1500x1500); }

    /* Flex Children */
    .panel > * {
      margin: 0;
      width: 100%;
      transition: transform 0.5s;
    }

    .panel p {
      text-transform: uppercase;
      font-family: 'Amatic SC', cursive;
      text-shadow: 0 0 4px rgba(0, 0, 0, 0.72), 0 0 14px rgba(0, 0, 0, 0.45);
      font-size: 2em;
    }
    
    .panel p:nth-child(2) {
      font-size: 4em;
    }

    .panel.open {
      font-size: 40px;
    }

  </style>


  <div class="panels">
    <div class="panel panel1">
      <p>Hey</p>
      <p>Let's</p>
      <p>Dance</p>
    </div>
    <div class="panel panel2">
      <p>Give</p>
      <p>Take</p>
      <p>Receive</p>
    </div>
    <div class="panel panel3">
      <p>Experience</p>
      <p>It</p>
      <p>Today</p>
    </div>
    <div class="panel panel4">
      <p>Give</p>
      <p>All</p>
      <p>You can</p>
    </div>
    <div class="panel panel5">
      <p>Life</p>
      <p>In</p>
      <p>Motion</p>
    </div>
  </div>

  <script>

  </script>



</body>
</html>

2. 결과

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Flex Panels 💪</title>
    <link
      href="https://fonts.googleapis.com/css?family=Amatic+SC"
      rel="stylesheet"
      type="text/css"
    />
  </head>
  <body>
    <style>
      html {
        box-sizing: border-box;
        background: #ffc600;
        font-family: "helvetica neue";
        font-size: 20px;
        font-weight: 200;
      }

      body {
        margin: 0;
      }

      *,
      *:before,
      *:after {
        box-sizing: inherit;
      }

      .panels {
        min-height: 100vh;
        overflow: hidden;

        /* 추가한것 */
        display: flex;
      }

      .panel {
        background: #6b0f9c;
        box-shadow: inset 0 0 0 5px rgba(255, 255, 255, 0.1);
        color: white;
        text-align: center;
        align-items: center;
        /* Safari transitionend event.propertyName === flex */
        /* Chrome + FF transitionend event.propertyName === flex-grow */
        transition: font-size 0.7s cubic-bezier(0.61, -0.19, 0.7, -0.11),
          flex 0.7s cubic-bezier(0.61, -0.19, 0.7, -0.11), background 0.2s;
        font-size: 20px;
        background-size: cover;
        background-position: center;

        /* 추가한것 */
        width: 100%;
        display: flex;
        flex-direction: column;
        justify-content: center;
        flex: 1;
      }

      .panel1 {
        background-image: url(https://source.unsplash.com/gYl-UtwNg_I/1500x1500);
      }
      .panel2 {
        background-image: url(https://source.unsplash.com/rFKUFzjPYiQ/1500x1500);
      }
      .panel3 {
        background-image: url(https://images.unsplash.com/photo-1465188162913-8fb5709d6d57?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&w=1500&h=1500&fit=crop&s=967e8a713a4e395260793fc8c802901d);
      }
      .panel4 {
        background-image: url(https://source.unsplash.com/ITjiVXcwVng/1500x1500);
      }
      .panel5 {
        background-image: url(https://source.unsplash.com/3MNzGlQM7qs/1500x1500);
      }

      /* Flex Children */
      .panel > * {
        margin: 0;
        width: 100%;
        transition: transform 0.5s;
      }

      .panel p {
        text-transform: uppercase;
        font-family: "Amatic SC", cursive;
        text-shadow: 0 0 4px rgba(0, 0, 0, 0.72), 0 0 14px rgba(0, 0, 0, 0.45);
        font-size: 2em;

        height: 100%;

        /* 추가한것 */
        display: flex;
        justify-content: center;
        align-items: center;
      }

      .panel p:nth-child(2) {
        font-size: 4em;
      }
      .panel.open {
        font-size: 40px;

        /* 추가한것 */
        flex: 5;
      }
      /* 추가한것 */
      .panel p:nth-child(1) {
        transform: translateY(-100%);
      }
      .panel p:nth-child(3) {
        transform: translateY(100%);
      }
      .panel.open-active p:nth-child(1),
      .panel.open-active p:nth-child(3) {
        transition: 0.7s;
        transform: translateY(0);
      }
    </style>

    <div class="panels">
      <div class="panel panel1">
        <p>Hey</p>
        <p>Let's</p>
        <p>Dance</p>
      </div>
      <div class="panel panel2">
        <p>Give</p>
        <p>Take</p>
        <p>Receive</p>
      </div>
      <div class="panel panel3">
        <p>Experience</p>
        <p>It</p>
        <p>Today</p>
      </div>
      <div class="panel panel4">
        <p>Give</p>
        <p>All</p>
        <p>You can</p>
      </div>
      <div class="panel panel5">
        <p>Life</p>
        <p>In</p>
        <p>Motion</p>
      </div>
    </div>

    <script>
      const panel = document.querySelectorAll(".panel");
      panel.forEach((el) => {
        el.onclick = () => {
          el.classList.toggle("open");
          setTimeout(() => {
            el.classList.toggle("open-active");
          }, 700);
        };
      });
    </script>
  </body>
</html>

3. 리뷰

flex 를 통해 크기를 조절할수 있다. 5개의 panel에 flex 1을 준상태에서 클릭시 flex5로 바꿔준다면 상대적으로 커지게 된다.

display : flex를 통해 가로로 배치했다.

toggle을 통해 open 클래스가 있다면 클래스제거 없으면 클래스추가를 했다.

 

728x90
반응형

'개발 > html, css, js' 카테고리의 다른 글

[30일 챌린지 Day-7] some,every,find,findIndex  (0) 2022.07.26
[30일 챌린지 Day-6] 검색, json 활용  (0) 2022.07.26
[30일 챌린지 Day-4] 배열,객체 알고리즘  (0) 2022.07.25
[30일 챌린지 Day-3] input값 적용하기  (0) 2022.07.25
[30일 챌린지 Day-2] 시계 만들기  (1) 2022.07.25
'개발/html, css, js' 카테고리의 다른 글
  • [30일 챌린지 Day-7] some,every,find,findIndex
  • [30일 챌린지 Day-6] 검색, json 활용
  • [30일 챌린지 Day-4] 배열,객체 알고리즘
  • [30일 챌린지 Day-3] input값 적용하기
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    node
    블록체인
    하이퍼레저
    컨테이너
    mysql
    js
    CSS
    nodejs
    go
    명령어
    node.js
    프로그래머스
    ERC721
    도커
    30일챌린지
    go언어
    html
    erc20
    30일 챌린지
    React
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[30일 챌린지 Day-5] flex, classname 추가 활용
상단으로

티스토리툴바