온라인 강의/Advanced CSS and Sass [Udemy]

9. Building a Complex Animated Button - Part 1

유호야 2023. 7. 6. 00:13
반응형

 

가상클래스 중에서 :link 과 :visited 란? 

이미 기존 클래스에서 한 것을 보니 나도 꼭 알아야 할 개념들인듯 하다

.btn:link와 .btn:visited는 CSS에서 링크 스타일을 지정하는 가상 클래스( pseudo-class)입니다. 이러한 가상 클래스를 사용하여 방문하지 않은 링크와 이미 방문한 링크의 스타일을 다르게 지정할 수 있습니다.

.btn:link는 방문하지 않은 링크의 스타일을 지정하는데 사용됩니다. 링크를 클릭하기 전에 해당 스타일이 적용되며, 일반적으로 링크의 기본 색상, 텍스트 스타일, 배경 등을 변경하는 데 사용됩니다.

.btn:visited는 이미 방문한 링크의 스타일을 지정하는데 사용됩니다. 사용자가 링크를 클릭하여 방문한 이후에 해당 스타일이 적용됩니다. 이를 통해 사용자가 방문한 링크와 방문하지 않은 링크를 시각적으로 구분할 수 있습니다. 주로 링크의 색상을 변경하는 데 사용됩니다.

text-transform

text-transform: uppercase;

 

텍스트 내용을 대문자들로 지정할 수 있다.

그리고 inline 요소일 때 padding 값을 주면 다른 요소를 침범하기 때문에 display: block 또는 inline-block 으로 변경해야 한다. 

 

:active 

요소를 클릭하면 활성 상태라고 한다.

 

box-shadow 

해당 속성에서는 그림자의 x축 길이 y축 길이 그리고 blur 흐릿해지는 정도를 값으로 넣을 수 있다 그 다음 색상을 넣기

box-shadow(x length, y length, blur level, color);

 

 

 

버튼을 hover 했을 때 그리고 눌렀을 때 그림자와 translate 효과를 주었다

/* 
COLORS:

Light green: #7ed56f
Medium green: #55c57a
Dark green: #28b485
 */

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: "Lato", "Sans-serif";
  font-weight: 400;
  font-size: 16px;
  line-height: 1.7;
  color: #777;
  padding: 30px;
}

.header {
  height: 95vh;
  background-image: linear-gradient(
      to right bottom,
      rgba(126, 213, 111, 0.8),
      rgba(40, 180, 133, 0.8)
    ),
    url("../img/hero.jpg");
  background-size: cover;
  background-position: center;

  clip-path: polygon(0 0, 100% 0, 100% 75%, 0 100%);
  position: relative;
}

.logo-box {
  position: absolute;
  top: 50px;
  left: 40px;
}

.logo {
  height: 35px;
  backface-visibility: hidden;
}

.logo:hover {
  animation-name: moveInRight 1s ease-out;
}

.logo-box:hover .logo {
  animation: moveInLeft 1s ease-out;
  backface-visibility: hidden;
}

.text-box {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -40%);
  text-align: center;
}

.heading-primary {
  color: #fff;
  text-transform: uppercase;
  margin-bottom: 60px;
}

.heading-primary-main {
  display: block;
  font-size: 60px;
  font-weight: 400;
  letter-spacing: 35px;

  animation-name: moveInLeft;
  animation-duration: 1s;
  animation-timing-function: ease-out;

  /* 
  animation-iteration-count: 3; 
  animation-delay: 1.5s;
  */
  /* backface-visibility: hidden; */
}

.heading-primary-sub {
  display: block;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: 15px;
  font-size: 17.4px;

  /* animation-name: moveInRight;
  animation-duration: 1s;
  animation-timing-function: ease-in-out; */
  animation: moveInRight 1s ease-in-out;
}

@keyframes moveInLeft {
  0% {
    opacity: 0;
    transform: translateX(-100px);
  }
  80% {
    transform: translateX(12px);
  }
  100% {
    /* finished */
    opaicty: 1;
    transform: translateX(0);
  }
}

@keyframes moveInRight {
  0% {
    opacity: 0;
    transform: translateX(+100px);
  }
  80% {
    transform: translateX(-12px);
  }
  100% {
    /* finished */
    opaicty: 1;
    transform: translateX(0);
  }
}

@keyframes logoHover {
  0% {
    color: red;
  }

  100% {
    color: blue;
  }
}

.btn:link,
.btn:visited {
  text-transform: uppercase;
  text-decoration: none;
  padding: 15px 40px;
  display: inline-block;
  border-radius: 50px;
  transition: all 0.2s;
}

.btn:hover {
  transform: translateY(-3px);
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
}

.btn:active {
  transform: translateY(-1px);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}

.btn-white {
  background-color: #fff;
  color: #777;
}

 

반응형