JSFiddle - React, Tailwind, and code Playground
HTML
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One|Raleway" rel="stylesheet">
<title>Document</title>
</head>
<body>
<nav class="main-nav">
<ul class="nav-links">
<li>
<a href="/">
<img src="https://img.mistj.com/b/202406281555331.svg" class="nav-links__icon" />
<span class="nav-links__label">Home</span>
</a>
</li>
<li>
<a href="/events">
<img src="https://img.mistj.com/b/202406281556584.svg" class="nav-links__icon" />
<span class="nav-links__label">Events</span>
</a>
</li>
<li>
<a href="/members">
<img src="https://img.mistj.com/b/202406281556589.svg" class="nav-links__icon" />
<span class="nav-links__label">Members</span>
</a>
</li>
<li>
<a href="/about">
<img src="https://img.mistj.com/b/202406281557720.svg" class="nav-links__icon" />
<span class="nav-links__label">About</span>
</a>
</li>
</ul>
</nav>
</body>
</html>
CSS
html {
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
body {
background-color: lightblue;
background-image: radial-gradient(lightblue, hsl(210, 80%, 20%));
color: white;
font-family: Raleway, Helvetica, Arial, sans-serif;
line-height: 1.4;
margin: 0;
min-height: 100vh;
}
.main-nav {
display: block;
width: 300px;
margin: 0 auto;
}
.nav-links__icon {
height: 1.5em;
width: 1.5em;
vertical-align: -0.2em;
}
.nav-links {
display: block;
margin-top: 0;
margin-bottom: 1rem;
padding: 0 1rem;
list-style: none;
justify-content: space-between;
padding: 1em;
margin-bottom: 0;
}
.nav-links>li>a {
display: block;
margin: 0 auto;
padding: 0.8em 0;
color: white;
font-size: 0.8rem;
text-decoration: none;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.nav-links>li>a:hover {
color: hsl(40, 100%, 70%);
}
.nav-links__label {
display: inline-block;
margin-left: 1em;
padding-right: 1em;
/* 默认隐藏 */
opacity: 0;
/* 设置默认位置偏左,便于后续动画 */
transform: translate(-1em);
transition: transform 0.4s cubic-bezier(0.2, 0.9, 0.3, 1.3),
opacity 0.4s linear;
}
.nav-links:hover .nav-links__label,
.nav-links a:focus>.nav-links__label {
/* opacity: 0 -> 1 */
opacity: 1;
/* translate: translate(-1em) -> translate(0)*/
transform: translate(0);
}
/* 设置不同的时间延迟 */
.nav-links>li:nth-child(2) .nav-links__label {
transition-delay: 0.1s;
}
.nav-links>li:nth-child(3) .nav-links__label {
transition-delay: 0.2s;
}
.nav-links>li:nth-child(4) .nav-links__label {
transition-delay: 0.2s;
}