#### Horizontal Nav - Link Elements

Statistics Invoices Schedule

##### Nav link elements

Horizontal navigation items support: text, icon, icon and text, images, SVG objects, inline and floating badges, badge marks, small charts etc. When using images and charts, make sure your element height does not exceed your base line height, otherwise navigation link with higher element will push other links down and increase navbar height. By default, Limitless uses 13px font size and 20px line height, so your elements must have 20px height. Also since default vertical alignment of images is `middle`, you need to include `.align-top` class as well. Sound a bit complex, but hey, this is a custom link element afterall so needs a few adjustments.

Light navbar links:

Dark navbar links:

##### Navigation classes

This table contains all classes related to the horizontal navbar navigation. Navbar navigation links build on default `.nav` options with their own modifier class and require the use of toggler classes for proper responsive styling. Navigation in navbars will also grow to occupy as much horizontal space as possible to keep your navbar contents securely aligned. Dropdown menus require a wrapping element for positioning, so be sure to use separate and nested elements for `.nav-item` and `.nav-link`.

Class | Description
--- | ---
Navigation elements
`.nav` | Global wrapper for navigation list. It uses default Bootstrap's styles of `.nav` component and similar markup options.
`.navbar-nav` | for a full-height and lightweight navigation (including support for dropdowns).
`.nav-item` | This class is required in an immediate nav link parent element in any `.nav` container: sidebar, navbar, nav groups, tabs, pills etc.
`.nav-item.dropdown` | Combination of these classes is required for items with dropdown menu - nav item with `.dropdown` class is a dropdown toggle and menu wrapper that declares `position: relative;`.
`.nav-item.dropup` | Same as `.dropdown`, but this class is required in bottom navbars, because it triggers dropdown menus above elements in navbar. Dropdown caret direction in bottom navbar also depends on this class.
`.navbar-nav-link` | A custom class, unlike Bootstrap's default `.nav-link` class it doesn't affect navs in dropdowns. This class is responsible for navigation link styling and is also required as a part of nav list element structure. It's also a target for `.active` and `.disabled` classes.
Dropdowns
`.dropdown-user` | This class is used in menu with user pic - image size is calculated dynamically in SASS and `.dropdown-user` is needed to target the container where these calculations need to run.
`.dropdown-content` | If you need to prevent dropdown from closing when you interact with it, add `.dropdown-content` to default `.dropdown-menu` container. This doesn't disable click event outside the dropdown though.
`.dropdown-content-header` | Class for the header within `.dropdown-content` - custom element with padding that mathches custom dropdown body and footer padding. Can contain multiple components on both sides.
`.dropdown-content-body` | Class for the body within `.dropdown-content` - element with custom padding, by default is similar to `.card-body`, but can be changed in SASS variables if you want to increase or decrease custom dropdown spacing.
`.dropdown-content-footer` | Class for the footer within `.dropdown-content` - custom element with padding that mathches custom dropdown body and header padding. Can contain multiple components on both sides.
`.dropdown-scrollable` | This class sets `max-height` to the dropdown body and adds vertical scrollbar. Can be added to `.dropdown-content-body` container to make only body scrollable or to the entire `.dropdown-menu`. Default max-height value is `340px`.
`.mega-menu-[alignment]` | These classes control the percent-based width of the menu. Options for [alignment]: full - sets 100% width, left - aligns menu to the left, right - aligns menu to the right. Note - make sure you don't use `.dropdown` and `.dropup` classes in `.nav-item` container.
`.w-[breakpoint]-[value]` | Set of responsive utility classes that set `min-width` property to the `.dropdown-menu` container. Very useful in dropdowns with long content. Available options for [value] (in pixels): 200, 250, 300, 350, 400, 450, 500, 550, 600.
Misc
`.caret-0` | Add this class to any `.navbar-nav-link.dropdown-toggle` if you want to hide caret (directional arrow). Useful in nav links with single icon, without text and badge.
`[data-hover="dropdown"]` | Data attribute that triggers dropdown toggling on `hover` and `click`. It also affects all submenus within this menu, so needs to be added to `[data-toggle="dropdown"]` only on top level.

##### Navigation markup

###### Navigation alignment

Navigation in the navbar can be aligned to the left, right or center. By default it's aligned to the left (right in RTL direction). Since parent container is flexible, you need to use flex utility classes to change default alignment: add `.justify-content-[breakpoint]-[property]` to `.navbar-collapse` container and/or responsive `spacing` utilities to push content to the right and horizontal spacing between navigation containers. On mobiles all navigation items are stackable by default. Make sure you use same breakpoint in all navbar elements. Examples below demonstrate left (default) and right nav container alignments.

Left navigation alignment:

    <!-- Navbar collapse container -->
    <div class="collapse navbar-collapse" id="navbar-mobile">

    	<!-- Left aligned navigation -->
    	<ul class="navbar-nav">
    		<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    		<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    		<li class="nav-item dropdown">
    			<a href="#" class="navbar-nav-link dropdown-toggle" data-toggle="dropdown">
    				Dropdown
    			</a>

    			<div class="dropdown-menu">
    				<a href="#" class="dropdown-item">Action</a>
    				<a href="#" class="dropdown-item">Another action</a>
    				<a href="#" class="dropdown-item">One more action</a>
    			</div>
    		</li>
    	</ul>
    	<!-- /left aligned navigation -->

    	[...]

    </div>
    <!-- /navbar collapse container -->

Right navigation alignment:

    <!-- Navbar collapse container -->
    <div class="collapse navbar-collapse" id="navbar-mobile">

    	[...]

    	<!-- Right aligned navigation -->
    	<ul class="navbar-nav ml-auto">
    		<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    		<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    		<li class="nav-item dropdown">
    			<a href="#" class="navbar-nav-link dropdown-toggle" data-toggle="dropdown">
    				Dropdown
    			</a>

    			<div class="dropdown-menu">
    				<a href="#" class="dropdown-item">Action</a>
    				<a href="#" class="dropdown-item">Another action</a>
    				<a href="#" class="dropdown-item">One more action</a>
    			</div>
    		</li>
    	</ul>
    	<!-- /right aligned navigation -->

    </div>
    <!-- /navbar collapse container -->

###### Navigation dropdown trigger

By default, all dropdown menus are toggled by clicking, this is an intentional design decision. Another reason - browsers on mobile devices don't fully support hover/focus states, so if dropdown menu appearance is controlled by toggling `display: none;` on hover/focus, they won't be triggered on touch devices. However, there's a solution - toggle `.show` class on hover AND click. Limitless includes custom `dropdown_hover.js` extension that allows you to enable this behaviour on all dropdown levels and disable hover/focus triggering on mobiles. To use, just add `data-hover="dropdown"` to the dropdown link. Note - this enables hover trigger on all dropdown levels.

Trigger on click:

    <!-- Trigger on click -->
    <ul class="navbar-nav">
    	<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    	<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    	<li class="nav-item dropdown">
    		<a href="#" class="navbar-nav-link dropdown-toggle"
    			data-toggle="dropdown">
    			Dropdown
    		</a>

    		<div class="dropdown-menu">
    			<a href="#" class="dropdown-item">Action</a>
    			<a href="#" class="dropdown-item">Another action</a>
    			<div class="dropdown-divider"></div>
    			<a href="#" class="dropdown-item">One more action</a>
    		</div>
    	</li>
    </ul>
    <!-- /trigger on click -->

Trigger on hover:

    <!-- Trigger on hover -->
    <ul class="navbar-nav">
    	<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    	<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    	<li class="nav-item dropdown">
    		<a href="#" class="navbar-nav-link dropdown-toggle"
    			data-toggle="dropdown"
    			data-hover="dropdown">
    			Dropdown
    		</a>

    		<div class="dropdown-menu">
    			<a href="#" class="dropdown-item">Action</a>
    			<a href="#" class="dropdown-item">Another action</a>
    			<a href="#" class="dropdown-item">One more action</a>
    		</div>
    	</li>
    </ul>
    <!-- /trigger on hover -->

###### Navigation item states

Navbar navigation items support 2 states: `active` and `disabled`. In `active` state nav links appear pressed, with a darker background and stronger text. Please note: `.active` class doesn't open dropdown menu, it just highlights links. If navigation link has class `.disabled`, JS blocks user interaction (basically disabled click event) and CSS mutes the link down. If this class is added to the `.dropdown-toggle` navigation element, dropdown menu won't be toggled. Examples below demonstrate active/disabled states markup.

Active item/dropdown state:

    <!-- Active state -->
    <ul class="navbar-nav">
    	<li><a href="#" class="navbar-nav-link active">Active link</a></li>
    	<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    	<li class="nav-item dropdown">
    		<a href="#" class="navbar-nav-link dropdown-toggle active" data-toggle="dropdown">
    			Active dropdown
    		</a>

    		<div class="dropdown-menu">
    			<a href="#" class="dropdown-item active">Active action</a>
    			<a href="#" class="dropdown-item">Another action</a>
    			<div class="dropdown-divider"></div>
    			<a href="#" class="dropdown-item">One more action</a>
    		</div>
    	</li>
    </ul>
    <!-- /active state -->

Disabled item/dropdown state:

    <!-- Disabled state -->
    <ul class="navbar-nav">
    	<li><a href="#" class="navbar-nav-link disabled">Disabled link</a></li>
    	<li class="nav-item"><a href="#" class="navbar-nav-link">Link</a></li>
    	<li class="nav-item dropdown">
    		<a href="#" class="navbar-nav-link dropdown-toggle disabled" data-toggle="dropdown">
    			Disabled dropdown
    		</a>

    		<div class="dropdown-menu">
    			<a href="#" class="dropdown-item disabled">Disabled action</a>
    			<a href="#" class="dropdown-item">Another action</a>
    			<div class="dropdown-divider"></div>
    			<a href="#" class="dropdown-item">One more action</a>
    		</div>
    	</li>
    </ul>
    <!-- /disabled state -->