Navbar is a fixed (with Fixed and Through layout types) area at the top of a screen that contains Page title and navigation elements.
Navbar has 3 main parts: Left, Center and Right. Each part may contain any HTML content, but it is recommended to use them in the following way:
Left part is designed to be used with "back link", icons or with single text link.
Center part is used to display page title or tab links (buttons row/segmented controller).
Right part is for the same as the Left part.
Navbar layout is pretty simple and self explaining:
<div class="navbar">
<div class="navbar-inner">
<div class="left">Left</div>
<div class="center">Center</div>
<div class="right">Right</div>
</div>
</div>
Note that Navbar's Center element has lowest width priority, and when window screen will not fit all three elements during window resize, then Center part will be cuted.
So if you use plain text in Center part it will have ellipsis (...) on the end when cuted. But you need to take care about it if you have some custom elements there.
To add links in Left or Right part you just need to add the plain <a>
tag with additional link
class:
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a href="#" class="link">Left Link</a>
</div>
<div class="center">Center</div>
<div class="right">
<a href="#" class="link">Right Link</a>
</div>
</div>
</div>
Additional link
class is not required but recommended, because it adds required link sizes and "active" opacity effect
Nothing extraordinary. Just add more <a class="link"
to the required part:
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a href="#" class="link">Left 1</a>
<a href="#" class="link">Left 2</a>
</div>
<div class="center">Center</div>
<div class="right">
<a href="#" class="link">Right 1</a>
</div>
</div>
</div>
Here comes a little difference. In this case we need to wrap link's text with <span>
element. It is required for correct spacing between icon and "word", and for animation:
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a href="#" class="link">
<i class="icon icon-back"></i>
<span>Back</span>
</a>
</div>
<div class="center">Center</div>
<div class="right">
<a href="#" class="link">
<i class="icon icon-bars"></i>
<span>Menu</span>
</a>
</div>
</div>
</div>
If need links with icons and without text we need to additional "icon-only" class to links. With this class link will have fixed 44x44 px size so we can't miss it with finger:
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a href="#" class="link icon-only">
<i class="icon icon-back"></i>
</a>
</div>
<div class="center">Center</div>
<div class="right">
<a href="#" class="link icon-only">
<i class="icon icon-bars"></i>
</a>
</div>
</div>
</div>
If we have initialized View we can use following methods available for Navbar:
myApp.hideNavbar(navbar, isAnimated) | Hide specified toolbar.navbar - HTMLElement or string (with CSS Selector) of required navbar. Required.isAnimated - Boolean - Default: true |
myApp.showNavbar(navbar, isAnimated) | Show specified toolbar.navbar - HTMLElement or string (with CSS Selector) of required navbar. Required.isAnimated - Boolean - Default: true |
view.hideNavbar(isAnimated) | Hide navbar in this ViewisAnimated - Boolean - Default: true |
view.showNavbar(isAnimated) | Show navbar in this ViewisAnimated - Boolean - Default: true |
myApp.sizeNavbars(viewContainer) |
Call this method to recalculate positional styles for Navbar in selected View. For example: myApp.sizeNavbars('.view-main') It could be useful after you change some of Navbar elements dynamically. Used only by iOS theme |
And the following example:
var myApp = new Framework7();
var $ = Framework7.$;
var mainView = myApp.addView('.view-main');
$('.hide-navbar').on('click', function () {
mainView.hideNavbar();
});
$('.show-navbar').on('click', function () {
mainView.showNavbar();
});
Framework7 allows you to hide/show navbar automatically for some Ajax loaded pages where you may not need Navbar. It is useful only when you use through-type layout.
To make it work all you need is to add <div class="page no-navbar">
) and put there empty Navbar:
<!-- Empty Navbar -->
<div class="navbar">
<div class="navbar-inner">
</div>
</div>
<!-- Page has additional "no-navbar" class -->
<div data-page="about" class="page no-navbar">
<div class="page-content">
<div class="content-block">
<p><a href="#" class="back button">Go Back</a></p>
...
</div>
</div>
</div>
If you use Dynamic Navbar in your app then it will also have useful special events.