mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-30 17:37:26 +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>
 | 
