본문 바로가기

@keyframes applePageFadeIn { from { opacity: 0; } to { opacity: 1; } } /* 콘텐츠 페이드 인 상승 효과 */ .entry-content > *, .post-header, .post-cover, .post-item, .cover-thumbnail-1 > ul > li, .cover-thumbnail-2 > ul > li, .cover-thumbnail-3 > ul > li, .cover-thumbnail-4 > ul > li { opacity: 0; transform: translateY(20px); animation: appleElementsIn 0.8s var(--ease-apple-out) forwards; animation-delay: calc(var(--apple-element-index, 0) * 0.1s + 0.2s); } @keyframes appleElementsIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* 이미지 로딩 효과 */ .post-item img, .cover-thumbnail-1 img, .cover-thumbnail-2 img, .cover-thumbnail-3 img, .cover-thumbnail-4 img, .post-cover img { opacity: 0; transform: scale(1.05); transition: opacity 0.8s var(--ease-apple-out), transform 1.2s var(--ease-apple-out); } .post-item img.loaded, .cover-thumbnail-1 img.loaded, .cover-thumbnail-2 img.loaded, .cover-thumbnail-3 img.loaded, .cover-thumbnail-4 img.loaded, .post-cover img.loaded { opacity: 1; transform: scale(1); } /* 헤더 스크롤 배경 변화 효과 */ #header { transition: background-color 0.4s var(--ease-apple-out), box-shadow 0.4s var(--ease-apple-out); } #header.scrolled { background-color: rgba(255, 255, 255, 0.98); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); } /* 마우스 호버 효과 - 버튼 */ .btn, a.btn, .apple-action-button, input[type=submit], button.submit { transition: transform 0.35s var(--ease-apple-bounce), background-color 0.25s var(--ease-apple-out), box-shadow 0.25s var(--ease-apple-out); } .btn:hover, a.btn:hover, .apple-action-button:hover, input[type=submit]:hover, button.submit:hover { transform: translateY(-3px) scale(1.02); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } .btn:active, a.btn:active, .apple-action-button:active, input[type=submit]:active, button.submit:active { transform: translateY(0) scale(0.98); transition: transform 0.15s var(--ease-apple-out); } /* 카드 호버 효과 */ .post-item, .cover-thumbnail-1 ul li, .cover-thumbnail-2 ul li, .cover-thumbnail-3 ul li, .cover-thumbnail-4 ul li { transition: transform 0.5s var(--ease-apple-out), box-shadow 0.5s var(--ease-apple-out); } .post-item:hover, .cover-thumbnail-1 ul li:hover, .cover-thumbnail-2 ul li:hover, .cover-thumbnail-3 ul li:hover, .cover-thumbnail-4 ul li:hover { transform: translateY(-5px) scale(1.01); box-shadow: 0 12px 20px rgba(0, 0, 0, 0.06); } /* 네비게이션 링크 호버 효과 */ #gnb ul li a { position: relative; transition: color 0.25s var(--ease-apple-out); } #gnb ul li a::after { content: ""; position: absolute; bottom: 0; left: 0; width: 100%; height: 3px; background-color: var(--color-primary); transform: scaleX(0); transform-origin: center; transition: transform 0.4s var(--ease-apple-bounce); } #gnb ul li a:hover::after, #gnb ul li.current a::after { transform: scaleX(1); } /* 링크 호버 효과 */ .entry-content a:not(.btn), .sidebar a:not(.btn) { position: relative; transition: color 0.25s var(--ease-apple-out); } .entry-content a:not(.btn)::after, .sidebar a:not(.btn)::after { content: ""; position: absolute; bottom: -2px; left: 0; width: 100%; height: 1px; background-color: currentColor; transform: scaleX(0); transform-origin: right; transition: transform 0.4s var(--ease-apple-out); } .entry-content a:not(.btn):hover::after, .sidebar a:not(.btn):hover::after { transform: scaleX(1); transform-origin: left; } /* 스크롤 시 요소 등장 애니메이션 */ .apple-scroll-reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.8s var(--ease-apple-out), transform 0.8s var(--ease-apple-out); } .apple-scroll-reveal.revealed { opacity: 1; transform: translateY(0); }