css梯形tab

效果:

代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tab 示例</title>
    <style>
        /* 定义 CSS 变量 */
        :root {
            --tab-width: 200px;
            --tab-height: 50px;
            --tab-radius: 10px;
            --tab-bg: #EFF6FF;
            --tab-active-bg: gold;
            --tab-corner-size: 10px;
        }

        /* 基础样式 */
        .box {
            padding: 50px 300px;
            text-align: center;
            display: flex;
        }

        /* Tab 通用样式 */
        .tab {
            width: var(--tab-width);
            height: var(--tab-height);
            background-color: var(--tab-bg);
            position: relative;
            border-radius: var(--tab-radius) var(--tab-radius) 0 0;
            transform-origin: center bottom;
            transform: perspective(10px) rotateX(10deg);
            cursor: pointer; /* 添加鼠标指针样式 */
        }

        /* Tab 伪元素样式 */
        .tab::before,
        .tab::after {
            content: "";
            position: absolute;
            bottom: 0;
            width: var(--tab-corner-size);
            height: var(--tab-corner-size);
            background: var(--tab-bg);
        }

        .tab::before {
            left: calc(-1 * var(--tab-corner-size));
            background: radial-gradient(circle at 0 0, transparent var(--tab-corner-size), var(--tab-bg) var(--tab-corner-size));
        }

        .tab::after {
            right: calc(-1 * var(--tab-corner-size));
            background: radial-gradient(circle at var(--tab-corner-size) 0, transparent var(--tab-corner-size), var(--tab-bg) var(--tab-corner-size));
        }

        /* 第二个 Tab 的特殊样式 */
        .tab2 {
            top: -26px;
            margin-left: -50px;
            transform: perspective(10px) rotateX(170deg);
        }

        /* 激活状态的 Tab 样式 */
        .active {
            background-color: var(--tab-active-bg);
        }

        .active::before {
            background: radial-gradient(circle at 0 0, transparent var(--tab-corner-size), var(--tab-active-bg) var(--tab-corner-size));
        }

        .active::after {
            background: radial-gradient(circle at var(--tab-corner-size) 0, transparent var(--tab-corner-size), var(--tab-active-bg) var(--tab-corner-size));
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="tab tab1 active"></div>
        <div class="tab tab2"></div>
    </div>

    <script>
        const tabs = document.querySelectorAll(".tab");
        tabs.forEach((tab) => {
            tab.addEventListener("click", () => {
                tabs.forEach((t) => t.classList.remove("active"));
                tab.classList.add("active");
            });
        });
    </script>
</body>
</html>
相关推荐
JELEE.11 分钟前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl2 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
charlie1145141912 小时前
CSS笔记4:CSS:列表、边框、表格、背景、鼠标与常用长度单位
css·笔记·学习·css3·教程
前端大卫4 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友4 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理6 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻6 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
mapbar_front7 小时前
在职场生存中如何做个不好惹的人
前端
牧杉-惊蛰7 小时前
纯flex布局来写瀑布流
前端·javascript·css
一袋米扛几楼988 小时前
【软件安全】什么是XSS(Cross-Site Scripting,跨站脚本)?
前端·安全·xss