chore(Cascader): enable tabs shrink (#10128)

This commit is contained in:
neverland 2021-12-30 16:30:25 +08:00 committed by GitHub
parent 383f83598e
commit 9c16f4240a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 54 additions and 62 deletions

View File

@ -269,10 +269,10 @@ export default defineComponent({
const renderTabs = () => ( const renderTabs = () => (
<Tabs <Tabs
v-model:active={activeTab.value} v-model:active={activeTab.value}
shrink
animated animated
class={bem('tabs')} class={bem('tabs')}
color={props.activeColor} color={props.activeColor}
swipeThreshold={0}
swipeable={props.swipeable} swipeable={props.swipeable}
onClick-tab={onClickTab} onClick-tab={onClickTab}
> >

View File

@ -37,19 +37,9 @@
} }
&__tabs { &__tabs {
.van-tab {
flex: none;
padding: 0 10px;
}
&.van-tabs--line .van-tabs__wrap { &.van-tabs--line .van-tabs__wrap {
height: var(--van-cascader-tabs-height); height: var(--van-cascader-tabs-height);
} }
.van-tabs__nav--complete {
padding-right: 6px;
padding-left: 6px;
}
} }
&__tab { &__tab {

View File

@ -75,14 +75,14 @@ exports[`should update tabs when previous tab is clicked 1`] = `
</i> </i>
</div> </div>
<div class="van-tabs van-tabs--line van-cascader__tabs"> <div class="van-tabs van-tabs--line van-cascader__tabs">
<div class="van-tabs__wrap van-tabs__wrap--scrollable"> <div class="van-tabs__wrap">
<div role="tablist" <div role="tablist"
class="van-tabs__nav van-tabs__nav--line van-tabs__nav--complete" class="van-tabs__nav van-tabs__nav--line van-tabs__nav--shrink van-tabs__nav--complete"
aria-orientation="horizontal" aria-orientation="horizontal"
> >
<div id="van-tabs-0" <div id="van-tabs-0"
role="tab" role="tab"
class="van-tab van-tab--line van-cascader__tab" class="van-tab van-tab--line van-tab--shrink van-cascader__tab"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
> >
@ -92,7 +92,7 @@ exports[`should update tabs when previous tab is clicked 1`] = `
</div> </div>
<div id="van-tabs-1" <div id="van-tabs-1"
role="tab" role="tab"
class="van-tab van-tab--line van-tab--active van-cascader__tab van-cascader__tab--unselected" class="van-tab van-tab--line van-tab--shrink van-tab--active van-cascader__tab van-cascader__tab--unselected"
tabindex="0" tabindex="0"
aria-selected="true" aria-selected="true"
> >

View File

@ -172,14 +172,14 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div> <div>
<div class="van-tabs van-tabs--line"> <div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-tabs__wrap--scrollable"> <div class="van-tabs__wrap">
<div role="tablist" <div role="tablist"
class="van-tabs__nav van-tabs__nav--line van-tabs__nav--complete" class="van-tabs__nav van-tabs__nav--line van-tabs__nav--complete"
aria-orientation="horizontal" aria-orientation="horizontal"
> >
<div id="van-tabs-0" <div id="van-tabs-0"
role="tab" role="tab"
class="van-tab van-tab--line van-tab--active" class="van-tab van-tab--line van-tab--grow van-tab--active"
tabindex="0" tabindex="0"
aria-selected="true" aria-selected="true"
aria-controls="van-tab" aria-controls="van-tab"
@ -190,7 +190,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-1" <div id="van-tabs-1"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -201,7 +201,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-2" <div id="van-tabs-2"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -212,7 +212,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-3" <div id="van-tabs-3"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -223,7 +223,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-4" <div id="van-tabs-4"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -234,7 +234,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-5" <div id="van-tabs-5"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -245,7 +245,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-6" <div id="van-tabs-6"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -256,7 +256,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-7" <div id="van-tabs-7"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -644,7 +644,7 @@ exports[`should render demo and match snapshot 1`] = `
<div class="van-tabs van-tabs--line"> <div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap"> <div class="van-tabs__wrap">
<div role="tablist" <div role="tablist"
class="van-tabs__nav van-tabs__nav--line van-tabs__nav--shrink" class="van-tabs__nav van-tabs__nav--line van-tabs__nav--shrink van-tabs__nav--complete"
aria-orientation="horizontal" aria-orientation="horizontal"
> >
<div id="van-tabs-0" <div id="van-tabs-0"
@ -654,7 +654,7 @@ exports[`should render demo and match snapshot 1`] = `
aria-selected="true" aria-selected="true"
aria-controls="van-tab" aria-controls="van-tab"
> >
<span class="van-tab__text van-tab__text--ellipsis"> <span class="van-tab__text">
Tab 1 Tab 1
</span> </span>
</div> </div>
@ -665,7 +665,7 @@ exports[`should render demo and match snapshot 1`] = `
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
> >
<span class="van-tab__text van-tab__text--ellipsis"> <span class="van-tab__text">
Tab 2 Tab 2
</span> </span>
</div> </div>
@ -676,7 +676,7 @@ exports[`should render demo and match snapshot 1`] = `
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
> >
<span class="van-tab__text van-tab__text--ellipsis"> <span class="van-tab__text">
Tab 3 Tab 3
</span> </span>
</div> </div>
@ -687,7 +687,7 @@ exports[`should render demo and match snapshot 1`] = `
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
> >
<span class="van-tab__text van-tab__text--ellipsis"> <span class="van-tab__text">
Tab 4 Tab 4
</span> </span>
</div> </div>
@ -736,7 +736,7 @@ exports[`should render demo and match snapshot 1`] = `
<div class="van-tabs van-tabs--card"> <div class="van-tabs van-tabs--card">
<div class="van-tabs__wrap"> <div class="van-tabs__wrap">
<div role="tablist" <div role="tablist"
class="van-tabs__nav van-tabs__nav--card van-tabs__nav--shrink" class="van-tabs__nav van-tabs__nav--card van-tabs__nav--shrink van-tabs__nav--complete"
aria-orientation="horizontal" aria-orientation="horizontal"
> >
<div id="van-tabs-0" <div id="van-tabs-0"
@ -746,7 +746,7 @@ exports[`should render demo and match snapshot 1`] = `
aria-selected="true" aria-selected="true"
aria-controls="van-tab" aria-controls="van-tab"
> >
<span class="van-tab__text van-tab__text--ellipsis"> <span class="van-tab__text">
Tab 1 Tab 1
</span> </span>
</div> </div>
@ -757,7 +757,7 @@ exports[`should render demo and match snapshot 1`] = `
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
> >
<span class="van-tab__text van-tab__text--ellipsis"> <span class="van-tab__text">
Tab 2 Tab 2
</span> </span>
</div> </div>
@ -768,7 +768,7 @@ exports[`should render demo and match snapshot 1`] = `
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
> >
<span class="van-tab__text van-tab__text--ellipsis"> <span class="van-tab__text">
Tab 3 Tab 3
</span> </span>
</div> </div>
@ -779,7 +779,7 @@ exports[`should render demo and match snapshot 1`] = `
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
> >
<span class="van-tab__text van-tab__text--ellipsis"> <span class="van-tab__text">
Tab 4 Tab 4
</span> </span>
</div> </div>
@ -1096,14 +1096,14 @@ exports[`should render demo and match snapshot 1`] = `
<div class="van-tabs van-tabs--line"> <div class="van-tabs van-tabs--line">
<div> <div>
<div class="van-sticky"> <div class="van-sticky">
<div class="van-tabs__wrap van-tabs__wrap--scrollable"> <div class="van-tabs__wrap">
<div role="tablist" <div role="tablist"
class="van-tabs__nav van-tabs__nav--line van-tabs__nav--complete" class="van-tabs__nav van-tabs__nav--line van-tabs__nav--complete"
aria-orientation="horizontal" aria-orientation="horizontal"
> >
<div id="van-tabs-0" <div id="van-tabs-0"
role="tab" role="tab"
class="van-tab van-tab--line van-tab--active" class="van-tab van-tab--line van-tab--grow van-tab--active"
tabindex="0" tabindex="0"
aria-selected="true" aria-selected="true"
aria-controls="van-tab" aria-controls="van-tab"
@ -1114,7 +1114,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-1" <div id="van-tabs-1"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -1125,7 +1125,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-2" <div id="van-tabs-2"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -1136,7 +1136,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-3" <div id="van-tabs-3"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -1147,7 +1147,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-4" <div id="van-tabs-4"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -1158,7 +1158,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-5" <div id="van-tabs-5"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -1169,7 +1169,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-6" <div id="van-tabs-6"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"
@ -1180,7 +1180,7 @@ exports[`should render demo and match snapshot 1`] = `
</div> </div>
<div id="van-tabs-7" <div id="van-tabs-7"
role="tab" role="tab"
class="van-tab van-tab--line" class="van-tab van-tab--line van-tab--grow"
tabindex="-1" tabindex="-1"
aria-selected="false" aria-selected="false"
aria-controls="van-tab" aria-controls="van-tab"

View File

@ -139,7 +139,10 @@ export default defineComponent({
// whether the nav is scrollable // whether the nav is scrollable
const scrollable = computed( const scrollable = computed(
() => children.length > props.swipeThreshold || !props.ellipsis () =>
children.length > props.swipeThreshold ||
!props.ellipsis ||
props.shrink
); );
const navStyle = computed(() => ({ const navStyle = computed(() => ({
@ -398,7 +401,7 @@ export default defineComponent({
<div <div
ref={wrapRef} ref={wrapRef}
class={[ class={[
bem('wrap', { scrollable: scrollable.value }), bem('wrap'),
{ [BORDER_TOP_BOTTOM]: type === 'line' && border }, { [BORDER_TOP_BOTTOM]: type === 'line' && border },
]} ]}
> >

View File

@ -83,6 +83,7 @@ export default defineComponent({
bem([ bem([
props.type, props.type,
{ {
grow: props.scrollable && !props.shrink,
shrink: props.shrink, shrink: props.shrink,
active: props.isActive, active: props.isActive,
disabled: props.disabled, disabled: props.disabled,

View File

@ -38,6 +38,11 @@
cursor: not-allowed; cursor: not-allowed;
} }
&--grow {
flex: 1 0 auto;
padding: 0 var(--van-padding-sm);
}
&--shrink { &--shrink {
flex: none; flex: none;
padding: 0 var(--van-padding-xs); padding: 0 var(--van-padding-xs);
@ -86,23 +91,6 @@
top: auto; top: auto;
bottom: 0; bottom: 0;
} }
&--scrollable {
.van-tab {
flex: 1 0 auto;
padding: 0 var(--van-padding-sm);
}
.van-tabs__nav {
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
&::-webkit-scrollbar {
display: none;
}
}
}
} }
&__nav { &__nav {
@ -111,6 +99,16 @@
background: var(--van-tabs-nav-background-color); background: var(--van-tabs-nav-background-color);
user-select: none; user-select: none;
&--complete {
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
&::-webkit-scrollbar {
display: none;
}
}
&--line { &--line {
box-sizing: content-box; box-sizing: content-box;
height: 100%; height: 100%;