Nestable
Create nestable lists that can be sorted by drag and drop.
The Nestable allows you to sort items through drag and drop. This is great, if you want to organize different categories or menu items in administration areas, for example.
Usage
A nestable list consists of the list itself, its items and the nestable panel.
Class/Data attribute | Description |
---|---|
.uk-nestable |
Add this class to a <ul> element to define the component. |
.uk-nestable-item |
Add this class to each <li> element the list item. |
.uk-nestable-panel |
Add this class to a <div> element inside the <li> element to style the item. |
NOTE To enable the necessary JavaScript, just add the data-uk-nestable
attribute.
Example
-
Item 1
-
Item 2
-
Item 3
-
Item 4
Markup
<ul class="uk-nestable" data-uk-nestable>
<li class="uk-nestable-item">
<div class="uk-nestable-panel"> ... </div>
</li>
</ul>
Nestable handle
By default, the entire nestable element can be used for drag and drop sorting. To create a handle which will be used instead, just add the {handleClass:'uk-nestable-handle'}
option to the data attribute and add the handle class to the element that you want to use as a handle.
Example
-
Item 1
-
Item 2
-
Item 3
-
Item 4
NOTE In this example we used the .uk-icon-bars
class from the Icon component to style the handle.
Markup
<ul class="uk-nestable" data-uk-nestable="{handleClass:'uk-nestable-handle'}">
<li class="uk-nestable-item">
<div class="uk-nestable-panel">
<div class="uk-nestable-handle"></div>
...
</div>
</li>
</ul>
Nestable toggle
By default, the entire nestable element can be used for drag and drop sorting. To create a handle which will be used instead, just add the .uk-nestable-toggle
class and the data-nestable-action="toggle"
attribute to a <div>
element inside the nestable panel.
Example
-
Item 1
-
Item 2
-
Item 3
-
Item 4
Markup
<ul class="uk-nestable" data-uk-nestable">
<li class="uk-nestable-item">
<div class="uk-nestable-panel">
<div class="uk-nestable-toggle" data-nestable-action="toggle"></div>
...
</div>
</li>
</ul>
Multiple lists
To be able to sort items from one list to another, you can group them by adding the data-uk-nestable="{group:'GROUP-NAME'}"
attribute to each list.
Example
First list
-
Item 1
-
Item 2
-
Item 3
-
Item 4
Second list
-
Item 1
-
Item 2
-
Item 3
-
Item 4
Markup
<ul class="uk-nestable" data-uk-nestable="{group:'my-group'}">...</ul>
<ul class="uk-nestable" data-uk-nestable="{group:'my-group'}">...</ul>
Disable nesting
To disable nesting of list items, just add the data-uk-nestable="{maxDepth:1}"
attribute. You can also use this data attribute to determine to what depth nesting is possible.
-
Item 1
-
Item 2
-
Item 3
-
Item 4
Markup
<ul class="uk-nestable" data-uk-nestable="{maxDepth:1}">...</ul>
JavaScript options
This is an example of how to set options via attribute:
data-uk-nestable="{maxDepth:0, group:'widgets'}"
Option | Possible value | Default | Description |
---|---|---|---|
group |
string | false | List group |
maxDepth |
integer | 10 | Max nesting level |
threshold |
integer | 20 | Pixel threshold before starting to drag |
listNodeName |
string | ul | List node name |
itemNodeName |
string | li | Item node name |
listBaseClass |
string | uk-nestable | List base class |
listClass |
string | uk-nestable-list | List class |
listitemClass |
string | uk-nestable-list-item | List item class |
itemClass |
string | uk-nestable-item | Item class |
dragClass |
string | uk-nestable-list-dragged | Class added to dragged list |
movingClass |
string | uk-nestable-moving | Class added to <html> when moving |
handleClass |
string | uk-nestable-handle | Class for drag handle |
collapsedClass |
string | uk-nestable-collapsed | Class for collapsed items |
placeClass |
string | uk-nestable-placeholder | Class for placeholder of currently dragged element |
noDragClass |
string | uk-nestable-nodrag | Elements with this class will not trigger dragging. Useful when having the complete item draggable and not just the handle. |
noChildrenClass |
string | uk-nestable-nochildren | Elements with this class will not allow children. Useful for bottom-level items. |
emptyClass |
string | uk-nestable-empty | Class for empty lists |
Init element manually
var nestable = UIkit.nestable(element, { /* options */ });
Events
Name | Parameter | Description |
---|---|---|
start.uk.nestable |
event, nestable object | On nestable drag start |
move.uk.nestable |
event, nestable object | On nestable move item |
stop.uk.nestable |
event, nestable object | On nestable stop dragging |
change.uk.nestable |
event, sortable object, dragged element, action | On nestable change item |