Dropdown
Wrap the trigger element (such as an <IButton>
) and provide a <template #body>
inside an <IDropdown>
component to create a dropdown.
<template>
<IDropdown>
<IButton>Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
</template>
Trigger dropdowns at the top
, bottom
, left
or right
of elements by using the placement
property.
Each position also has a -start
or -end
variant that sets the dropdown to the start or end of the placement instead of centering it. The possible placements are:
top
top-start
top-end
bottom
bottom-start
bottom-end
left
left-start
left-end
right
right-start
right-end
<template>
<IDropdown placement="top">
<IButton>Top Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown placement="bottom">
<IButton>Bottom Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown placement="left">
<IButton>Left Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown placement="right">
<IButton>Right Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
</template>
You can use the trigger
property to trigger the dropdown on hover
or click
. By default, dropdowns are triggered on hover
, a design decision made to improve user experience.
<script>
export default {
data() {
return {
visible: false
};
}
};
</script>
<template>
<IDropdown events="click">
<IButton>Click Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown events="hover">
<IButton>Hover Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown events="focus">
<IButton type="submit">Focus Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown :events="['focus', 'hover']">
<IButton>Multiple Events Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown v-model:visible="visible" events="manual">
<IButton @click="visible = !visible">Manual Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
</template>
You're not required to use any dropdown-specific components inside of the <IDropdown>
body. You can add your own HTML markup without any issues. You might need additional size styles to control the content width.
<template>
<IDropdown>
<IButton>Dropdown</IButton>
<template #body>
<div class="_padding:1">This is a freeform dropdown example.</div>
</template>
</IDropdown>
</template>
You can provide an optional header or footer for your dropdown menus using slots.
<template>
<IDropdown>
<IButton>Dropdown</IButton>
<template #header> Dropdown Header </template>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
<template #footer> Dropdown Footer </template>
</IDropdown>
</template>
Dropdown items will be automatically converted to link anchors <a>
when providing a href
property. You can also specify target
and rel
properties.
The <IDropdownItem>
component is well integrated with the Vue Router plugin and will be converted to a <RouterLink>
when using the to property.
<template>
<IDropdown>
<IButton>Dropdown</IButton>
<template #body>
<IDropdownItem href="https://inkline.io">Link</IDropdownItem>
<IDropdownItem :to="{ path: '/docs/components/dropdown' }">Router Link</IDropdownItem>
</template>
</IDropdown>
</template>
You can control the active state of your <IDropdownItem>
using the active
property. If you're providing a :to
property, converting it into a router-link
, you can use the active-class
and exact-active-class
properties and set them to -active
.
<template>
<IDropdown>
<IButton>Dropdown</IButton>
<template #body>
<IDropdownItem :to="{ path: '/docs/components/dropdown' }" exact-active-class="-active">
Active Router Link
</IDropdownItem>
<IDropdownItem active>Active Item</IDropdownItem>
</template>
</IDropdown>
</template>
You can choose a light or dark color for your dropdown using the color
modifier.
<template>
<IDropdown color="light">
<IButton color="light">Light Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown color="dark">
<IButton color="dark">Dark Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
</template>
You're able to use the size
property to control the size of your dropdowns, using one of the available sizes: sm
, md
, and lg
.
The default size is set to md
.
<template>
<IDropdown size="sm">
<IButton>Small Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown size="md">
<IButton>Medium Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdown size="lg">
<IButton>Large Dropdown</IButton>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
</template>
Inkline allows you to have virtually infinite recursive dropdown submenus structure by defining a <IDropdown>
inside of another dropdown's body. This awesome feature gives you great design flexibility.
<template>
<IDropdown>
<IButton>Dropdown</IButton>
<template #body>
<IDropdown placement="right">
<IDropdownItem>Dropdown here</IDropdownItem>
<template #body>
<IDropdownItem>Action</IDropdownItem>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
<IDropdownItem>Another action</IDropdownItem>
<IDropdownItem disabled>Disabled action</IDropdownItem>
<IDropdownDivider />
<IDropdownItem>Separated item</IDropdownItem>
</template>
</IDropdown>
</template>
IDropdown
IDropdownItem
IDropdown
IDropdownItem
IDropdown
IDropdown
IDropdownItem
IDropdownDivider