1
1
<template >
2
2
<nav class =" nav-links" v-if =" userLinks.length || githubLink" >
3
3
<!-- user links -->
4
- <router-link v-for =" item in userLinks"
5
- :to =" item.link"
6
- :key =" item.link" >
7
- {{ item.text }}
8
- </router-link >
4
+ <div class =" nav-item" v-for =" item in userLinks" :key =" item.link" >
5
+ <div
6
+ v-if =" item.type === 'dropdown'"
7
+ class =" nav-dropdown-wrapper" >
8
+ <span >{{ item.text }}</span >
9
+ <ul class =" nav-dropdown" >
10
+ <li v-for =" subItem in item.items" >
11
+ <router-link
12
+ :to =" subItem.link" >
13
+ {{ subItem.text }}
14
+ </router-link >
15
+ </li >
16
+ </ul >
17
+ </div >
18
+ <router-link
19
+ v-else
20
+ :to =" item.link" >
21
+ {{ item.text }}
22
+ </router-link >
23
+ </div >
9
24
<!-- github link -->
10
25
<a v-if =" githubLink"
11
26
:href =" githubLink"
@@ -26,9 +41,11 @@ export default {
26
41
components: { OutboundLink },
27
42
computed: {
28
43
userLinks () {
29
- return (this .$site .themeConfig .nav || []).map (item => ({
30
- text: item .text ,
31
- link: ensureExt (item .link )
44
+ return (this .$site .themeConfig .nav || []).map (({ text, link, type, items }) => ({
45
+ text,
46
+ type,
47
+ link: ensureExt (link),
48
+ items: (items || []).map (({ text, link }) => ({ text, link: ensureExt (link) }))
32
49
}))
33
50
},
34
51
githubLink () {
@@ -52,12 +69,52 @@ export default {
52
69
.nav-links
53
70
display inline-block
54
71
a
55
- color inherit
56
- font-weight 500
57
72
line-height 1.25rem
58
- margin-left 1.5 rem
73
+ color inherit
59
74
& :hover , & .router-link-active
60
75
color $accentColor
76
+ .github-link
77
+ margin-left 1.5rem
78
+ .nav-item
79
+ position relative
80
+ display inline-block
81
+ margin-left 1.5rem
82
+ font-weight 500
83
+ line-height 2rem
84
+ .nav-dropdown-wrapper
85
+ cursor pointer
86
+ padding-right 15px
87
+ & :after
88
+ content : ''
89
+ position absolute
90
+ right : 0px
91
+ top : calc (50% - 2px )
92
+ display block
93
+ border-left : 4px solid transparent
94
+ border-right : 4px solid transparent
95
+ border-top : 5px solid #c c c
96
+ & :hover
97
+ .nav-dropdown
98
+ display : block
99
+ .nav-dropdown
100
+ display : none
101
+ box-sizing : border-box ;
102
+ max-height : calc (100vh - 2.7rem )
103
+ overflow-y : auto
104
+ position : absolute
105
+ top : 100%
106
+ right : 0
107
+ background-color : #f f f
108
+ padding : 10px 0
109
+ border : 1px solid #d d d
110
+ border-bottom-color : #c c c
111
+ text-align : left
112
+ border-radius : 0.25rem
113
+ white-space : nowrap
114
+ margin 0
115
+ & > li
116
+ line-height 1.7rem
117
+ padding : 0 1.5rem 0 1.25rem ;
61
118
62
119
@media (max-width : $MQMobile)
63
120
.nav-links a
0 commit comments