반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- getBoundingClientRect
- input
- JavaScript
- 애니메이션
- classList
- width
- pointermove
- swiperjs
- NodeList
- css
- html
- NAV
- localstorage
- addEventListener
- swiper
- Animation
- React
- 스크롤
- For
- Hover
- 이벤트리스너
- forEach
- Sticky
- insertAdjacentHTML
- scrollY
- mousemove
- scrollevent
- 반복문
- 확장성
- scroll
Archives
- Today
- Total
ZeroToHunnit Coding
[CSS] 텍스트 호버(hover) 애니메이션 본문
728x90
반응형
위와 같이 마우스를 갖다 대면 한 글자씩 위쪽으로 파도타기하면서 없어지고 밑에서 한 글자씩 다시 올라오는 애니메이션을 구현했다.
HTML
<div class="box">
<div class="text">
<span>안</span>
<span>녕</span>
<span>하</span>
<span>세</span>
<span>요?</span>
<span>반</span>
<span>갑</span>
<span>습</span>
<span>니</span>
<span>다.</span>
</div>
<div class="hover-text">
<span>안</span>
<span>녕</span>
<span>하</span>
<span>세</span>
<span>요?</span>
<span>반</span>
<span>갑</span>
<span>습</span>
<span>니</span>
<span>다.</span>
</div>
</div>
텍스트 박스를 2개 만들어주고 각 글자들을 span태그에 따로따로 담았다.
CSS
.box {
margin-top: 200px;
margin-left: 200px;
overflow: hidden;
cursor: pointer;
position: relative;
}
.text span,
.hover-text span{
display: inline-block;
transition: all 0.3s;
font-size: 60px;
}
.hover-text{
position: absolute;
top: 0;
left: 0;
}
.hover-text span{
transform: translateY(100%);
}
.text-span0{
transform: translateY(-100%);
}
.text-span1{
transform: translateY(-100%);
transition-delay: 0.05s !important;
}
.text-span2{
transform: translateY(-100%);
transition-delay: 0.1s !important;
}
.text-span3{
transform: translateY(-100%);
transition-delay: 0.15s !important;
}
.text-span4{
transform: translateY(-100%);
transition-delay: 0.2s !important;
}
.text-span5{
transform: translateY(-100%);
transition-delay: 0.25s !important;
}
.text-span6{
transform: translateY(-100%);
transition-delay: 0.3s !important;
}
.text-span7{
transform: translateY(-100%);
transition-delay: 0.35s !important;
}
.text-span8{
transform: translateY(-100%);
transition-delay: 0.4s !important;
}
.text-span9{
transform: translateY(-100%);
transition-delay: 0.45s !important;
}
.hover-text-span0{
transform: translateY(0) !important;
}
.hover-text-span1{
transform: translateY(0) !important;
transition-delay: 0.05s !important;
}
.hover-text-span2{
transform: translateY(0) !important;
transition-delay: 0.1s !important;
}
.hover-text-span3{
transform: translateY(0) !important;
transition-delay: 0.15s !important;
}
.hover-text-span4{
transform: translateY(0) !important;
transition-delay: 0.2s !important;
}
.hover-text-span5{
transform: translateY(0) !important;
transition-delay: 0.25s !important;
}
.hover-text-span6{
transform: translateY(0) !important;
transition-delay: 0.3s !important;
}
.hover-text-span7{
transform: translateY(0) !important;
transition-delay: 0.35s !important;
}
.hover-text-span8{
transform: translateY(0) !important;
transition-delay: 0.4s !important;
}
.hover-text-span9{
transform: translateY(0) !important;
transition-delay: 0.45s !important;
}
박스에 overflow:hidden과 position:relative를 걸어주고 hover-text에 position:absolute를 걸어서 띄어준다음 밑으로 내려서 안보이게 한다. 그리고 hover하면 transform: translateY로 조절하면서 transition-delay로 속도를 조절해준다.
JAVASCRIPT
const box = document.querySelector('.box');
box.addEventListener('mouseover',function(){
for(let i = 0; i < document.querySelectorAll('.text span').length; i++){
document.querySelectorAll('.text span')[i].classList.add(`text-span${i}`);
document.querySelectorAll('.hover-text span')[i].classList.add(`hover-text-span${i}`);
}
})
box.addEventListener('mouseout',function(){
for(let i = 0; i < document.querySelectorAll('.text span').length; i++){
document.querySelectorAll('.text span')[i].classList.remove(`text-span${i}`);
document.querySelectorAll('.hover-text span')[i].classList.remove(`hover-text-span${i}`);
}
})
자바스크립트로 마우스가 올라갔을때, 나갔을 때를 따로 짜서 반복문으로 class를 부여하는 식으로 만들었다.
자바스크립트를 사용하지 않고 그냥 hover로 하면 되는데 왜 자바스크립트를 사용했냐면...
원래 구현하려던 바는 마우스가 들어가고 나올 때 전부 다 파도타기하는 애니메이션을 만들려 했는데, css로 그냥 hover사실 마우스가 out되었을 때 다시 파도타기하면서 내려오길 바라면서 짰는데 안되길래 혹시나 자바스크립트로 짜면 되려나 싶어서 해봤지만 안됐다. 그렇게 하려면 mouseout에 또 다른 코드를 짜야될거같다는 생각이 들었지만 그렇게 되면 저 하나의 hover 애니메이션을 위해 너무 많은 코드를 낭비하는 것이 아닌가하는 생각이 들었다. 그리고 다르게 생각해서 짜면 더 간단하고 쉽게 짤 수 있는 방법이 있지 않을까하는 생각도 들었다. 다음에 좀 더 업그레이드해서 시도해봐야겠다.
728x90
반응형
'HTML,CSS' 카테고리의 다른 글
[CSS] 리스트에 마우스 올리면 사진 띄우기 (0) | 2024.01.23 |
---|---|
[CSS] display: grid 정리 (0) | 2024.01.13 |
[CSS] 배경 색상마다 글자색을 다르게 해주는 mix-blend-mode (0) | 2024.01.07 |
[CSS] 가변 폰트와 font-variation-settings (2) | 2024.01.05 |
[HTML] 시맨틱 마크업 태그 정리 (0) | 2023.12.30 |