mirror of
https://github.com/strapi/strapi.git
synced 2025-07-14 12:32:35 +00:00
155 lines
3.7 KiB
Vue
155 lines
3.7 KiB
Vue
![]() |
<template>
|
||
|
<div class="dropdown-wrapper" :class="{ open }">
|
||
|
<a class="dropdown-title" @click="toggle">
|
||
|
<span class="title">{{ item.text }}</span>
|
||
|
<span class="arrow" :class="open ? 'down' : 'right'"></span>
|
||
|
</a>
|
||
|
<DropdownTransition>
|
||
|
<ul class="nav-dropdown" v-show="open">
|
||
|
<li
|
||
|
class="dropdown-item"
|
||
|
v-for="(subItem, index) in item.items"
|
||
|
:key="subItem.link || index">
|
||
|
<h4 v-if="subItem.type === 'links'">{{ subItem.text }}</h4>
|
||
|
<ul class="dropdown-subitem-wrapper" v-if="subItem.type === 'links'">
|
||
|
<li
|
||
|
class="dropdown-subitem"
|
||
|
v-for="childSubItem in subItem.items"
|
||
|
:key="childSubItem.link">
|
||
|
<NavLink :item="childSubItem"/>
|
||
|
</li>
|
||
|
</ul>
|
||
|
<NavLink v-else :item="subItem"/>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</DropdownTransition>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import NavLink from './NavLink.vue'
|
||
|
import DropdownTransition from './DropdownTransition.vue'
|
||
|
|
||
|
export default {
|
||
|
components: { NavLink, DropdownTransition },
|
||
|
data () {
|
||
|
return {
|
||
|
open: false
|
||
|
}
|
||
|
},
|
||
|
props: {
|
||
|
item: {
|
||
|
required: true
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
toggle () {
|
||
|
this.open = !this.open
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style lang="stylus">
|
||
|
@import './styles/config.styl'
|
||
|
|
||
|
.dropdown-wrapper
|
||
|
.dropdown-title
|
||
|
display block
|
||
|
&:hover
|
||
|
border-color transparent
|
||
|
.arrow
|
||
|
vertical-align middle
|
||
|
margin-top -1px
|
||
|
margin-left 0.4rem
|
||
|
.nav-dropdown
|
||
|
.dropdown-item
|
||
|
color inherit
|
||
|
line-height 1.7rem
|
||
|
h4
|
||
|
margin 0.45rem 0 0
|
||
|
border-top 1px solid #eee
|
||
|
padding 0.45rem 1.5rem 0 1.25rem
|
||
|
.dropdown-subitem-wrapper
|
||
|
padding 0
|
||
|
list-style none
|
||
|
.dropdown-subitem
|
||
|
font-size 0.9em
|
||
|
a
|
||
|
display block
|
||
|
line-height 1.7rem
|
||
|
position relative
|
||
|
border-bottom none
|
||
|
font-weight 400
|
||
|
margin-bottom 0
|
||
|
padding 0 1.5rem 0 1.25rem
|
||
|
&:hover
|
||
|
color $accentColor
|
||
|
&.router-link-active
|
||
|
color $accentColor
|
||
|
&::after
|
||
|
content ""
|
||
|
width 0
|
||
|
height 0
|
||
|
border-left 5px solid $accentColor
|
||
|
border-top 3px solid transparent
|
||
|
border-bottom 3px solid transparent
|
||
|
position absolute
|
||
|
top calc(50% - 2px)
|
||
|
left 9px
|
||
|
&:first-child h4
|
||
|
margin-top 0
|
||
|
padding-top 0
|
||
|
border-top 0
|
||
|
|
||
|
@media (max-width: $MQMobile)
|
||
|
.dropdown-wrapper
|
||
|
&.open .dropdown-title
|
||
|
margin-bottom 0.5rem
|
||
|
.nav-dropdown
|
||
|
transition height .1s ease-out
|
||
|
overflow hidden
|
||
|
.dropdown-item
|
||
|
h4
|
||
|
border-top 0
|
||
|
margin-top 0
|
||
|
padding-top 0
|
||
|
h4, & > a
|
||
|
font-size 15px
|
||
|
line-height 2rem
|
||
|
.dropdown-subitem
|
||
|
font-size 14px
|
||
|
padding-left 1rem
|
||
|
|
||
|
@media (min-width: $MQMobile)
|
||
|
.dropdown-wrapper
|
||
|
height 1.8rem
|
||
|
&:hover .nav-dropdown
|
||
|
// override the inline style.
|
||
|
display block !important
|
||
|
.dropdown-title .arrow
|
||
|
// make the arrow always down at desktop
|
||
|
border-left 4px solid transparent
|
||
|
border-right 4px solid transparent
|
||
|
border-top 6px solid $arrowBgColor
|
||
|
border-bottom 0
|
||
|
.nav-dropdown
|
||
|
display none
|
||
|
// Avoid height shaked by clicking
|
||
|
height auto !important
|
||
|
box-sizing border-box;
|
||
|
max-height calc(100vh - 2.7rem)
|
||
|
overflow-y auto
|
||
|
position absolute
|
||
|
top 100%
|
||
|
right 0
|
||
|
background-color #fff
|
||
|
padding 0.6rem 0
|
||
|
border 1px solid #ddd
|
||
|
border-bottom-color #ccc
|
||
|
text-align left
|
||
|
border-radius 0.25rem
|
||
|
white-space nowrap
|
||
|
margin 0
|
||
|
</style>
|