【React】Ant Design 5.x 实现tabs圆角及反圆角效果

需要实现的效果


实现思路

利用tab页的before和after属性,添加tab页前后的圆弧属性,同时使用tab页的shadow阴影填充右下角的圆弧空缺部分。

复制代码
            <Tabs
                onChange={onChange}
                type="card"
                items={getTabItems()}
            />

.ant-tabs-nav{
        margin: 0;

        .ant-tabs-nav-list{
            display: flex;
            position: relative;
            z-index: 2;
            width: 100%;
            background: #E1E8F2;
            border-radius: 24px 24px 0 0;
            overflow: hidden; // 重点
            user-select: none;
        }

        .ant-tabs-tab{
            flex: 1;
            position: relative;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 66px;
            padding: 18px 0;
            margin: 0;
            border: none;
            font-weight: 500;
            font-size: 22px;
            color: #606266;
            line-height: 30px;
            text-align: left;
            font-style: normal;
            border-radius: 24px 24px 0 0 !important;
            background: #E1E8F2;
            transition: none;
            user-select: none;

            &::before{
                content: '';
                position: absolute;
                left: 10px;
                bottom: 0;
                width: 32px;
                height: 66px;
                background: #E1E8F2;
                border-bottom-left-radius: 24px;
                transform: skewX(15deg); // 重点
                z-index: 4; 
            }
            &::after{
                z-index: 4;
                content: '';
                position: absolute;
                right: 10px;
                bottom: 0;
                width: 32px;
                height: 66px;
                background: #E1E8F2;
                border-bottom-right-radius: 24px;
                transform: skewX(-15deg); // 重点
            }
        }
        .ant-tabs-tab-active{
            opacity: 1;
            z-index: 3; 
            background: #ffffff;
            border-radius: 24px 24px 0 0 !important;
            box-shadow: 48px 42px 0 #ffffff, -48px 42px 0 #ffffff; // 重点
            user-select: none;

            &::before{
                content: '';
                position: absolute;
                left: -12px;
                bottom: 0;
                width: 24px;
                height: 66px;
                border-top-left-radius: 24px;
                background-color: #ffffff;
                transform: skewX(-15deg); // 重点
            }
            &::after{
                content: '';
                position: absolute;
                right: -12px;
                bottom: 0;
                width: 24px;
                height: 66px;
                border-top-right-radius: 24px;
                background-color: #ffffff;
                transform: skewX(15deg); // 重点
            }
        }
    }
相关推荐
yinuo1 分钟前
一行 CSS 就能搞定!用 writing-mode 轻松实现文字竖排
前端
snow@li33 分钟前
html5:拖放 / demo / 拖放事件(Drag Events)/ DataTransfer 对象方法
前端·html·拖放
浪裡遊2 小时前
Nivo图表库全面指南:配置与用法详解
前端·javascript·react.js·node.js·php
漂流瓶jz3 小时前
快速定位源码问题:SourceMap的生成/使用/文件格式与历史
前端·javascript·前端工程化
samroom3 小时前
iframe实战:跨域通信与安全隔离
前端·安全
fury_1233 小时前
vue3:数组的.includes方法怎么使用
前端·javascript·vue.js
weixin_405023373 小时前
包资源管理器NPM 使用
前端·npm·node.js
宁&沉沦4 小时前
Cursor 科技感的登录页面提示词
前端·javascript·vue.js
Dragonir4 小时前
React+Three.js 实现 Apple 2025 热成像 logo
前端·javascript·html·three.js·页面特效