Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CodeMyUI/77f80ec5ce0747d74790d93695dcace5 to your computer and use it in GitHub Desktop.
Save CodeMyUI/77f80ec5ce0747d74790d93695dcace5 to your computer and use it in GitHub Desktop.
Build a fancy hover animation - complete
<article class="flow">
<h1>Our Team</h1>
<p>Hover or focus over each card to see the person’s job title slide in and the colour treatment change.</p>
<div class="team">
<ul class="auto-grid" role="list">
<li>
<a href="https://swop.link/cool" target=_blank" class="profile">
<h2 class="profile__name">Anita Simmons</h2>
<p>Founder</p>
<img alt="Anita Simmons" src="https://source.unsplash.com/BhcutpohYwg/800x800" />
</a>
</li>
<li>
<a href="https://swop.link/cool" target=_blank" class="profile">
<h2 class="profile__name">Celina Harris</h2>
<p>Creative Director</p>
<img alt="Profile shot for Celina Harris" src="https://source.unsplash.com/j5KAuRrYX7g/800x800" />
</a>
</li>
<li>
<a href="https://swop.link/cool" target=_blank" class="profile">
<h2 class="profile__name">Ruby Morris</h2>
<p>Technical Lead</p>
<img alt="Profile shot for Ruby Morris" src="https://source.unsplash.com/pQyIutdScOY/800x800" />
</a>
</li>
<li>
<a href="https://swop.link/cool" target=_blank" class="profile">
<h2 class="profile__name">Nicholas Castro</h2>
<p>Designer</p>
<img alt="Profile shot for Nicholas Castro" src="https://source.unsplash.com/55JRsxcAiWE/800x800" />
</a>
</li>
<li>
<a href="https://swop.link/cool" target=_blank" class="profile">
<h2 class="profile__name">Marc Dixon</h2>
<p>Developer</p>
<img alt="Profile shot for Marc Dixon" src="https://source.unsplash.com/5wn6DeAEcmE/800x800" />
</a>
</li>
<li>
<a href="https://swop.link/cool" target=_blank" class="profile">
<h2 class="profile__name">Chad Chadson</h2>
<p>Intern</p>
<img alt="Profile shot for Chad" src="https://source.unsplash.com/7jCYw6a2Wao/800x800" />
</a>
</li>
</ul>
</div>
</article>
/* Globals */
body {
font-family: "Inter", sans-serif;
max-width: 55rem;
padding: 2rem 1.5rem;
margin: 0 auto;
color: #241623;
background: #eef2f4;
}
h1 {
font-weight: 900;
font-size: 2.7rem;
max-width: 20ch;
}
p {
max-width: 60ch;
}
a {
color: currentcolor;
}
/* Utilities */
.auto-grid {
display: grid;
grid-template-columns: repeat(
auto-fill,
minmax(var(--auto-grid-min-size, 14rem), 1fr)
);
grid-gap: var(--auto-grid-gap, 0);
padding: 0;
}
.flow > * + * {
margin-top: var(--flow-space, 1em);
}
/* Composition */
.team {
--flow-space: 2em;
}
/* Blocks */
.profile {
display: flex;
flex-direction: column;
justify-content: flex-end;
aspect-ratio: 1/1;
position: relative;
padding: 1.5rem;
color: #ffffff;
backface-visibility: hidden;
text-decoration: none;
overflow: hidden;
}
.profile::before,
.profile::after {
content: "";
width: 100%;
height: 100%;
position: absolute;
/*inset: 0;*/
top: 0;
left: 0;
}
.profile::before {
background: linear-gradient(
to top,
hsl(0 0% 0% / 0.79) 0%,
hsl(0 0% 0% / 0.787) 7.8%,
hsl(0 0% 0% / 0.779) 14.4%,
hsl(0 0% 0% / 0.765) 20.2%,
hsl(0 0% 0% / 0.744) 25.3%,
hsl(0 0% 0% / 0.717) 29.9%,
hsl(0 0% 0% / 0.683) 34.3%,
hsl(0 0% 0% / 0.641) 38.7%,
hsl(0 0% 0% / 0.592) 43.3%,
hsl(0 0% 0% / 0.534) 48.4%,
hsl(0 0% 0% / 0.468) 54.1%,
hsl(0 0% 0% / 0.393) 60.6%,
hsl(0 0% 0% / 0.31) 68.3%,
hsl(0 0% 0% / 0.216) 77.3%,
hsl(0 0% 0% / 0.113) 87.7%,
hsl(0 0% 0% / 0) 100%
);
transition: 300ms opacity linear;
}
.profile::after {
background: linear-gradient(
45deg,
hsl(5 97% 63% / 0.7) 0,
hsl(5 97% 63% / 0) 100%
);
opacity: 0;
transition: 300ms opacity linear;
}
.profile > * {
z-index: 1;
}
.profile img {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
margin: 0;
z-index: -1;
object-fit: cover;
filter: grayscale(1);
transition: filter 200ms ease, transform 250ms linear;
}
.profile h2,
.profile p {
transform: translateY(2ex);
}
.profile h2 {
font-size: 1.7rem;
line-height: 1.2;
font-weight: 900;
letter-spacing: 0.03ch;
transition: 300ms transform ease;
}
.profile p {
font-size: 1.2rem;
font-weight: 500;
}
.profile p {
opacity: 0;
transition: 300ms opacity linear, 300ms transform ease-in-out;
}
.profile:focus {
outline: 0.5rem solid white;
outline-offset: -0.5rem;
}
.profile:hover :is(h2, p),
.profile:focus :is(h2, p) {
transform: none;
}
.profile:hover::after,
.profile:focus::after,
.profile:hover::before,
.profile:focus::before {
opacity: 0.7;
}
.profile:hover p,
.profile:focus p {
opacity: 1;
transition-delay: 200ms;
}
.profile:hover img,
.profile:focus img {
filter: grayscale(0);
transform: scale(1.05) rotate(1deg);
}
<link href="https://unpkg.com/modern-css-reset/dist/reset.min.css" rel="stylesheet" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;900&amp;display=swap" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment