2
2
<div class =" dropdown-wrapper" :class =" { open }" >
3
3
<a class =" dropdown-title" @click =" toggle" >
4
4
<span class =" title" >{{ item.text }}</span >
5
- <span class =" arrow" ></span >
5
+ <span class =" arrow" :class = " open ? 'down' : 'right' " ></span >
6
6
</a >
7
- <ul class =" nav-dropdown" >
8
- <li
7
+ <DropdownTransition >
8
+ <ul class =" nav-dropdown" v-show =" open" >
9
+ <li
9
10
class =" dropdown-item"
10
11
v-for =" subItem in item.items"
11
12
:key =" subItem.link" >
12
- <h4 v-if =" subItem.type === 'links'" >{{ subItem.text }}</h4 >
13
- <ul class =" dropdown-subitem-wrapper" v-if =" subItem.type === 'links'" >
14
- <li
13
+ <h4 v-if =" subItem.type === 'links'" >{{ subItem.text }}</h4 >
14
+ <ul class =" dropdown-subitem-wrapper" v-if =" subItem.type === 'links'" >
15
+ <li
15
16
class =" dropdown-subitem"
16
17
v-for =" childSubItem in subItem.items"
17
18
:key =" childSubItem.link" >
18
- <NavLink :item =" childSubItem" />
19
- </li >
20
- </ul >
21
- <NavLink v-else :item =" subItem" />
22
- </li >
23
- </ul >
19
+ <NavLink :item =" childSubItem" />
20
+ </li >
21
+ </ul >
22
+ <NavLink v-else :item =" subItem" />
23
+ </li >
24
+ </ul >
25
+ </DropdownTransition >
24
26
</div >
25
27
</template >
26
28
27
29
<script >
28
30
import { isExternal , ensureExt } from ' ./util'
29
31
import NavLink from ' ./NavLink.vue'
32
+ import DropdownTransition from ' ./DropdownTransition.vue'
30
33
31
34
export default {
32
- components: { NavLink },
35
+ components: { NavLink, DropdownTransition },
33
36
data () {
34
37
return {
35
38
open: false
@@ -54,16 +57,12 @@ export default {
54
57
.dropdown-wrapper
55
58
.dropdown-title
56
59
display block
60
+ & :hover
61
+ border-color transparent
57
62
.arrow
58
- display inline-block
59
63
vertical-align middle
60
64
margin-top - 1px
61
65
margin-left 0.4rem
62
- width 0
63
- height 0
64
- border-left 4px solid transparent
65
- border-right 4px solid transparent
66
- border-top 5px solid #c c c
67
66
.nav-dropdown
68
67
.dropdown-item
69
68
color inherit
@@ -109,14 +108,9 @@ export default {
109
108
.dropdown-wrapper
110
109
& .open .dropdown-title
111
110
margin-bottom 0.5rem
112
- & :not (.open )
113
- .dropdown-title .arrow
114
- border-top 4px solid transparent
115
- border-bottom 4px solid transparent
116
- border-left 5px solid #c c c
117
- .nav-dropdown
118
- display none
119
111
.nav-dropdown
112
+ transition height .1s ease-out
113
+ overflow hidden
120
114
.dropdown-item
121
115
h4
122
116
border-top 0
@@ -134,9 +128,18 @@ export default {
134
128
.dropdown-wrapper
135
129
height 1.8rem
136
130
& :hover .nav-dropdown
137
- display block
131
+ // override the inline style.
132
+ display block !important
133
+ .dropdown-title .arrow
134
+ // make the arrow always down at desktop
135
+ border-left 4px solid transparent
136
+ border-right 4px solid transparent
137
+ border-top 6px solid $arrowBgColor
138
+ border-bottom 0
138
139
.nav-dropdown
139
140
display none
141
+ // Avoid height shaked by clicking
142
+ height auto !important
140
143
box-sizing border-box ;
141
144
max-height calc (100vh - 2.7rem )
142
145
overflow-y auto
0 commit comments