CSS3镜像文字导航菜单动画特效

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS3镜像文字导航菜单动画特效</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            background: #111;
            font-family: 'Arial', sans-serif;
            overflow: hidden;
        }
        
        .navigation {
            position: relative;
            width: 400px;
            height: 70px;
            background: #fff;
            display: flex;
            justify-content: center;
            align-items: center;
            border-radius: 10px;
            box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
        }
        
        .navigation ul {
            position: relative;
            display: flex;
            width: 350px;
        }
        
        .navigation ul li {
            position: relative;
            list-style: none;
            width: 70px;
            height: 70px;
            z-index: 1;
        }
        
        .navigation ul li a {
            position: relative;
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;
            width: 100%;
            text-align: center;
            font-weight: 500;
        }
        
        .navigation ul li a .icon {
            position: relative;
            display: block;
            line-height: 75px;
            font-size: 1.5em;
            text-align: center;
            transition: 0.5s;
            color: #333;
        }
        
        .navigation ul li.active a .icon {
            transform: translateY(-32px);
            color: #2196f3;
        }
        
        .navigation ul li a .text {
            position: absolute;
            color: #333;
            font-weight: 400;
            font-size: 0.75em;
            letter-spacing: 0.05em;
            transition: 0.5s;
            opacity: 0;
            transform: translateY(20px);
        }
        
        .navigation ul li.active a .text {
            opacity: 1;
            transform: translateY(10px);
        }
        
        .navigation ul li a .mirror {
            position: absolute;
            color: rgba(255, 255, 255, 0.2);
            font-weight: 400;
            font-size: 0.75em;
            letter-spacing: 0.05em;
            transition: 0.5s;
            opacity: 0;
            transform: translateY(20px) scaleY(-1);
            transform-origin: top;
            -webkit-mask-image: linear-gradient(transparent, #000);
            mask-image: linear-gradient(transparent, #000);
        }
        
        .navigation ul li.active a .mirror {
            opacity: 0.6;
            transform: translateY(30px) scaleY(-1);
        }
        
        .indicator {
            position: absolute;
            top: -50%;
            width: 70px;
            height: 70px;
            background: #2196f3;
            border-radius: 50%;
            border: 6px solid #111;
            transition: 0.5s;
        }
        
        .indicator::before {
            content: '';
            position: absolute;
            top: 50%;
            left: -22px;
            width: 20px;
            height: 20px;
            background: transparent;
            border-top-right-radius: 20px;
            box-shadow: 1px -10px 0 0 #111;
        }
        
        .indicator::after {
            content: '';
            position: absolute;
            top: 50%;
            right: -22px;
            width: 20px;
            height: 20px;
            background: transparent;
            border-top-left-radius: 20px;
            box-shadow: -1px -10px 0 0 #111;
        }
        
        .navigation ul li:nth-child(1).active ~ .indicator {
            transform: translateX(calc(70px * 0));
        }
        
        .navigation ul li:nth-child(2).active ~ .indicator {
            transform: translateX(calc(70px * 1));
        }
        
        .navigation ul li:nth-child(3).active ~ .indicator {
            transform: translateX(calc(70px * 2));
        }
        
        .navigation ul li:nth-child(4).active ~ .indicator {
            transform: translateX(calc(70px * 3));
        }
        
        .navigation ul li:nth-child(5).active ~ .indicator {
            transform: translateX(calc(70px * 4));
        }
        
        .credit {
            position: absolute;
            bottom: 20px;
            color: rgba(255, 255, 255, 0.5);
            font-size: 14px;
        }
        
        .credit a {
            color: rgba(255, 255, 255, 0.8);
            text-decoration: none;
        }
    </style>
</head>
<body>
    <div class="navigation">
        <ul>
            <li class="active">
                <a href="#">
                    <span class="icon">
                        <ion-icon name="home-outline"></ion-icon>
                    </span>
                    <span class="text">首页</span>
                    <span class="mirror">首页</span>
                </a>
            </li>
            <li>
                <a href="#">
                    <span class="icon">
                        <ion-icon name="person-outline"></ion-icon>
                    </span>
                    <span class="text">个人</span>
                    <span class="mirror">个人</span>
                </a>
            </li>
            <li>
                <a href="#">
                    <span class="icon">
                        <ion-icon name="chatbubble-outline"></ion-icon>
                    </span>
                    <span class="text">消息</span>
                    <span class="mirror">消息</span>
                </a>
            </li>
            <li>
                <a href="#">
                    <span class="icon">
                        <ion-icon name="camera-outline"></ion-icon>
                    </span>
                    <span class="text">相册</span>
                    <span class="mirror">相册</span>
                </a>
            </li>
            <li>
                <a href="#">
                    <span class="icon">
                        <ion-icon name="settings-outline"></ion-icon>
                    </span>
                    <span class="text">设置</span>
                    <span class="mirror">设置</span>
                </a>
            </li>
            <div class="indicator"></div>
        </ul>
    </div>

    <!-- 使用Ionicons图标库 -->
    <script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
    <script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>

    <script>
        const list = document.querySelectorAll('.navigation ul li');
        function activeLink() {
            list.forEach((item) => 
                item.classList.remove('active'));
            this.classList.add('active');
        }
        list.forEach((item) => 
            item.addEventListener('click', activeLink));
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值