> & {
return (
titleItemsRef.current.push(ref)}
onClick={() => tabChange(item)}
className={classNames(`${classPrefix}-titles-item`, {
[`nut-tabs-titles-item-active`]:
From 645a0ec335d376104639f07cebf3c7e3ffdfc873 Mon Sep 17 00:00:00 2001
From: Kasim <249813821@qq.com>
Date: Tue, 15 Sep 2026 20:29:10 +0800
Subject: [PATCH 04/11] =?UTF-8?q?chore(tabs):=20=E5=90=AF=E7=94=A8=20v16?=
=?UTF-8?q?=20=E7=89=88=E6=9C=AC=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/config.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/config.json b/src/config.json
index 89d6d1e8c7..ab7407947b 100644
--- a/src/config.json
+++ b/src/config.json
@@ -480,7 +480,7 @@
"v15": 2,
"author": "oasis",
"dd": true,
- "v16": false
+ "v16": true
}
]
},
From 6038957425030e67e97ccf9fc3f714502707a0c1 Mon Sep 17 00:00:00 2001
From: Kasim <249813821@qq.com>
Date: Wed, 16 Sep 2026 20:38:57 +0800
Subject: [PATCH 05/11] =?UTF-8?q?style(tabs):=20=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E5=8D=A1=E7=89=87=E6=A8=A1=E5=BC=8F=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/packages/tabs/demos/h5/demo4.tsx | 1 +
src/packages/tabs/demos/h5/demo8.tsx | 1 +
src/packages/tabs/demos/taro/demo4.tsx | 1 +
src/packages/tabs/demos/taro/demo8.tsx | 1 +
src/packages/tabs/tabs.scss | 67 +++++++++++++++++++++++---
5 files changed, 63 insertions(+), 8 deletions(-)
diff --git a/src/packages/tabs/demos/h5/demo4.tsx b/src/packages/tabs/demos/h5/demo4.tsx
index aaca44d0ea..751113330f 100644
--- a/src/packages/tabs/demos/h5/demo4.tsx
+++ b/src/packages/tabs/demos/h5/demo4.tsx
@@ -7,6 +7,7 @@ const Demo4 = () => {
<>
{
setTabvalue(value)
}}
diff --git a/src/packages/tabs/demos/h5/demo8.tsx b/src/packages/tabs/demos/h5/demo8.tsx
index 7b28f4963c..d706c25598 100644
--- a/src/packages/tabs/demos/h5/demo8.tsx
+++ b/src/packages/tabs/demos/h5/demo8.tsx
@@ -7,6 +7,7 @@ const Demo8 = () => {
<>
{
diff --git a/src/packages/tabs/demos/taro/demo4.tsx b/src/packages/tabs/demos/taro/demo4.tsx
index 6c1a3df1ff..812b065967 100644
--- a/src/packages/tabs/demos/taro/demo4.tsx
+++ b/src/packages/tabs/demos/taro/demo4.tsx
@@ -6,6 +6,7 @@ const Demo4 = () => {
return (
{
setTabvalue(value)
}}
diff --git a/src/packages/tabs/demos/taro/demo8.tsx b/src/packages/tabs/demos/taro/demo8.tsx
index 580f732675..ebc9dfba71 100644
--- a/src/packages/tabs/demos/taro/demo8.tsx
+++ b/src/packages/tabs/demos/taro/demo8.tsx
@@ -6,6 +6,7 @@ const Demo8 = () => {
return (
{
setTabvalue(value)
diff --git a/src/packages/tabs/tabs.scss b/src/packages/tabs/tabs.scss
index 52bf7cb238..7c800200cc 100644
--- a/src/packages/tabs/tabs.scss
+++ b/src/packages/tabs/tabs.scss
@@ -45,12 +45,6 @@
}
}
- &-card#{&}-left {
- .nut-tabs-titles-item {
- padding: 0 22px;
- }
- }
-
&-item {
position: relative;
display: flex;
@@ -172,10 +166,55 @@
&-card {
.nut-tabs-titles-item {
+ padding: 0 8px;
+ flex-direction: column;
+ justify-content: center;
+ line-height: initial;
+ background: transparent;
+
&-active {
+ position: relative;
+ z-index: 1;
+ margin: 0 24px;
font-weight: $font-weight-bold;
- background-color: $white;
- border-radius: $radius-base $radius-base 0 0;
+ background-color: $tabs-titles-item-active-background-color;
+
+ &::before,
+ &::after {
+ position: absolute;
+ bottom: 0;
+ width: 24px;
+ height: 100%;
+ content: '';
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+ }
+
+ &::before {
+ left: -24px;
+ background-image: url("data:image/svg+xml,%3Csvg fill='none' height='40' version='1.1' viewBox='0 0 24 40' width='24' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg transform='matrix(-1,0,0,1,48,0)'%3E%3Cpath d='M0 0L1.5213693 0C5.2987967 0 8.5614691 2.6422062 9.3466406 6.3371301L15.15336 33.662868C15.938531 37.357792 19.201202 40 22.97863 40L24 40L22.98 40L0 40L0 0Z' fill='%23ffffff' transform='translate(24, 0)'/%3E%3C/g%3E%3C/svg%3E");
+ }
+
+ &::after {
+ right: -24px;
+ background-image: url("data:image/svg+xml,%3Csvg fill='none' height='40' version='1.1' viewBox='0 0 24 40' width='24' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cpath d='M0 0L1.5213693 0C5.2987967 0 8.5614691 2.6422062 9.3466406 6.3371301L15.15336 33.662868C15.938531 37.357792 19.201202 40 22.97863 40L24 40L22.98 40L0 40L0 0Z' fill='%23ffffff'/%3E%3C/svg%3E");
+ }
+
+ &:first-child {
+ margin-left: 0;
+
+ &::before {
+ display: none;
+ }
+ }
+
+ &:last-child {
+ margin-right: 0;
+
+ &::after {
+ display: none;
+ }
+ }
}
}
}
@@ -234,6 +273,18 @@
}
}
+.nut-theme-dark {
+ .nut-tabs-titles-card .nut-tabs-titles-item-active {
+ &::before {
+ background-image: url("data:image/svg+xml,%3Csvg fill='none' height='40' version='1.1' viewBox='0 0 24 40' width='24' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg transform='matrix(-1,0,0,1,48,0)'%3E%3Cpath d='M0 0L1.5213693 0C5.2987967 0 8.5614691 2.6422062 9.3466406 6.3371301L15.15336 33.662868C15.938531 37.357792 19.201202 40 22.97863 40L24 40L22.98 40L0 40L0 0Z' fill='%231f2226' transform='translate(24, 0)'/%3E%3C/g%3E%3C/svg%3E");
+ }
+
+ &::after {
+ background-image: url("data:image/svg+xml,%3Csvg fill='none' height='40' version='1.1' viewBox='0 0 24 40' width='24' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cpath d='M0 0L1.5213693 0C5.2987967 0 8.5614691 2.6422062 9.3466406 6.3371301L15.15336 33.662868C15.938531 37.357792 19.201202 40 22.97863 40L24 40L22.98 40L0 40L0 0Z' fill='%231f2226'/%3E%3C/svg%3E");
+ }
+ }
+}
+
.nut-tabs-vertical {
.nut-tabs-ellipsis {
white-space: break-spaces;
From 750042de402b666ff9d2c096ab177761ee270dab Mon Sep 17 00:00:00 2001
From: Kasim <249813821@qq.com>
Date: Fri, 18 Sep 2026 10:39:30 +0800
Subject: [PATCH 06/11] =?UTF-8?q?style(tabs):=20=E8=B0=83=E6=95=B4?=
=?UTF-8?q?=E9=80=89=E9=A1=B9=E5=8D=A1=E6=A0=87=E9=A2=98=E7=9A=84=E5=86=85?=
=?UTF-8?q?=E8=BE=B9=E8=B7=9D=EF=BC=8C=E4=BC=98=E5=8C=96=E8=BE=B9=E7=BC=98?=
=?UTF-8?q?=E7=95=99=E7=99=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/packages/tabs/tabs.scss | 52 ++++++++++++++++++++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/src/packages/tabs/tabs.scss b/src/packages/tabs/tabs.scss
index 7c800200cc..ddf8bd80a9 100644
--- a/src/packages/tabs/tabs.scss
+++ b/src/packages/tabs/tabs.scss
@@ -41,7 +41,7 @@
&-right {
justify-content: flex-end;
.nut-tabs-titles-item {
- padding: 0 22px;
+ padding: 0 8px;
}
}
@@ -273,6 +273,29 @@
}
}
+// 标题栏边缘留白:该端 item 外侧 padding 翻倍,使边缘留白 = 相邻 tab 间距
+// 均分补首尾两端,左对齐仅补左端,右对齐仅补右端;水平方向生效
+.nut-tabs-horizontal {
+ .nut-tabs-titles:not(.nut-tabs-titles-right)
+ .nut-tabs-titles-item:first-child {
+ padding-left: calc(#{$tabs-titles-gap} * 2);
+ }
+
+ .nut-tabs-titles:not(.nut-tabs-titles-left) .nut-tabs-titles-item:last-child {
+ padding-right: calc(#{$tabs-titles-gap} * 2);
+ }
+
+ .nut-tabs-titles-button {
+ &:not(.nut-tabs-titles-right) .nut-tabs-titles-item:first-child {
+ padding-left: 8px;
+ }
+
+ &:not(.nut-tabs-titles-left) .nut-tabs-titles-item:last-child {
+ padding-right: 8px;
+ }
+ }
+}
+
.nut-theme-dark {
.nut-tabs-titles-card .nut-tabs-titles-item-active {
&::before {
@@ -425,6 +448,33 @@
}
}
+// RTL 边缘留白镜像:视觉左端=物理右侧、视觉右端=物理左侧,翻转补端方向
+[dir='rtl'] .nut-tabs-horizontal,
+.nut-rtl .nut-tabs-horizontal {
+ .nut-tabs-titles:not(.nut-tabs-titles-right)
+ .nut-tabs-titles-item:first-child {
+ padding-left: $tabs-titles-gap;
+ padding-right: calc(#{$tabs-titles-gap} * 2);
+ }
+
+ .nut-tabs-titles:not(.nut-tabs-titles-left) .nut-tabs-titles-item:last-child {
+ padding-right: $tabs-titles-gap;
+ padding-left: calc(#{$tabs-titles-gap} * 2);
+ }
+
+ .nut-tabs-titles-button {
+ &:not(.nut-tabs-titles-right) .nut-tabs-titles-item:first-child {
+ padding-left: 4px;
+ padding-right: 8px;
+ }
+
+ &:not(.nut-tabs-titles-left) .nut-tabs-titles-item:last-child {
+ padding-right: 4px;
+ padding-left: 8px;
+ }
+ }
+}
+
[dir='rtl'] .nut-tabs-vertical,
.nut-rtl .nut-tabs-vertical {
.nut-tabs-titles {
From 11b4f6892aec2a4e7b9b4aa402a2b36bfca23ef5 Mon Sep 17 00:00:00 2001
From: Kasim <249813821@qq.com>
Date: Fri, 18 Sep 2026 10:55:45 +0800
Subject: [PATCH 07/11] =?UTF-8?q?style(tabs):=20=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E9=80=89=E9=A1=B9=E5=8D=A1=E6=A0=87=E9=A2=98=E7=9A=84=E5=AD=97?=
=?UTF-8?q?=E4=BD=93=E7=B2=97=E7=BB=86=E4=B8=BA400?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/packages/tabs/demos/h5/demo24.tsx | 1 +
src/packages/tabs/demos/taro/demo24.tsx | 1 +
2 files changed, 2 insertions(+)
diff --git a/src/packages/tabs/demos/h5/demo24.tsx b/src/packages/tabs/demos/h5/demo24.tsx
index f294e07f48..b566643cf8 100644
--- a/src/packages/tabs/demos/h5/demo24.tsx
+++ b/src/packages/tabs/demos/h5/demo24.tsx
@@ -32,6 +32,7 @@ const Demo24 = () => {
style={{
textAlign: 'center',
fontSize: '11px',
+ fontWeight: '400',
lineHeight: '16px',
color: active
? 'var(--nutui-tabs-titles-item-active-color, #ff0f23)'
diff --git a/src/packages/tabs/demos/taro/demo24.tsx b/src/packages/tabs/demos/taro/demo24.tsx
index 859b4897bd..8bd2d14185 100644
--- a/src/packages/tabs/demos/taro/demo24.tsx
+++ b/src/packages/tabs/demos/taro/demo24.tsx
@@ -33,6 +33,7 @@ const Demo24 = () => {
style={{
textAlign: 'center',
fontSize: pxTransform(11),
+ fontWeight: '400',
lineHeight: pxTransform(16),
color: active
? 'var(--nutui-tabs-titles-item-active-color, #ff0f23)'
From 3ae1c70c8f403e73ab0a028e7bc3c6aa373841fb Mon Sep 17 00:00:00 2001
From: Kasim <249813821@qq.com>
Date: Fri, 18 Sep 2026 15:35:20 +0800
Subject: [PATCH 08/11] =?UTF-8?q?chore(tabs):=20=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=B7=A6=E5=AF=B9=E9=BD=90=E8=BE=85=E5=8A=A9=E6=93=8D=E4=BD=9C?=
=?UTF-8?q?=E7=A4=BA=E4=BE=8B=E5=8F=8A=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/packages/tabs/demo.taro.tsx | 5 ++
src/packages/tabs/demo.tsx | 5 ++
src/packages/tabs/demos/h5/demo25.tsx | 90 +++++++++++++++++++++++++
src/packages/tabs/demos/taro/demo25.tsx | 89 ++++++++++++++++++++++++
src/packages/tabs/doc.en-US.md | 8 +++
src/packages/tabs/doc.md | 8 +++
src/packages/tabs/doc.taro.md | 8 +++
src/packages/tabs/doc.zh-TW.md | 8 +++
8 files changed, 221 insertions(+)
create mode 100644 src/packages/tabs/demos/h5/demo25.tsx
create mode 100644 src/packages/tabs/demos/taro/demo25.tsx
diff --git a/src/packages/tabs/demo.taro.tsx b/src/packages/tabs/demo.taro.tsx
index 522ece65ac..70fa174123 100644
--- a/src/packages/tabs/demo.taro.tsx
+++ b/src/packages/tabs/demo.taro.tsx
@@ -29,6 +29,7 @@ import Demo21 from './demos/taro/demo21'
import Demo22 from './demos/taro/demo22'
import Demo23 from './demos/taro/demo23'
import Demo24 from './demos/taro/demo24'
+import Demo25 from './demos/taro/demo25'
const TabsDemo = () => {
const [translated] = useTranslate({
@@ -51,6 +52,7 @@ const TabsDemo = () => {
title7: 'Title 字体尺寸:20px 12px',
title8: '自定义标签栏',
title15: '自定义标签栏-辅助信息',
+ title16: '左对齐-辅助操作',
title9: 'Tabpane 自动高度',
title10: 'CSS 粘性布局',
title11: 'Title 左对齐',
@@ -77,6 +79,7 @@ const TabsDemo = () => {
title7: 'Title FontSize: 20px 12px',
title8: 'Custom Tab Bar',
title15: 'Custom Tab Bar - Auxiliary Info',
+ title16: 'Left Align - Auxiliary Operation',
title9: 'Tabpane Auto Height',
title10: 'CSS Sticky',
title11: 'Title Left Align',
@@ -145,6 +148,8 @@ const TabsDemo = () => {
{translated.title15}
+ {translated.title16}
+
>
)
diff --git a/src/packages/tabs/demo.tsx b/src/packages/tabs/demo.tsx
index 7ff4903ba8..1049710ff3 100644
--- a/src/packages/tabs/demo.tsx
+++ b/src/packages/tabs/demo.tsx
@@ -24,6 +24,7 @@ import Demo21 from './demos/h5/demo21'
import Demo22 from './demos/h5/demo22'
import Demo23 from './demos/h5/demo23'
import Demo24 from './demos/h5/demo24'
+import Demo25 from './demos/h5/demo25'
const TabsDemo = () => {
const [translated] = useTranslate({
@@ -45,6 +46,7 @@ const TabsDemo = () => {
title7: 'Title 字体尺寸:20px 12px',
title8: '自定义标签栏',
title15: '自定义标签栏-辅助信息',
+ title16: '左对齐-辅助操作',
title9: 'Tabpane 自动高度',
title10: 'CSS 粘性布局',
title11: 'Title 左对齐',
@@ -70,6 +72,7 @@ const TabsDemo = () => {
title7: 'Title FontSize: 20px 12px',
title8: 'Custom Tab Bar',
title15: 'Custom Tab Bar - Auxiliary Info',
+ title16: 'Left Align - Auxiliary Operation',
title9: 'Tabpane Auto Height',
title10: 'CSS Sticky',
title11: 'Title Left Align',
@@ -130,6 +133,8 @@ const TabsDemo = () => {
{translated.title15}
+ {translated.title16}
+
>
)
diff --git a/src/packages/tabs/demos/h5/demo25.tsx b/src/packages/tabs/demos/h5/demo25.tsx
new file mode 100644
index 0000000000..1fe8ef0e23
--- /dev/null
+++ b/src/packages/tabs/demos/h5/demo25.tsx
@@ -0,0 +1,90 @@
+import React, { useState } from 'react'
+import { Tabs } from '@nutui/nutui-react'
+import { Search } from '@nutui/icons-react'
+
+const Demo25 = () => {
+ const [tabvalue, setTabvalue] = useState('c1')
+ const list = [
+ { title: 'Tab longitem 1', paneKey: 'c1' },
+ { title: 'Tab longitem 2', paneKey: 'c2' },
+ { title: 'Tab3', paneKey: 'c3' },
+ { title: 'Tab4', paneKey: 'c4' },
+ { title: 'Tab5', paneKey: 'c5' },
+ { title: 'Tab6', paneKey: 'c6' },
+ ]
+
+ const maskUrl =
+ 'https://img20.360buyimg.com/img/jfs/t1/528620/16/3371/845/6aacb069F6a9923f5/0276020048fb8b3a.png'
+
+ const renderTitles = () => {
+ const items = list.map((item) => {
+ const active = tabvalue === item.paneKey
+ return (
+ setTabvalue(item.paneKey)}
+ className={`nut-tabs-titles-item ${active ? 'nut-tabs-titles-item-active' : ''}`}
+ >
+ {item.title}
+
+
+ )
+ })
+ // 末尾占位:预留 >= 辅助操作宽度的空白,滚到最右端时末项文字不被辅助操作遮挡
+ items.push(
+
+ )
+ return items
+ }
+
+ return (
+
+
+ {list.map((item) => (
+
+ {item.title}
+
+ ))}
+
+
+

+
+
+
+
+
+ )
+}
+export default Demo25
diff --git a/src/packages/tabs/demos/taro/demo25.tsx b/src/packages/tabs/demos/taro/demo25.tsx
new file mode 100644
index 0000000000..473dbd9b47
--- /dev/null
+++ b/src/packages/tabs/demos/taro/demo25.tsx
@@ -0,0 +1,89 @@
+import React, { useState } from 'react'
+import { View, Text, Image } from '@tarojs/components'
+import { Tabs, pxTransform } from '@nutui/nutui-react-taro'
+import { Search } from '@nutui/icons-react-taro'
+
+const Demo25 = () => {
+ const [tabvalue, setTabvalue] = useState('c1')
+ const list = [
+ { title: 'Tab longitem 1', paneKey: 'c1' },
+ { title: 'Tab longitem 2', paneKey: 'c2' },
+ { title: 'Tab3', paneKey: 'c3' },
+ { title: 'Tab4', paneKey: 'c4' },
+ { title: 'Tab5', paneKey: 'c5' },
+ { title: 'Tab6', paneKey: 'c6' },
+ ]
+
+ const maskUrl =
+ 'https://img20.360buyimg.com/img/jfs/t1/528620/16/3371/845/6aacb069F6a9923f5/0276020048fb8b3a.png'
+
+ const renderTitles = () => {
+ const items = list.map((item) => {
+ const active = tabvalue === item.paneKey
+ return (
+ setTabvalue(item.paneKey)}
+ className={`nut-tabs-titles-item ${active ? 'nut-tabs-titles-item-active' : ''}`}
+ >
+ {item.title}
+
+
+ )
+ })
+ // 末尾占位:预留 >= 辅助操作宽度的空白,滚到最右端时末项文字不被辅助操作遮挡
+ items.push(
+
+ )
+ return items
+ }
+
+ return (
+
+
+ {list.map((item) => (
+
+ {item.title}
+
+ ))}
+
+
+
+
+
+
+
+
+ )
+}
+export default Demo25
diff --git a/src/packages/tabs/doc.en-US.md b/src/packages/tabs/doc.en-US.md
index ef853b2cfa..b6057ddae0 100644
--- a/src/packages/tabs/doc.en-US.md
+++ b/src/packages/tabs/doc.en-US.md
@@ -208,6 +208,14 @@ When autoHeight is set to true, nut-tabs and nut-tabs\_\_content will change wit
:::
+### Left Align - Auxiliary Operation
+
+:::demo
+
+
+
+:::
+
## Tabs
### Props
diff --git a/src/packages/tabs/doc.md b/src/packages/tabs/doc.md
index 3b50019405..696b29a971 100644
--- a/src/packages/tabs/doc.md
+++ b/src/packages/tabs/doc.md
@@ -208,6 +208,14 @@ import { Tabs } from '@nutui/nutui-react'
:::
+### 左对齐-辅助操作
+
+:::demo
+
+
+
+:::
+
## Tabs
### Props
diff --git a/src/packages/tabs/doc.taro.md b/src/packages/tabs/doc.taro.md
index 2ad8385b3b..a4f50b110d 100644
--- a/src/packages/tabs/doc.taro.md
+++ b/src/packages/tabs/doc.taro.md
@@ -206,6 +206,14 @@ import { Tabs } from '@nutui/nutui-react-taro'
:::
+### 左对齐-辅助操作
+
+:::demo
+
+
+
+:::
+
## Tabs
### Props
diff --git a/src/packages/tabs/doc.zh-TW.md b/src/packages/tabs/doc.zh-TW.md
index e76d2b2f90..1a5716badb 100644
--- a/src/packages/tabs/doc.zh-TW.md
+++ b/src/packages/tabs/doc.zh-TW.md
@@ -206,6 +206,14 @@ import { Tabs } from '@nutui/nutui-react'
:::
+### 左對齊-輔助操作
+
+:::demo
+
+
+
+:::
+
## Tabs
### Props
From 983094b72fabadd86c37dae6d9c5301cde74e75e Mon Sep 17 00:00:00 2001
From: Kasim <249813821@qq.com>
Date: Mon, 21 Sep 2026 20:19:55 +0800
Subject: [PATCH 09/11] =?UTF-8?q?feat(tabs):=20=E6=B7=BB=E5=8A=A0=E5=8D=A1?=
=?UTF-8?q?=E7=89=87=E6=A8=A1=E5=BC=8F=E4=B8=8B=E6=A0=87=E9=A2=98=E6=A0=8F?=
=?UTF-8?q?=E5=8F=AF=E6=BB=91=E5=8A=A8=E7=9A=84=E6=94=AF=E6=8C=81=E5=8F=8A?=
=?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/packages/tabs/tabs.scss | 65 +++++++++++++++++++++++++++++++++
src/packages/tabs/tabs.taro.tsx | 50 ++++++++++++++++++++++---
src/packages/tabs/tabs.tsx | 36 +++++++++++++++++-
3 files changed, 144 insertions(+), 7 deletions(-)
diff --git a/src/packages/tabs/tabs.scss b/src/packages/tabs/tabs.scss
index ddf8bd80a9..ac8e247665 100644
--- a/src/packages/tabs/tabs.scss
+++ b/src/packages/tabs/tabs.scss
@@ -43,6 +43,10 @@
.nut-tabs-titles-item {
padding: 0 8px;
}
+
+ .nut-tabs-list {
+ justify-content: flex-end;
+ }
}
&-item {
@@ -219,6 +223,30 @@
}
}
+ &-card.nut-tabs-titles-not-scrollable {
+ &:not(.nut-tabs-titles-right) .nut-tabs-titles-item-active {
+ // LTR 左对齐(及 RTL 左对齐类):末项一侧恢复肩部与间距
+ &:last-child {
+ margin-right: 24px;
+
+ &::after {
+ display: block;
+ }
+ }
+ }
+
+ &.nut-tabs-titles-right .nut-tabs-titles-item-active {
+ // LTR 右对齐(及 RTL 右对齐类):首项一侧恢复肩部与间距
+ &:first-child {
+ margin-left: 24px;
+
+ &::before {
+ display: block;
+ }
+ }
+ }
+ }
+
&-button {
.nut-tabs-titles-item {
padding: 0 4px;
@@ -475,6 +503,43 @@
}
}
+// RTL 卡片模式留白端镜像:对齐类(flex-start/flex-end)随书写方向翻转视觉端,
+// 贴边端/留白端与 DOM 首末项的对应关系同 LTR 相反,贴边侧直角、留白侧恢复肩部需按物理边重写
+[dir='rtl'] .nut-tabs-titles-card.nut-tabs-titles-not-scrollable,
+.nut-rtl .nut-tabs-titles-card.nut-tabs-titles-not-scrollable {
+ // RTL 左对齐类:内容贴视觉右端,首项贴边(直角在物理右侧)、末项邻留白
+ &:not(.nut-tabs-titles-right) .nut-tabs-titles-item-active {
+ &:first-child {
+ margin-left: 24px;
+ margin-right: 0;
+
+ &::before {
+ display: block;
+ }
+
+ &::after {
+ display: none;
+ }
+ }
+ }
+
+ // RTL 右对齐类:内容贴视觉左端,末项贴边(直角在物理左侧)、首项邻留白
+ &.nut-tabs-titles-right .nut-tabs-titles-item-active {
+ &:last-child {
+ margin-left: 0;
+ margin-right: 24px;
+
+ &::before {
+ display: none;
+ }
+
+ &::after {
+ display: block;
+ }
+ }
+ }
+}
+
[dir='rtl'] .nut-tabs-vertical,
.nut-rtl .nut-tabs-vertical {
.nut-tabs-titles {
diff --git a/src/packages/tabs/tabs.taro.tsx b/src/packages/tabs/tabs.taro.tsx
index 296991282a..ecd41f6cda 100644
--- a/src/packages/tabs/tabs.taro.tsx
+++ b/src/packages/tabs/tabs.taro.tsx
@@ -1,4 +1,10 @@
-import React, { FunctionComponent, useEffect, useRef, useState } from 'react'
+import React, {
+ FunctionComponent,
+ useCallback,
+ useEffect,
+ useRef,
+ useState,
+} from 'react'
import { ScrollView, View } from '@tarojs/components'
import classNames from 'classnames'
import { JoySmile } from '@nutui/icons-react-taro'
@@ -58,6 +64,10 @@ export const Tabs: FunctionComponent> & {
const titleItemsRef = useRef([])
+ // 卡片模式下,标题栏可横向滑动时激活卡片贴合两端边缘;不可滑动时(全部 tab 放得下)
+ // 贴边端直角、留白端恢复双肩
+ const [isScrollable, setIsScrollable] = useState(!align)
+
const getTitles = () => {
const titles: TabsTitle[] = []
React.Children.forEach(children, (child, idx) => {
@@ -99,10 +109,12 @@ export const Tabs: FunctionComponent> & {
)
const classesTitle = classNames(`${classPrefix}-titles`, {
[`${classPrefix}-titles-${activeType}`]: activeType,
+ [`${classPrefix}-titles-not-scrollable`]:
+ activeType === 'card' && !isScrollable,
[`${classPrefix}-titles-${align}`]: align,
})
- const getRect = (selector: string) => {
+ const getRect = useCallback((selector: string) => {
return new Promise((resolve) => {
const query = createSelectorQuery()
const scope = tabsRef.current?._scope
@@ -114,8 +126,8 @@ export const Tabs: FunctionComponent> & {
resolve(rect[0])
})
})
- }
- const getAllRect = (selector: string) => {
+ }, [])
+ const getAllRect = useCallback((selector: string) => {
return new Promise((resolve) => {
const query = createSelectorQuery()
const scope = tabsRef.current?._scope
@@ -127,7 +139,7 @@ export const Tabs: FunctionComponent> & {
resolve(rect[0])
})
})
- }
+ }, [])
type RectItem = {
bottom: number
dataset: { sid: string }
@@ -138,6 +150,28 @@ export const Tabs: FunctionComponent> & {
top: number
width: number
}
+ const measureScrollable = useCallback(() => {
+ if (activeType !== 'card' || direction !== 'horizontal' || !align) return
+ raf(() => {
+ Promise.all([
+ getRect(`#nut-tabs-titles-${name || uuid}`),
+ getAllRect(`#nut-tabs-titles-${name || uuid} .nut-tabs-titles-item`),
+ ]).then(([navRect, itemRects]: any) => {
+ if (!navRect || !itemRects || !itemRects.length) return
+ const totalWidth = itemRects.reduce(
+ (sum: number, curr: RectItem) => sum + curr.width,
+ 0
+ )
+ // 卡片模式 active 卡片 margin 不在 boundingClientRect 内,按最大 48px 预留,
+ // 与 scrollIntoView 的钳制口径一致,避免临界内容误判为放得下
+ setIsScrollable(totalWidth + 48 - navRect.width > 1)
+ })
+ })
+ }, [activeType, direction, name, uuid, getRect, getAllRect, align])
+ // 标题/内容变化后重新布局再测;挂载后首帧由默认 false 呈现对称样式,测量完异步翻转
+ useEffect(() => {
+ measureScrollable()
+ }, [measureScrollable, children])
const scrollWithAnimation = useRef(false)
const [scrollLeft, setScrollLeft] = useState(0)
const [scrollTop, setScrollTop] = useState(0)
@@ -180,9 +214,13 @@ export const Tabs: FunctionComponent> & {
const left = titleRects
.slice(0, index)
.reduce((prev: number, curr: RectItem) => prev + curr.width, 0)
+ // 卡片模式 active 卡片带 margin: 0 24px(贴边侧为 0),boundingClientRect 不含 margin,
+ // 矩形宽求和会少算,钳制点偏短导致滚动到末尾时末项卡片显示不全;
+ // 按最大 48px 预留,超设部分由 ScrollView 自动截断到真实最大滚动距离
+ const marginExtra = activeType === 'card' ? 48 : 0
to = Math.min(
Math.max(0, left - (navRect.width - titleRect.width) / 2),
- totalWidth - navRect.width
+ totalWidth + marginExtra - navRect.width
)
}
diff --git a/src/packages/tabs/tabs.tsx b/src/packages/tabs/tabs.tsx
index 4c7a964232..7ea9523cc6 100644
--- a/src/packages/tabs/tabs.tsx
+++ b/src/packages/tabs/tabs.tsx
@@ -1,4 +1,11 @@
-import React, { FunctionComponent, useEffect, useRef } from 'react'
+import React, {
+ FunctionComponent,
+ useCallback,
+ useEffect,
+ useLayoutEffect,
+ useRef,
+ useState,
+} from 'react'
import classNames from 'classnames'
import { JoySmile } from '@nutui/icons-react'
import { ComponentDefaults } from '@/utils/typings'
@@ -51,6 +58,31 @@ export const Tabs: FunctionComponent> & {
const navRef = useRef(null)
+ // 卡片模式下,标题栏可横向滑动时激活卡片贴合两端边缘;不可滑动时(全部 tab 放得下)
+ // 贴边端直角、留白端恢复双肩,依赖该标记切换样式
+ const [isScrollable, setIsScrollable] = useState(!align)
+ const measureScrollable = useCallback(() => {
+ if (activeType !== 'card' || direction !== 'horizontal' || !align) return
+ const nav = navRef.current
+ if (!nav) return
+ setIsScrollable(nav.scrollWidth - nav.clientWidth > 1)
+ }, [activeType, direction, align])
+
+ // 挂载后立即测量,避免首帧样式闪变
+ useLayoutEffect(() => {
+ measureScrollable()
+ }, [measureScrollable])
+
+ // 标题/内容变化后重新布局,再测一次;窗口尺寸变化时也重测
+ useEffect(() => {
+ raf(measureScrollable)
+ }, [children, measureScrollable])
+ useEffect(() => {
+ const onResize = () => raf(measureScrollable)
+ window.addEventListener('resize', onResize)
+ return () => window.removeEventListener('resize', onResize)
+ }, [measureScrollable])
+
const scrollDirection = (
nav: HTMLDivElement,
to: number,
@@ -131,6 +163,8 @@ export const Tabs: FunctionComponent> & {
const classesTitle = classNames(`${classPrefix}-titles`, {
[`${classPrefix}-titles-${activeType}`]: activeType,
[`${classPrefix}-titles-scrollable`]: true,
+ [`${classPrefix}-titles-not-scrollable`]:
+ activeType === 'card' && !isScrollable,
[`${classPrefix}-titles-${align}`]: align,
})
From fd0fccffafa5622617a896b6fae46cd0f193e6c4 Mon Sep 17 00:00:00 2001
From: Kasim <249813821@qq.com>
Date: Mon, 21 Sep 2026 21:08:44 +0800
Subject: [PATCH 10/11] =?UTF-8?q?refactor(tabs):=20=E7=A7=BB=E9=99=A4?=
=?UTF-8?q?=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84=E8=83=8C=E6=99=AF=E5=9B=BE?=
=?UTF-8?q?=E5=92=8C=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/packages/tabs/demos/h5/demo25.tsx | 17 ++++++++---------
src/packages/tabs/demos/taro/demo25.tsx | 18 +++++++++---------
2 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/src/packages/tabs/demos/h5/demo25.tsx b/src/packages/tabs/demos/h5/demo25.tsx
index 1fe8ef0e23..6c514d4147 100644
--- a/src/packages/tabs/demos/h5/demo25.tsx
+++ b/src/packages/tabs/demos/h5/demo25.tsx
@@ -13,9 +13,6 @@ const Demo25 = () => {
{ title: 'Tab6', paneKey: 'c6' },
]
- const maskUrl =
- 'https://img20.360buyimg.com/img/jfs/t1/528620/16/3371/845/6aacb069F6a9923f5/0276020048fb8b3a.png'
-
const renderTitles = () => {
const items = list.map((item) => {
const active = tabvalue === item.paneKey
@@ -46,7 +43,6 @@ const Demo25 = () => {
@@ -66,10 +62,13 @@ const Demo25 = () => {
height: 'var(--nutui-tabs-titles-height, 36px)',
}}
>
-
{
justifyContent: 'center',
height: '100%',
width: 'calc(36px * var(--nut-scale-f, 1))',
- background: 'var(--nutui-tabs-titles-background-color, #fff)',
+ background: 'var(--nutui-color-background, #f0f2f7)',
}}
>
diff --git a/src/packages/tabs/demos/taro/demo25.tsx b/src/packages/tabs/demos/taro/demo25.tsx
index 473dbd9b47..2d578fea90 100644
--- a/src/packages/tabs/demos/taro/demo25.tsx
+++ b/src/packages/tabs/demos/taro/demo25.tsx
@@ -1,5 +1,5 @@
import React, { useState } from 'react'
-import { View, Text, Image } from '@tarojs/components'
+import { View, Text } from '@tarojs/components'
import { Tabs, pxTransform } from '@nutui/nutui-react-taro'
import { Search } from '@nutui/icons-react-taro'
@@ -14,9 +14,6 @@ const Demo25 = () => {
{ title: 'Tab6', paneKey: 'c6' },
]
- const maskUrl =
- 'https://img20.360buyimg.com/img/jfs/t1/528620/16/3371/845/6aacb069F6a9923f5/0276020048fb8b3a.png'
-
const renderTitles = () => {
const items = list.map((item) => {
const active = tabvalue === item.paneKey
@@ -46,7 +43,6 @@ const Demo25 = () => {
@@ -66,9 +62,13 @@ const Demo25 = () => {
height: 'var(--nutui-tabs-titles-height, 36px)',
}}
>
-
{
justifyContent: 'center',
height: '100%',
width: pxTransform(36),
- background: 'var(--nutui-tabs-titles-background-color, #fff)',
+ background: 'var(--nutui-color-background, #f0f2f7)',
}}
>
From 8bb2ac527475835eb5b0f3e7df9c13908e298ef9 Mon Sep 17 00:00:00 2001
From: Kasim <249813821@qq.com>
Date: Mon, 21 Sep 2026 22:03:13 +0800
Subject: [PATCH 11/11] =?UTF-8?q?feat(tabs):=20=E6=9B=B4=E6=96=B0=E9=80=89?=
=?UTF-8?q?=E9=A1=B9=E5=8D=A1=E6=A0=87=E9=A2=98=E6=A0=B7=E5=BC=8F=EF=BC=8C?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81=E7=BC=A9=E6=94=BE=E5=92=8C?=
=?UTF-8?q?=E8=83=8C=E6=99=AF=E8=89=B2=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/packages/tabs/demos/h5/demo22.tsx | 10 ++++++++--
src/packages/tabs/demos/h5/demo24.tsx | 8 +++++---
src/packages/tabs/demos/h5/demo25.tsx | 20 ++++++++++++++++----
src/packages/tabs/demos/h5/demo4.tsx | 6 +++++-
src/packages/tabs/demos/h5/demo8.tsx | 6 +++++-
src/packages/tabs/demos/taro/demo25.tsx | 14 +++++++++++---
src/packages/tabs/demos/taro/demo4.tsx | 8 ++++++--
src/packages/tabs/demos/taro/demo8.tsx | 8 ++++++--
src/packages/tabs/doc.en-US.md | 4 ++--
src/packages/tabs/doc.md | 4 ++--
src/packages/tabs/doc.taro.md | 4 ++--
src/packages/tabs/doc.zh-TW.md | 4 ++--
src/styles/variables-daojia.scss | 2 +-
src/styles/variables-jmapp.scss | 2 +-
src/styles/variables-jrkf.scss | 2 +-
src/styles/variables.scss | 4 ++--
16 files changed, 75 insertions(+), 31 deletions(-)
diff --git a/src/packages/tabs/demos/h5/demo22.tsx b/src/packages/tabs/demos/h5/demo22.tsx
index a06e85e072..a9051bf676 100644
--- a/src/packages/tabs/demos/h5/demo22.tsx
+++ b/src/packages/tabs/demos/h5/demo22.tsx
@@ -11,7 +11,10 @@ const Demo22 = () => {
onChange={(value) => {
setTabvalue(value)
}}
- style={{ '--nutui-tabs-titles-font-size': '20px' }}
+ style={{
+ '--nutui-tabs-titles-font-size':
+ 'calc(20px * var(--nut-scale-font, 1))',
+ }}
>
Tab longitem
Tab 2
@@ -22,7 +25,10 @@ const Demo22 = () => {
onChange={(value) => {
setTabvalue1(value)
}}
- style={{ '--nutui-tabs-titles-font-size': '12px' }}
+ style={{
+ '--nutui-tabs-titles-font-size':
+ 'calc(12px * var(--nut-scale-font, 1))',
+ }}
>
Tab longitem
Tab 2
diff --git a/src/packages/tabs/demos/h5/demo24.tsx b/src/packages/tabs/demos/h5/demo24.tsx
index b566643cf8..86604d84fa 100644
--- a/src/packages/tabs/demos/h5/demo24.tsx
+++ b/src/packages/tabs/demos/h5/demo24.tsx
@@ -12,7 +12,9 @@ const Demo24 = () => {
return (
{
return list.map((item) => {
const active = tabvalue === item.paneKey
@@ -31,9 +33,9 @@ const Demo24 = () => {
{
position: 'relative',
}}
>
-
+
{list.map((item) => (
{item.title}
@@ -59,12 +67,13 @@ const Demo25 = () => {
right: 0,
display: 'flex',
alignItems: 'center',
- height: 'var(--nutui-tabs-titles-height, 36px)',
+ height:
+ 'var(--nutui-tabs-titles-height, calc(36px * var(--nut-scale-f, 1)))',
}}
>
{
background: 'var(--nutui-color-background, #f0f2f7)',
}}
>
-
+
diff --git a/src/packages/tabs/demos/h5/demo4.tsx b/src/packages/tabs/demos/h5/demo4.tsx
index 751113330f..592fe0aee7 100644
--- a/src/packages/tabs/demos/h5/demo4.tsx
+++ b/src/packages/tabs/demos/h5/demo4.tsx
@@ -7,7 +7,11 @@ const Demo4 = () => {
<>
{
setTabvalue(value)
}}
diff --git a/src/packages/tabs/demos/h5/demo8.tsx b/src/packages/tabs/demos/h5/demo8.tsx
index d706c25598..37fba43131 100644
--- a/src/packages/tabs/demos/h5/demo8.tsx
+++ b/src/packages/tabs/demos/h5/demo8.tsx
@@ -7,7 +7,11 @@ const Demo8 = () => {
<>
{
diff --git a/src/packages/tabs/demos/taro/demo25.tsx b/src/packages/tabs/demos/taro/demo25.tsx
index 2d578fea90..0b3286fc5d 100644
--- a/src/packages/tabs/demos/taro/demo25.tsx
+++ b/src/packages/tabs/demos/taro/demo25.tsx
@@ -45,7 +45,15 @@ const Demo25 = () => {
position: 'relative',
}}
>
-
+
{list.map((item) => (
{item.title}
@@ -59,7 +67,7 @@ const Demo25 = () => {
right: 0,
display: 'flex',
alignItems: 'center',
- height: 'var(--nutui-tabs-titles-height, 36px)',
+ height: `var(--nutui-tabs-titles-height, ${pxTransform(36)})`,
}}
>
{
background: 'var(--nutui-color-background, #f0f2f7)',
}}
>
-
+
diff --git a/src/packages/tabs/demos/taro/demo4.tsx b/src/packages/tabs/demos/taro/demo4.tsx
index 812b065967..72ef13827f 100644
--- a/src/packages/tabs/demos/taro/demo4.tsx
+++ b/src/packages/tabs/demos/taro/demo4.tsx
@@ -1,12 +1,16 @@
import React, { useState } from 'react'
-import { Tabs } from '@nutui/nutui-react-taro'
+import { Tabs, pxTransform } from '@nutui/nutui-react-taro'
const Demo4 = () => {
const [tabvalue, setTabvalue] = useState('0')
return (
{
setTabvalue(value)
}}
diff --git a/src/packages/tabs/demos/taro/demo8.tsx b/src/packages/tabs/demos/taro/demo8.tsx
index ebc9dfba71..2cafbfb418 100644
--- a/src/packages/tabs/demos/taro/demo8.tsx
+++ b/src/packages/tabs/demos/taro/demo8.tsx
@@ -1,12 +1,16 @@
import React, { useState } from 'react'
-import { Tabs } from '@nutui/nutui-react-taro'
+import { Tabs, pxTransform } from '@nutui/nutui-react-taro'
const Demo8 = () => {
const [tabvalue, setTabvalue] = useState('0')
return (
{
setTabvalue(value)
diff --git a/src/packages/tabs/doc.en-US.md b/src/packages/tabs/doc.en-US.md
index b6057ddae0..d07f50526e 100644
--- a/src/packages/tabs/doc.en-US.md
+++ b/src/packages/tabs/doc.en-US.md
@@ -254,7 +254,7 @@ The component provides the following CSS variables, which can be used to customi
| Name | Description | Default |
| --- | --- | --- |
| \--nutui-tabs-titles-height | height of titles in horizontal direction | `36px` |
-| \--nutui-tabs-titles-background-color | Tab title background color | `$color-background` |
+| \--nutui-tabs-titles-background-color | Tab title background color | `$color-background-overlay` |
| \--nutui-tabs-titles-gap | Tab title margin | `8px` |
| \--nutui-tabs-titles-font-size | Tab title font size | `$font-size-md` |
| \--nutui-tabs-titles-item-font-family | Tab title font family | `PingFangSC-Semibold` |
@@ -276,7 +276,7 @@ The component provides the following CSS variables, which can be used to customi
| \--nutui-tabs-button-font-size | Font size of unselected button-type title | `$font-size-base` |
| \--nutui-tabs-button-active-font-size | Font size of selected button-type title | `$font-size-base` |
| \--nutui-tabs-button-active-font-weight | Font weight of selected button-type title | `$font-weight-bold` |
-| \--nutui-tabs-button-background-color | Background color of unselected button-type title | `$color-background-overlay` |
+| \--nutui-tabs-button-background-color | Background color of unselected button-type title | `var(--nutui-color-background-component)` |
| \--nutui-tabs-vertical-titles-width | Width of vertical titles | `100px` |
| \--nutui-tabs-vertical-titles-item-height | height of vertical titles | `40px` |
| \--nutui-tabs-vertical-tab-line-color | vertical line color | `linear-gradient(180deg, $color-primary 0%, rgba(#fa2c19, 0.15) 100%)` |
diff --git a/src/packages/tabs/doc.md b/src/packages/tabs/doc.md
index 696b29a971..961d6d41bb 100644
--- a/src/packages/tabs/doc.md
+++ b/src/packages/tabs/doc.md
@@ -254,7 +254,7 @@ import { Tabs } from '@nutui/nutui-react'
| 名称 | 说明 | 默认值 |
| --- | --- | --- |
| \--nutui-tabs-titles-height | 水平方向标题的高度 | `36px` |
-| \--nutui-tabs-titles-background-color | Tab 标题的背景色 | `$color-background` |
+| \--nutui-tabs-titles-background-color | Tab 标题的背景色 | `$color-background-overlay` |
| \--nutui-tabs-titles-gap | Tab 标题的左右 margin | `8px` |
| \--nutui-tabs-titles-font-size | Tab 标题的字号 | `$font-size-md` |
| \--nutui-tabs-titles-item-font-family | Tab 标题的字体 | `PingFangSC-Semibold` |
@@ -276,7 +276,7 @@ import { Tabs } from '@nutui/nutui-react'
| \--nutui-tabs-button-font-size | 按钮模式未选中标题的字号 | `$font-size-base` |
| \--nutui-tabs-button-active-font-size | 按钮模式选中标题的字号 | `$font-size-base` |
| \--nutui-tabs-button-active-font-weight | 按钮模式选中标题的字重 | `$font-weight-bold` |
-| \--nutui-tabs-button-background-color | 按钮模式未选中标题的背景色 | `$color-background-overlay` |
+| \--nutui-tabs-button-background-color | 按钮模式未选中标题的背景色 | `var(--nutui-color-background-component)` |
| \--nutui-tabs-vertical-titles-width | 垂直方向标题的宽度 | `100px` |
| \--nutui-tabs-vertical-titles-item-height | 垂直方向标题的高度 | `40px` |
| \--nutui-tabs-vertical-tab-line-color | 垂直方向线条颜色 | `linear-gradient(180deg, $color-primary 0%, rgba(#FF0F23, 0.15) 100%)` |
diff --git a/src/packages/tabs/doc.taro.md b/src/packages/tabs/doc.taro.md
index a4f50b110d..a81997546c 100644
--- a/src/packages/tabs/doc.taro.md
+++ b/src/packages/tabs/doc.taro.md
@@ -252,7 +252,7 @@ import { Tabs } from '@nutui/nutui-react-taro'
| 名称 | 说明 | 默认值 |
| --- | --- | --- |
| \--nutui-tabs-titles-height | 水平方向标题的高度 | `36px` |
-| \--nutui-tabs-titles-background-color | Tab 标题的背景色 | `$color-background` |
+| \--nutui-tabs-titles-background-color | Tab 标题的背景色 | `$color-background-overlay` |
| \--nutui-tabs-titles-gap | Tab 标题的左右 margin | `8px` |
| \--nutui-tabs-titles-font-size | Tab 标题的字号 | `$font-size-md` |
| \--nutui-tabs-titles-item-font-family | Tab 标题的字体 | `PingFangSC-Semibold` |
@@ -274,7 +274,7 @@ import { Tabs } from '@nutui/nutui-react-taro'
| \--nutui-tabs-button-font-size | 按钮模式未选中标题的字号 | `$font-size-base` |
| \--nutui-tabs-button-active-font-size | 按钮模式选中标题的字号 | `$font-size-base` |
| \--nutui-tabs-button-active-font-weight | 按钮模式选中标题的字重 | `$font-weight-bold` |
-| \--nutui-tabs-button-background-color | 按钮模式未选中标题的背景色 | `$color-background-overlay` |
+| \--nutui-tabs-button-background-color | 按钮模式未选中标题的背景色 | `var(--nutui-color-background-component)` |
| \--nutui-tabs-vertical-titles-width | 垂直方向标题的宽度 | `100px` |
| \--nutui-tabs-vertical-titles-item-height | 垂直方向标题的高度 | `40px` |
| \--nutui-tabs-vertical-tab-line-color | 垂直方向线条颜色 | `linear-gradient(180deg, $color-primary 0%, rgba(#FF0F23, 0.15) 100%)` |
diff --git a/src/packages/tabs/doc.zh-TW.md b/src/packages/tabs/doc.zh-TW.md
index 1a5716badb..88753dcf4b 100644
--- a/src/packages/tabs/doc.zh-TW.md
+++ b/src/packages/tabs/doc.zh-TW.md
@@ -252,7 +252,7 @@ import { Tabs } from '@nutui/nutui-react'
| 名稱 | 說明 | 默認值 |
| --- | --- | --- |
| \--nutui-tabs-titles-height | 水平方向標題的高度 | `36px` |
-| \--nutui-tabs-titles-background-color | Tab 標題的背景色 | `$color-background` |
+| \--nutui-tabs-titles-background-color | Tab 標題的背景色 | `$color-background-overlay` |
| \--nutui-tabs-titles-gap | Tab 標題的左右 margin | `8px` |
| \--nutui-tabs-titles-font-size | Tab 標題的字號 | `$font-size-md` |
| \--nutui-tabs-titles-item-font-family | Tab 標題的字體 | `PingFangSC-Semibold` |
@@ -274,7 +274,7 @@ import { Tabs } from '@nutui/nutui-react'
| \--nutui-tabs-button-font-size | 按鈕模式未選中標題的字號 | `$font-size-base` |
| \--nutui-tabs-button-active-font-size | 按鈕模式選中標題的字號 | `$font-size-base` |
| \--nutui-tabs-button-active-font-weight | 按鈕模式選中標題的字重 | `$font-weight-bold` |
-| \--nutui-tabs-button-background-color | 按鈕模式未選中標題的背景色 | `$color-background-overlay` |
+| \--nutui-tabs-button-background-color | 按鈕模式未選中標題的背景色 | `var(--nutui-color-background-component)` |
| \--nutui-tabs-vertical-titles-width | 垂直方向標題的寬度 | `100px` |
| \--nutui-tabs-vertical-titles-item-height | 垂直方向標題的高度 | `40px` |
| \--nutui-tabs-vertical-tab-line-color | 垂直方向線條顏色 | `linear-gradient(180deg, $color-primary 0%, rgba(#FF0F23, 0.15) 100%)` |
diff --git a/src/styles/variables-daojia.scss b/src/styles/variables-daojia.scss
index 54aab27e91..13222d0031 100644
--- a/src/styles/variables-daojia.scss
+++ b/src/styles/variables-daojia.scss
@@ -1331,7 +1331,7 @@ $tabs-tab-button-active-font-size: var(--nutui-tabs-button-active-font-size,
$tabs-tab-button-active-font-weight: var(--nutui-tabs-button-active-font-weight,
$font-weight-bold) !default;
$tabs-tab-button-background-color: var(--nutui-tabs-button-background-color,
- $color-background-overlay) !default;
+ var(--nutui-color-background-component)) !default;
$tabs-tab-button-active-background-color: var(--nutui-tabs-button-active-background-color,
$color-primary-light-pressed) !default;
$tabs-tab-button-active-border: var(--nutui-tabs-button-active-border,
diff --git a/src/styles/variables-jmapp.scss b/src/styles/variables-jmapp.scss
index 0d9bf845f7..fd0eda8336 100644
--- a/src/styles/variables-jmapp.scss
+++ b/src/styles/variables-jmapp.scss
@@ -2201,7 +2201,7 @@ $tabs-tab-button-active-font-weight: var(
) !default;
$tabs-tab-button-background-color: var(
--nutui-tabs-button-background-color,
- $color-background-overlay
+ var(--nutui-color-background-component)
) !default;
$tabs-tab-button-active-background-color: var(
--nutui-tabs-button-active-background-color,
diff --git a/src/styles/variables-jrkf.scss b/src/styles/variables-jrkf.scss
index 5632ccb3af..be91289109 100644
--- a/src/styles/variables-jrkf.scss
+++ b/src/styles/variables-jrkf.scss
@@ -2308,7 +2308,7 @@ $tabs-tab-button-active-font-weight: var(
) !default;
$tabs-tab-button-background-color: var(
--nutui-tabs-button-background-color,
- $color-background-overlay
+ var(--nutui-color-background-component)
) !default;
$tabs-tab-button-active-background-color: var(
--nutui-tabs-button-active-background-color,
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index adcbf17b57..4b5ad0014e 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -2108,7 +2108,7 @@ $pagination-lite-active-background-color: var(
$tabs-titles-height: var(--nutui-tabs-titles-height, scale-px(36px)) !default;
$tabs-titles-background-color: var(
--nutui-tabs-titles-background-color,
- $color-background
+ $color-background-overlay
) !default;
$tabs-titles-gap: var(--nutui-tabs-titles-gap, scale-px(8px)) !default;
$tabs-titles-font-size: var(
@@ -2178,7 +2178,7 @@ $tabs-tab-button-active-font-weight: var(
) !default;
$tabs-tab-button-background-color: var(
--nutui-tabs-button-background-color,
- $color-background-overlay
+ var(--nutui-color-background-component)
) !default;
$tabs-tab-button-active-background-color: var(
--nutui-tabs-button-active-background-color,