React Navigation Navigation for React

Navigation for React

UI for navigation featuring Hamburger menu, Bottom and Tab navigation components.

Integrates well with the React Router library. Together they make a powerfull, easy to use tool in creating the navigation experience a react app needs.

Use it on responsive websites and mobile apps.

Shipping with useful features for a refined UX, including:

  • Usage on mobile and desktop with responsive features
  • Icons and labels for expressive nav targets
  • Ergonomic bottom navigation
  • Scrollable tab-list
  • Compact hamburger menu for saving space
  • Multiple theme support
  • Top, bottom and inline display support
  • RTL Support
  • Full localization


Navigation demos available for other frameworks.

Viewing demos & code for

light
dark

Change the theme setting here

Navigation - Bottom navigation

Change demo
Bottom navigation

Use the bottom navigation for the top level navigation solution in your app. When you navigate between pages of the same level of hierarchy, it gives a consistent look on each page. While it can also be rendered on the top of the viewport, on mobile handheld devices the bottom navigation bar is the easiest to reach. It's ergonomic.

Navigation items can be used with both icons and labels. Additionally every item can show a badge, containing dynamic information. For example the number of unread notifications.

The bottom navigation component automatically hides navigation items behind a "More" button, when the viewport is not wide enough. This behavior can be further customized with the itemWidth and layout settings.

For organizing content into categories  Check out the Tabs navigation →

import { Route, withRouter, BrowserRouter as Router, Switch } from 'react-router-dom';
import mobiscroll from '@mobiscroll/react';
import '@mobiscroll/react/dist/css/mobiscroll.min.css';

mobiscroll.setupReactRouter(Route, withRouter);

class App extends React.Component {
    render() {
        return (
            <Router>
                <mobiscroll.Form>
                    <mobiscroll.FormGroup>
                        <mobiscroll.FormGroupTitle>Icon only</mobiscroll.FormGroupTitle>
                        <mobiscroll.BottomNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            type="bottom"
                            display="inline"
                        >
                            <mobiscroll.NavItem to="/news" icon="newspaper"></mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/people" icon="material-people"></mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/messages" icon="bubble"></mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/notifications" icon="fa-globe"></mobiscroll.NavItem>
                        </mobiscroll.BottomNav>
                    </mobiscroll.FormGroup>
                    <mobiscroll.FormGroup>
                        <mobiscroll.FormGroupTitle>Icon and label</mobiscroll.FormGroupTitle>
                        <mobiscroll.BottomNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            type="bottom"
                            display="inline"
                        >
                            <mobiscroll.NavItem to="/news" icon="newspaper">News</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/people" icon="material-people">People</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/messages" icon="bubble">Messages</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/notifications" icon="fa-globe">Notifications</mobiscroll.NavItem>
                        </mobiscroll.BottomNav>
                    </mobiscroll.FormGroup>
                    <mobiscroll.FormGroup>
                        <mobiscroll.FormGroupTitle>Icon and label with badge</mobiscroll.FormGroupTitle>
                        <mobiscroll.BottomNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            type="bottom"
                            display="inline"
                        >
                            <mobiscroll.NavItem to="/news" icon="newspaper">News</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/people" icon="material-people" badge="1">People</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/messages" icon="bubble" badge="9">Messages</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/notifications" icon="fa-globe">Notifications</mobiscroll.NavItem>
                        </mobiscroll.BottomNav>
                    </mobiscroll.FormGroup>
                    <mobiscroll.FormGroup>
                        <mobiscroll.FormGroupTitle>Show more</mobiscroll.FormGroupTitle>
                        <mobiscroll.BottomNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            type="bottom"
                            display="inline"
                        >
                            <mobiscroll.NavItem to="/news" icon="newspaper">News</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/people" icon="material-people" badge="1">People</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/messages" icon="bubble" badge="9">Messages</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/notifications" icon="fa-globe">Notifications</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/yourstory" icon="camera">Your story</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/events" icon="calendar">Events</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/preferences" icon="line-settings">Preferences</mobiscroll.NavItem>
                        </mobiscroll.BottomNav>
                    </mobiscroll.FormGroup>
                    <mobiscroll.FormGroup>
                        <Switch>
                            <Route path="/news" component={News} />
                            <Route path="/people" component={People} />
                            <Route path="/messages" component={Messages} />
                            <Route path="/notifications" component={Notifications} />
                            <Route path="/yourstory" component={Story} />
                            <Route path="/events" component={MyEvents} />
                            <Route path="/preferences" component={Preferences} />
                        </Switch>
                    </mobiscroll.FormGroup>
                </mobiscroll.Form>
            </Router>
        );
    }    
}

const News = () => <mobiscroll.FormGroupTitle>News component content</mobiscroll.FormGroupTitle>;
const People = () => <mobiscroll.FormGroupTitle>People component content</mobiscroll.FormGroupTitle>;
const Messages = () => <mobiscroll.FormGroupTitle>Messages component content</mobiscroll.FormGroupTitle>;
const Notifications = () => <mobiscroll.FormGroupTitle>Notifications component content</mobiscroll.FormGroupTitle>;
const Story = () => <mobiscroll.FormGroupTitle>Story component content</mobiscroll.FormGroupTitle>;
const MyEvents = () => <mobiscroll.FormGroupTitle>MyEvents component content</mobiscroll.FormGroupTitle>;
const Preferences = () => <mobiscroll.FormGroupTitle>Preferences component content</mobiscroll.FormGroupTitle>;

<div id="content"></div>

Navigation - Tabs

Change demo
Tabs

Use the tab navigation for organizing content into categories.

The tab navigation component supports swipe gestures for the tab-list, which makes the component a scalable solution for as many tabs as needed.

Tabs can combine icons and labels to be more expressive like in this demo.

Navigating between tabs can also be customized. Check out the demo for handling navigation with external buttons.

Short on screen space and need a menu button?  Check out the Hamburger navigation →
import mobiscroll from '@mobiscroll/react';
import '@mobiscroll/react/dist/css/mobiscroll.min.css';

class App extends React.Component {
    selectTab = (tabName) => {
        this.setState({
            selectedTab: tabName
        });
    }
    
    render() {
        var lvData = this.state[this.state.selectedTab] || [];
        return (
            <div>
                <mobiscroll.TabNav
                    theme="" 
                    themeVariant=""
                    lang=""
                >
                    <mobiscroll.NavItem selected={this.state.selectedTab == 'downloaded'} onClick={this.selectTab.bind(null, 'downloaded')}>Downloaded</mobiscroll.NavItem>
                    <mobiscroll.NavItem selected={this.state.selectedTab == 'all'} onClick={this.selectTab.bind(null, 'all')}>All</mobiscroll.NavItem>
                    <mobiscroll.NavItem selected={this.state.selectedTab == 'external'} onClick={this.selectTab.bind(null, 'external')}>External storage</mobiscroll.NavItem>
                    <mobiscroll.NavItem selected={this.state.selectedTab == 'running'} onClick={this.selectTab.bind(null, 'running')}>Running</mobiscroll.NavItem>
                    <mobiscroll.NavItem selected={this.state.selectedTab == 'disabled'} onClick={this.selectTab.bind(null, 'disabled')}>Disabled</mobiscroll.NavItem>
                </mobiscroll.TabNav>
                <mobiscroll.Listview theme=""  themeVariant="" lang="" className="md-apps-list" itemType={ListItem} data={lvData} swipe={false} enhance={true} />;
            </div>
        );
    }
    
    constructor(props) {
        super(props);

        this.state = {
            selectedTab: 'downloaded',
            downloaded: [{
                id: 1,
                icon: "calendar",
                name: "Calendar",
                size: "26.71MB",
                date: "19/11/2014"
            }, {
                id: 2,
                icon: "camera",
                name: "Camera",
                size: "43.11MB",
                date: "10/11/2014"
            }// Showing partial data. Download full source.
            ],
            external: [{
                id: 11,
                icon: "calendar",
                name: "Calendar",
                size: "26.71MB",
                date: "09/09/2014"
            }, {
                id: 12,
                icon: "earth",
                name: "Maps",
                size: "46.21MB",
                date: "19/18/2014"
            }// Showing partial data. Download full source.
            ]
        };
    }
}

class ListItem extends React.Component {
    render() {
         return <li data-icon={this.props.item.icon}>
            {this.props.item.name}
            <span className="md-app-detail">
                <span className="md-app-size">{this.props.item.size}</span>
                <span className="md-app-date">{this.props.item.date}</span>
            </span>
        </li>;
    }
}

<div id="content"></div>
.md-apps-tab {
    display: none;
}

.md-apps-tab-sel {
    display: block;
}

.md-app-detail {
    display: block;
    overflow: hidden;
}

.md-app-size {
    font-size: 10px;
    display: block;
    opacity: .6;
    float: left;
}

.md-app-date {
    font-size: 10px;
    display: block;
    opacity: .6;
    float: right;
}

.md-apps-list .mbsc-lv-item {
    padding-left: 50px;
}

Navigation - Hamburger menu

Change demo
Hamburger menu

The hamburger menu is a compact and well known solution for grouping destinations that need to be accessible from multiple pages.

One of the advantages it has over the Tabs or the Bottom navigation is that it hides the nav-items and saves space.

The menu button can be customized to suit your needs with the menuIcon and menuText settings.

Designing for multiple screen sizes?  Check out the Responsive demo →

import { Route, withRouter, BrowserRouter as Router, Switch, Redirect } from 'react-router-dom';
import mobiscroll from '@mobiscroll/react';
import '@mobiscroll/react/dist/css/mobiscroll.min.css';

mobiscroll.setupReactRouter(Route, withRouter);

class App extends React.Component {
    render() {
        return (
            <Router>
                <mobiscroll.FormGroup>
                    <mobiscroll.FormGroupTitle>Hamburger menu types</mobiscroll.FormGroupTitle>
                    <div className="md-hamb mbsc-padding">
                        <mobiscroll.HamburgerNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            type = "hamburger"
                        >
                            <mobiscroll.NavItem to="/news" icon="newspaper">News</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/people" icon="material-people">People</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/messages" icon="bubble">Messages</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/notifications" icon="fa-globe">Notifications</mobiscroll.NavItem>
                        </mobiscroll.HamburgerNav>
                    </div>
                    <div className="md-hamb mbsc-padding">
                        <mobiscroll.HamburgerNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            type = "hamburger"
                            menuText = "Menu"
                        >
                            <mobiscroll.NavItem to="/news" icon="newspaper">News</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/people" icon="material-people">People</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/messages" icon="bubble">Messages</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/notifications" icon="fa-globe">Notifications</mobiscroll.NavItem>
                        </mobiscroll.HamburgerNav>
                    </div>
                    <div className="md-hamb mbsc-padding">
                        <mobiscroll.HamburgerNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            type = "hamburger"
                            menuIcon = ""
                            menuText = "Menu"
                        >
                            <mobiscroll.NavItem to="/news">News</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/people">People</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/messages">Messages</mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/notifications">Notifications</mobiscroll.NavItem>
                        </mobiscroll.HamburgerNav>
                    </div>
                    <div className="md-hamb mbsc-padding">
                        <mobiscroll.HamburgerNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            type = "hamburger"
                            menuIcon = "line-settings"
                        >
                            <mobiscroll.NavItem to="/news" icon="newspaper"></mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/people" icon="material-people"></mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/messages" icon="bubble"></mobiscroll.NavItem>
                            <mobiscroll.NavItem to="/notifications" icon="fa-globe"></mobiscroll.NavItem>
                        </mobiscroll.HamburgerNav>
                    </div>
                </mobiscroll.FormGroup>
                <mobiscroll.FormGroup>
                    <mobiscroll.FormGroupTitle>Navigation result</mobiscroll.FormGroupTitle>
                    <div className="mbsc-padding">
                        <Switch>
                            <Route path="/news" component={News} />
                            <Route path="/people" component={People} />
                            <Route path="/messages" component={Messages} />
                            <Route path="/notifications" component={Notifications} />
                            <Redirect path="/" exact to="/news" />
                        </Switch>
                    </div>
                </mobiscroll.FormGroup>
            </Router>
        );
    }    
}


const News = () => <p>News component content</p>;
const People = () => <p>People content</p>;
const Messages = () => <p>Messages content</p>;
const Notifications = () => <p>Notifications content</p>;

<div id="content"></div>
.md-hamb {
    display: inline-block;
}

Navigation - Prev/Next

Change demo
Prev/Next

The Tab navigation component is customizable in a variety of ways. This demo shows how to add custom Prev/Next buttons beside the Tab component and how to make page change obvious.

If you are looking for the simplest solution in grouping content, have a look on the previous tabs demo.

For more customization  Check out the Event handlers demo →
import mobiscroll from '@mobiscroll/react';
import '@mobiscroll/react/dist/css/mobiscroll.min.css';

class App extends React.Component {
    prev = () => {
        if (this.state.selectedTabIndex > 0) {
            this.setState({ selectedTabIndex: this.state.selectedTabIndex - 1});
        }
    }
    
    next = () => {
        if (this.state.selectedTabIndex < this.state.tabs.length - 1) {
            this.setState({ selectedTabIndex: this.state.selectedTabIndex + 1});
        }
    }
    
    selectTab = (index) => {
        this.setState({ selectedTabIndex: index });
    }
    
    render() {
        var selectedTab = this.state.tabs[this.state.selectedTabIndex];
        var data = this.state[selectedTab];

        return (
            <div>
                <mobiscroll.TabNav
                    lang=""
                    theme="" 
                    themeVariant=""
                    ref="tabNav">
                    {this.state.tabs.map((tab, index) => {
                        return <mobiscroll.NavItem 
                            key={tab} 
                            selected={index == this.state.selectedTabIndex}
                            onClick={this.selectTab.bind(null, index)}
                            >
                            {tab}
                        </mobiscroll.NavItem> 
                    })}
                </mobiscroll.TabNav>

                <mobiscroll.Listview
                    lang="" 
                    theme=""  
                    themeVariant=""
                    enhance={true}
                    striped={true}
                    swipe={false}
                    itemType={ListItem} 
                    data={data}
                />
                
                <div onClick={this.prev} className="md-prev-btn mbsc-ic mbsc-ic-arrow-left5"></div>
                <div onClick={this.next} className="md-next-btn mbsc-ic mbsc-ic-arrow-right5"></div>
            </div>
        );
    }
    
    constructor(props) {
        super(props);

        this.state = {
            tabs: ['Food', 'Technology', 'Lifestyle', 'Sport', 'Travel', 'Music'],
            selectedTabIndex: 0,
            Technology: [{
                id: 1,
                h3: "Electric Smartscooter",
                p: "Gogoro Smartscooter is world’s first connected two-wheeled electric vehicle. The Smartscooter uses the precision, processes and materials utilizes for supercars to offer top performance, physically and technically sublime."
            }, {
                id: 2,
                h3: "The Solar Bike",
                p: "Leaos Solar E-Bike is a self-sufficient electric bike that incorporates solar panels in its carbon framework producing enough energy to use it 30 km a day. The solar Leaos is a high-tech jewelry with high aesthetic standards."
            }, {
                id: 3,
                h3: "Smallest Quadricopter",
                p: "The Dutch gadget-manufacturer TRNDlabs reveals the smallest quadricopter of the world, the Nano Skeye Drone. The high thrust and low weight of the object allows users to quickly perform amazing maneuvers with a simple touch of joysticks. Bright LEDs have also been incorporated into the Drone in order to drive in low-light conditions."
            }],
            Food: [{
                id: 11,
                h3: "Monochrome Pizzas",
                p: "French creative studio Black Pizza commissioned the photographer Erwan Fichou and the bio independant chef Julie Basset to make the series “Pizza is the New Black” : a collection of monochrome pizzas, cooked with insolite objets and perfumes such as crab, lichee, candies, lipsticks, green peas and green plants."
            },//<hide-comment> 
            {
                id: 12,
                h3: "Chocolate Texture Lounge Installation",
                p: "For Maison&Objet 2015, Japanese studio Nendo took the little sculpted chocolates for Christmas ChocolaTexture to integrate them in the middle of a tasty installation staging a lounge area with brown furnitures. A chocolate wave made of 2000 pipes and a graduation was made for the event."
            }, {
                id: 13,
                h3: "Restaurant with Trees Inside in Hanoi",
                p: "H&P architects, based in Vietnam, has built the Cheering Restaurant, in the heart of the city Hanoi. The originality is in the fact that an old and big tree is set in the middle of the dining room, entirely imagined in wood and interspersed by canopies. Find out more in the gallery."
            }, {
                id: 14,
                h3: "Vegetables Paper Art",
                p: "For the opening of a blog named “Veg of the Day”, illustrator and designer Polly Lindsay has already started to cook a first batch of paper vegetables : an avocado, a red onion and a red pepper. She gives a precise work where we can easily admire the different reliefs and layers of her artworks."
            }],
            Lifestyle: [{
                id: 21,
                h3: "Fox Village in Japan",
                p: "Located in the prefecture of Miyagi, Japan, Zao Fox Village is a parc inhabited by six species of wild foxes that it’s possible to photograph and feed with food provided by the park. Some visitors have captured unique instants of this amazing experience and disclose us touching images."
            }, {
                id: 22,
                h3: "Container House",
                p: "Patrick Bradley developed Grillagh Water House for a picturesque site on his own farm near the town of Maghera, taking advantage of local legislation that allows farmers to build dwellings on their land. The containers were purchased in the town of Bangor and trucked to the site, before being assembled around a steel framework."
            }, {
                id: 23,
                h3: "The Urban Yoga",
                p: "Artist, architect, dancer and yoga teacher, Anja Humljan thought the Urban Yoga project from an ambition : inviting people to experiment with their bodies what they feel, touch, smell, hear and taste in the city. She started series of photos in Paris, Madrid, New York and Ljubljana to change the way she feels and moves in the city. According to her, the city must not be felt as a disturbing space but more like a vital source of energy."
            }],
            Sport: [{
                id: 31,
                h3: "Red Bull RB11 Formula 1 Car",
                p: "The Red Bull RB11 is a Formula 1 racing car being designed by Adrian Newey for Infiniti Red Bull Racing to compete in the 2015 Formula 1 season."
            }, {
                id: 32,
                h3: "On Top of the World",
                p: "The two young filmmakers Serhan Meewisse and Jurian Gravett invited 11 people to join the adventure of a film entitled “On Top of the World”. They crossed Europe, Turkey and Greece, without a real budget, but with will to all go away. The protagonists of video doesn’t speak and just leave us dreamy."
            }, {
                id: 33,
                h3: "Wooden Skateboard",
                p: "The two designers of the studio Sven Gabriel had the idea to create a skateboard made with a simple piece of wood, by adding the wheels and screws. The “Förster Skateboard” is thiner and more sharp than a traditional board. The outlines are made of tree’s bark. This beautiful board is to discover in images plus a video in the gallery."
            }],
            Travel: [{
                id: 41,
                h3: "Portraits of African Female Warriors",
                p: "The French street artist YZ tribute to African women warriors in her series entitled “Amazon”. These portraits refer to female soldiers of the First Franco-Dahomean War who actively fought face to the French army. Amazon is an ongoing project for which YZ still conducts researches in Senegal."
            }, {
                id: 42,
                h3: "Deserted Mall Covered In Snow",
                p: "Here is a series of photographs made by Seph Lawless. Seph is the pseudonym of an American photographer known for his photos on urban decay and abandoned areas across the United States. A selection of photographs from his book “Black Friday” is to discover later in the article, “The Last of Us” in real life."
            }, {
                id: 43,
                h3: "",
                p: "Loi Krathong is a festival that is held each year in Thailand. Here the pictures are particularly beautiful, showing the intensity of the many fire lanterns shining high in the dark sky. A magic blazing show to discover in the following."
            }, {
                id: 44,
                h3: "People in The Alps Photography",
                p: "Jakub Polomski is a Polish photographer specialized in travel photography. With its “Scale of Nature” series, the artist pays homage to mother nature. Pictures taken in the French & Swiss Alps are breathtaking and reminds us how the human being is very small and meaningless compared to nature."
            }],
            Music: [{
                id: 51,
                h3: "Kwabs – Perfect Ruin",
                p: "Singer and songwriter based in London, Kwabs reveals the visual of his song “Perfect Ruin”. Directed by George Bellfield, the video follows the artist wandering with chills through a winter landscape. His Love + War album will be available on May 18th via Atlantic Records."
            }, {
                id: 52,
                h3: "Jungle – Julia",
                p: "After “Time”, Busy Earnin’, “The Heat” and “Platoon”, English videomaker Oliver Hadlee Pearch has once again directed the latest music video of Jungle for their title “Julia”. Always on the dance theme, we see a man with make-up on his face dancing and jumping with a group of men in some kind of an arena. A production CLM Film, to discover."
            }, {
                id: 53,
                h3: "Batman Evolution",
                p: "The Piano Guys is a group of four American artists living in Utah, which became known on YouTube with covers of famous song. Here is a tribute to the soundtracks of the films Batman with the video “Batman Evolution” and all the different cars of the dark knight."
            }//</hide-domment>
            ]
        };
    }
}

class ListItem extends React.Component {
    render() {
         return <li>
            <h3>{this.props.item.h3}</h3>
            <p>{this.props.item.p}</p>
        </li>;
    }
}

<div id="content"></div>
.md-prevnext-tab {
    display: none;
}

.md-prevnext-tab-sel {
    display: block;
}

.md-prev-btn,
.md-next-btn {
    position: absolute;
    top: 50%;
    margin-top: -35px;
    width: 35px;
    height: 70px;
    background: rgba(0, 0, 0, .5);
    line-height: 70px;
    font-size: 25px;
    text-align: center;
    color: #fff;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

.md-prev-btn {
    left: 0;
}

.md-next-btn {
    right: 0;
}

Navigation - Tabs with icons

Change demo
Tabs with icons

Add icons and labels to nav-items to be more informative. Build and save custom icon sets from over 2500 icons to choose from.

Use the scrollable tab-list for self-adjusting desktop & mobile content management.

Short on screen space and need a menu button?  Check out the Hamburger menu →

import { Route, withRouter, BrowserRouter as Router, Switch, Redirect } from 'react-router-dom';
import mobiscroll from '@mobiscroll/react';
import '@mobiscroll/react/dist/css/mobiscroll.min.css';

mobiscroll.setupReactRouter(Route, withRouter);

class App extends React.Component {
    render() {
        return (
            <Router>
                <div className="md-navigation">
                    <mobiscroll.TabNav
                        lang=""
                        theme="" 
                        themeVariant=""
                    >
                        <mobiscroll.NavItem to="/iphone6" icon="empty micons icon-iphone_6">iPhone 6</mobiscroll.NavItem>
                        <mobiscroll.NavItem to="/accessories" icon="empty micons icon-iphone_accessories">Accessories</mobiscroll.NavItem>
                        <mobiscroll.NavItem to="/compare" icon="empty micons icon-compare_iphone_models">Compare</mobiscroll.NavItem>
                        <mobiscroll.NavItem to="/ios8" icon="empty micons icon-ios_8">iOS 8</mobiscroll.NavItem>
                        <mobiscroll.NavItem to="/icloud" icon="empty micons icon-icloud">iCloud</mobiscroll.NavItem>
                    </mobiscroll.TabNav>
                    <Switch>
                        <Route path="/iphone6" component={Iphone} />
                        <Route path="/accessories" component={Acc} />
                        <Route path="/compare" component={Comp} />
                        <Route path="/ios8" component={Ios} />
                        <Route path="/icloud" component={Icloud} />
                        <Redirect path="/" exact to="/iphone6" />
                    </Switch>
                </div>
            </Router>
        );
    }
}

const Iphone = () => {
        return <div id="md-tab-iphone" className="md-tab md-tab-sel">
        <h1 className="md-title">iPhone 6</h1>
        <h2 className="md-title">Bigger than bigger</h2>
        <div className="md-img-cont"><img src="https://img.mobiscroll.com/demos/iphone.jpg" /></div>
    </div>;
};
const Acc = () => {
    return <div id="md-tab-acc" className="md-tab md-tab-sel">
        <div>Accessories</div>
        <h1 className="md-title">The perfect fit.<br></br> And finish</h1>
        <p>Make a statement. Cover every curve. Get fully charged. See all the essential Apple-designed accessories and more for iPhone&nbsp;6 and iPhone&nbsp;6&nbsp;Plus.</p>
        <div className="md-img-cont"><img src="https://img.mobiscroll.com/demos/iphoneaccs.png" /></div>
    </div>;
};
const Comp = () => {
    return <div id="md-tab-comp" className="md-tab md-tab-sel">
        <h1 className="md-title md-comp-title">Compare iPhone</h1>
        <div className="md-title md-comp-subtitle">Compare iPhone 6 Plus with iPhone 6</div>
        <div className="md-comp-table">
            <div className="md-comp-cell">iPhone 6 Plus</div>
            <div className="md-comp-cell">iPhone 6 </div>
        </div>
        <div className="md-comp-c">
            <div className="md-comp-table">
                <div className="md-comp-cell"><img src="https://img.mobiscroll.com/demos/6plus.png" /></div>
                <div className="md-comp-cell"><img src="https://img.mobiscroll.com/demos/6.png" /></div>
            </div>
        </div>
        <div className="md-title md-comp-sub">Overview</div>
        <div className="md-comp-table">
            <div className="md-comp-cell md-comp-desc">Available in silver, gold, and space gray, iPhone 6 Plus features an A8 chip, Touch ID, faster LTE wireless, a new 8MP iSight camera with Focus Pixels, and iOS 8.</div>
            <div className="md-comp-cell md-comp-desc">Available in silver, gold, and space gray, iPhone 6 features an A8 chip, Touch ID, faster LTE wireless, a new 8MP iSight camera with Focus Pixels, and iOS 8.</div>
        </div>
    </div>;
};
const Ios = () => {
        return <div id="md-tab-ios" className="md-tab md-tab-sel">
        <div className="md-img-cont"><img src="https://img.mobiscroll.com/demos/ios8.png" /></div>
        <h2 className="md-title">The biggest iOS release ever.</h2>
        <div className="md-img-cont"><img src="https://img.mobiscroll.com/demos/ios.jpg" /></div>
    </div>;
};
const Icloud = () => {
        return <div id="md-tab-icloud" className="md-tab md-tab-sel">
            <div className="md-img-cont"><img src="https://img.mobiscroll.com/demos/icloud.png" /></div>
            <h1 className="md-title">iCloud</h1>
            <div className="md-title md-cloud-desc">iCloud connects you and your Apple devices in amazing ways. It makes sure you always have the latest versions of your most important things — like documents, apps, notes, and contacts — on whatever device you are using. It lets you easily share
                        photos, calendars, locations, and more with friends and family. It even helps you find your device if you lose it. And iCloud does it all automatically. Just like that.</div>
            <div className="md-img-cont"><img src="https://img.mobiscroll.com/demos/icloudp.png" /></div>
        </div>;
};


<div id="content"></div>
.mbsc-ms .micons {
    font-family: inherit;
}

.mbsc-ms .micons:before {
    font-family: 'icons_general';
}

.md-navigation .md-tab {
    display: none;
}

.md-navigation .md-tab-sel {
    display: block;
    height: 100%;
    background: #fff;
    font-size: 18px;
    padding: 25px;
    color: #333;
    font-family: "myriad-pro", sans-serif, verdana;
}

.md-navigation .md-title {
    text-align: center;
    font-weight: 100;
    color: #333;
}

.md-navigation .md-img-cont {
    text-align: center;
}

.md-navigation .md-img-cont img {
    display: block;
    margin: 0 auto;
    max-width: 100%;
    max-height: 700px;
}

.md-navigation .md-tab-acc {
    padding-bottom: 0;
}

.md-navigation .md-tab-acc .md-title {
    text-align: left;
}

.md-navigation .md-comp-title {
    margin: 0;
}

.md-navigation .md-comp-subtitle {
    margin-bottom: 55px;
}

.md-navigation .md-comp-sub {
    text-align: left;
    margin-top: 55px;
    border-bottom: 1px solid #d6d6d6;
    margin-bottom: 10px;
}

.md-navigation .md-comp-c {
    background: #f2f2f2;
    padding: 30px 0;
    margin: 0 -25px;
}

.md-navigation .md-comp-table {
    display: table;
    width: 100%;
}

.md-navigation .md-comp-cell {
    display: table-cell;
    padding: 0 20px;
}

.md-navigation .md-comp-cell img {
    display: block;
    max-width: 100%;
}

.md-navigation .md-comp-desc {
    font-size: 15px;
    padding: 10px;
}

.md-navigation .md-cloud-desc {
    margin-bottom: 26px;
}

Navigation - Event handlers

Change demo
Event handlers

The navigation components ships with different event hooks for deep customization. Events are triggered through the lifecycle of the component where you can tie in custom functionality and code. While users interact with the UI events like onItemTap, onMenuShow, onMenuHide ... will be triggered. Interact with the example and check the event log for the output.

For a complete list of events go to the documentation  See available lifecycle events →
Clear event log
EVENTS FIRED: 
import mobiscroll from '@mobiscroll/react';
import '@mobiscroll/react/dist/css/mobiscroll.min.css';

class App extends React.Component {
    onInit = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onMarkupReady = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onMove = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onItemTap = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onAnimationStart = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onAnimationEnd = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onGestureStart = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onGestureEnd = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onMenuShow = (event, inst) => {
        // Your custom event handler goes here
    }
    
    onMenuHide = (event, inst) => {
        // Your custom event handler goes here
    }
    
    render() {
        return (
            <div>
                <mobiscroll.FormGroup>
                    <mobiscroll.FormGroupTitle>Tab navigation</mobiscroll.FormGroupTitle>
                    <mobiscroll.TabNav 
                        lang=""
                        theme="" 
                        themeVariant=""
                        type="tab"
                        display="inline"
                        onInit={this.onInit}
                        onMarkupReady={this.onMarkupReady}
                        onMove={this.onMove}
                        onItemTap={this.onItemTap}
                        onAnimationStart={this.onAnimationStart}
                        onAnimationEnd={this.onAnimationEnd}
                        onGestureStart={this.onGestureStart}
                        onGestureEnd={this.onGestureEnd}
                    >
                        <mobiscroll.NavItem>News</mobiscroll.NavItem>
                        <mobiscroll.NavItem>People</mobiscroll.NavItem>
                        <mobiscroll.NavItem>Messages</mobiscroll.NavItem>
                        <mobiscroll.NavItem>Notifications</mobiscroll.NavItem>
                        <mobiscroll.NavItem>Your story</mobiscroll.NavItem>
                        <mobiscroll.NavItem>Events</mobiscroll.NavItem>
                        <mobiscroll.NavItem>Preferences</mobiscroll.NavItem>
                    </mobiscroll.TabNav>
                </mobiscroll.FormGroup>
                <mobiscroll.FormGroup>
                    <mobiscroll.FormGroupTitle>Bottom navigation</mobiscroll.FormGroupTitle>
                    <mobiscroll.BottomNav 
                        lang=""
                        theme="" 
                        themeVariant=""
                        type="bottom"
                        display="inline"
                        onInit={this.onInit}
                        onMarkupReady={this.onMarkupReady}
                        onItemTap={this.onItemTap}
                        onMenuShow={this.onMenuShow}
                        onMenuHide={this.onMenuHide}
                    >
                        <mobiscroll.NavItem icon="newspaper">News</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="material-people" badge="1">People</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="bubble" badge="9">Messages</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="fa-globe">Notifications</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="camera">Your story</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="calendar">Events</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="line-settings">Preferences</mobiscroll.NavItem>
                    </mobiscroll.BottomNav>
                </mobiscroll.FormGroup>
                <mobiscroll.FormGroup>
                    <mobiscroll.FormGroupTitle>Hamburger navigation</mobiscroll.FormGroupTitle>
                    <mobiscroll.HamburgerNav 
                        lang=""
                        theme="" 
                        themeVariant=""
                        type="hamburger"
                        onInit={this.onInit}
                        onMarkupReady={this.onMarkupReady}
                        onItemTap={this.onItemTap}
                        onMenuShow={this.onMenuShow}
                        onMenuHide={this.onMenuHide}
                    >
                        <mobiscroll.NavItem icon="newspaper">News</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="material-people" badge="1">People</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="bubble" badge="9">Messages</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="fa-globe">Notifications</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="camera">Your story</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="calendar">Events</mobiscroll.NavItem>
                        <mobiscroll.NavItem icon="line-settings">Preferences</mobiscroll.NavItem>
                    </mobiscroll.HamburgerNav>
                </mobiscroll.FormGroup>
            </div>
        );
    }    
}

<div id="content"></div>

Navigation - Responsive

Change demo
Responsive

Set up the Navigation to behave responsively. Use the appriopriate positioning and rendering based on the screen size. You can have Hamburger menu on small screens and Tab navigation on large screens.

All this can be configured under the responsive setting where you pass the options for each breakpoint.

responsive: {
    xsmall: { ... }, small: { ... }, medium: { ... }, large: { ... }, xlarge: { ... }
}

import mobiscroll from '@mobiscroll/react';
import '@mobiscroll/react/dist/css/mobiscroll.min.css';

class App extends React.Component {
    render() {
        return (
            <div className="mbsc-padding">
                <mobiscroll.HamburgerNav
                    lang=""
                    theme="" 
                    themeVariant=""
                    type="hamburger"
                    responsive={{
                        medium: {
                            type: 'tab'
                        }
                    }}
                >
                    <mobiscroll.NavItem>News</mobiscroll.NavItem>
                    <mobiscroll.NavItem>People</mobiscroll.NavItem>
                    <mobiscroll.NavItem>Messages</mobiscroll.NavItem>
                    <mobiscroll.NavItem>Notifications</mobiscroll.NavItem>
                    <mobiscroll.NavItem>Your stor</mobiscroll.NavItem>
                    <mobiscroll.NavItem>Events</mobiscroll.NavItem>
                    <mobiscroll.NavItem>Preferences</mobiscroll.NavItem>
                </mobiscroll.HamburgerNav>
            </div>
        );
    }    
}

<div id="content"></div>

Navigation - Desktop

Change demo
Desktop

Bottom and Tab navigation can be equally fitting for managing content on desktop web apps and large screens.

You can choose between one and the other depending on you content layout or use both like in this example.

import mobiscroll from '@mobiscroll/react';
import '@mobiscroll/react/dist/css/mobiscroll.min.css';

class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            selectedMenu: 'food',
            selectedBottomMenu: 'tech'
        };
        
        this.selectMenu = this.selectMenu.bind(this);
        this.selectedBottomMenu = this.selectedBottomMenu.bind(this);
    }
    
    selectMenu (newMenu) {
        this.setState({ selectedMenu: newMenu });  
    }
    
    selectedBottomMenu (newMenu) {
        this.setState({ selectedBottomMenu: newMenu });  
    }
    
    render () {
        var content, contentBottom;
        switch (this.state.selectedMenu) {
            case 'food': 
                content = <div className="md-tab-sel">
                    <h3>Monochrome Pizzas</h3>
                    <p>
                        French creative studio Black Pizza commissioned the photographer Erwan Fichou and the bio independant chef Julie Basset to make the series “Pizza is the New Black” : a collection of monochrome pizzas, cooked with insolite objets and perfumes such as crab,
                        lichee, candies, lipsticks, green peas and green plants.
                    </p>
                </div>
                break;
            case 'tech':
                content = <div className="md-tab-sel">
                    <h3>Electric Smartscooter</h3>
                    <p>
                        Gogoro Smartscooter is world’s first connected two-wheeled electric vehicle. The Smartscooter uses the precision, processes and materials utilizes for supercars to offer top performance, physically and technically sublime.
                    </p>
                </div>;
                break;
            case 'life': 
                content = <div className="md-tab-sel">
                    <h3>Fox Village in Japan</h3>
                    <p>
                        Located in the prefecture of Miyagi, Japan, Zao Fox Village is a parc inhabited by six species of wild foxes that it’s possible to photograph and feed with food provided by the park. Some visitors have captured unique instants of this amazing experience
                        and disclose us touching images.
                    </p>
                </div>;
                break;
            case 'sport':
                content = <div className="md-tab-sel">
                    <h3>Red Bull RB11 Formula 1 Car</h3>
                    <p>
                        The Red Bull RB11 is a Formula 1 racing car being designed by Adrian Newey for Infiniti Red Bull Racing to compete in the 2015 Formula 1 season.
                    </p>
                </div>;
                break;
            case 'travel':
                content = <div className="md-tab-sel">
                    <h3>Portraits of African Female Warriors</h3>
                    <p>
                        The French street artist YZ tribute to African women warriors in her series entitled “Amazon”. These portraits refer to female soldiers of the First Franco-Dahomean War who actively fought face to the French army. Amazon is an ongoing project for which
                        YZ still conducts researches in Senegal.
                    </p>
                </div>;
                break;
            case 'music':
            default:
                content = <div className="md-tab-sel">
                    <h3>Kwabs – Perfect Ruin</h3>
                    <p>
                        Singer and songwriter based in London, Kwabs reveals the visual of his song “Perfect Ruin”. Directed by George Bellfield, the video follows the artist wandering with chills through a winter landscape. His Love + War album will be available on May 18th
                        via Atlantic Records.
                    </p>
                </div>;
                break;
        }
        switch (this.state.selectedBottomMenu) {
            case 'food': 
                contentBottom = <div className="md-bottom-sel-sel">
                    <h3>Vegetables Paper Art</h3>
                    <p>
                        For the opening of a blog named “Veg of the Day”, illustrator and designer Polly Lindsay has already started to cook a first batch of paper vegetables : an avocado, a red onion and a red pepper. She gives a precise work where we can easily admire the
                        different reliefs and layers of her artworks.
                    </p>
                </div>;
                break;
            case 'tech':
                contentBottom = <div className="md-bottom-sel">
                    <h3>Smallest Quadricopter</h3>
                    <p>
                        The Dutch gadget-manufacturer TRNDlabs reveals the smallest quadricopter of the world, the Nano Skeye Drone. The high thrust and low weight of the object allows users to quickly perform amazing maneuvers with a simple touch of joysticks. Bright LEDs have
                        also been incorporated into the Drone in order to drive in low-light conditions.
                    </p>
                </div>;
                break;
            case 'life': 
                contentBottom = <div className="md-bottom-sel">
                    <h3>The Urban Yoga</h3>
                    <p>
                        Artist, architect, dancer and yoga teacher, Anja Humljan thought the Urban Yoga project from an ambition : inviting people to experiment with their bodies what they feel, touch, smell, hear and taste in the city. She started series of photos in Paris,
                        Madrid, New York and Ljubljana to change the way she feels and moves in the city. According to her, the city must not be felt as a disturbing space but more like a vital source of energy.
                    </p>
                </div>;
                break;
            case 'sport':
                contentBottom = <div className="md-bottom-sel">
                    <h3>Wooden Skateboard</h3>
                    <p>
                        The two designers of the studio Sven Gabriel had the idea to create a skateboard made with a simple piece of wood, by adding the wheels and screws. The “Förster Skateboard” is thiner and more sharp than a traditional board. The outlines are made of tree’s
                        bark. This beautiful board is to discover in images plus a video in the gallery.
                    </p>
                </div>;
                break;
            case 'travel':
                contentBottom = <div className="md-bottom-sel">
                    <h3>People in The Alps Photography</h3>
                    <p>
                        Jakub Polomski is a Polish photographer specialized in travel photography. With its “Scale of Nature” series, the artist pays homage to mother nature. Pictures taken in the French & Swiss Alps are breathtaking and reminds us how the human being is very
                        small and meaningless compared to nature.
                    </p>
                </div>;
                break;
            case 'music':
            default:
                contentBottom = <div className="md-bottom-sel">
                    <h3>Batman Evolution</h3>
                    <p>
                        The Piano Guys is a group of four American artists living in Utah, which became known on YouTube with covers of famous song. Here is a tribute to the soundtracks of the films Batman with the video “Batman Evolution” and all the different cars of the dark
                        knight.
                    </p>
                </div>;
                break;
        }
        return (
            <div className="md-tab-bottom-nav">
                <div id="tab-content" className="md-desktop-nav">
                    <mobiscroll.Page>

                        <mobiscroll.TabNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            context="#tab-content"
                        >
                            <mobiscroll.NavItem selected={this.state.selectedMenu == 'food'} onClick={this.selectMenu.bind(null, 'food')}>Food</mobiscroll.NavItem>
                            <mobiscroll.NavItem selected={this.state.selectedMenu == 'tech'} onClick={this.selectMenu.bind(null, 'tech')}>Technology</mobiscroll.NavItem>
                            <mobiscroll.NavItem selected={this.state.selectedMenu == 'life'} onClick={this.selectMenu.bind(null, 'life')}>Lifestyle</mobiscroll.NavItem>
                            <mobiscroll.NavItem selected={this.state.selectedMenu == 'sport'} onClick={this.selectMenu.bind(null, 'sport')}>Sport</mobiscroll.NavItem>
                            <mobiscroll.NavItem selected={this.state.selectedMenu == 'travel'} onClick={this.selectMenu.bind(null, 'travel')}>Travel</mobiscroll.NavItem>
                            <mobiscroll.NavItem selected={this.state.selectedMenu == 'music'} onClick={this.selectMenu.bind(null, 'music')}>Music</mobiscroll.NavItem>
                        </mobiscroll.TabNav>
        
                        {content}
        
                    </mobiscroll.Page>
                </div>
                <div id="bottom-content" className="md-desktop-nav">
                    <mobiscroll.Page>

                        <mobiscroll.BottomNav
                            lang=""
                            theme="" 
                            themeVariant=""
                            context="#bottom-content"
                        >
                            <mobiscroll.NavItem icon="line-food" selected={this.state.selectedBottomMenu == 'food'} onClick={this.selectedBottomMenu.bind(null, 'food')}>Food</mobiscroll.NavItem>
                            <mobiscroll.NavItem icon="line-phone" selected={this.state.selectedBottomMenu == 'tech'} onClick={this.selectedBottomMenu.bind(null, 'tech')}>Technology</mobiscroll.NavItem>
                            <mobiscroll.NavItem icon="line-heart" selected={this.state.selectedBottomMenu == 'life'} onClick={this.selectedBottomMenu.bind(null, 'life')}>Lifestyle</mobiscroll.NavItem>
                            <mobiscroll.NavItem icon="line-t-shirt" selected={this.state.selectedBottomMenu == 'sport'} onClick={this.selectedBottomMenu.bind(null, 'sport')}>Sport</mobiscroll.NavItem>
                            <mobiscroll.NavItem icon="line-paperplane" selected={this.state.selectedBottomMenu == 'travel'} onClick={this.selectedBottomMenu.bind(null, 'travel')}>Travel</mobiscroll.NavItem>
                            <mobiscroll.NavItem icon="line-music" selected={this.state.selectedBottomMenu == 'music'} onClick={this.selectedBottomMenu.bind(null, 'music')}>Music</mobiscroll.NavItem>
                        </mobiscroll.BottomNav>

                        {contentBottom}
        
                    </mobiscroll.Page>
                </div>
            </div>
        );
    }
}

<div id="content"></div>
.md-tab-bottom-nav .md-desktop-nav {
    min-height: 320px;
    margin: 20px;
    border: 1px solid #adadad;
    position: relative;
}

.md-tab-bottom-nav .md-tab,
.md-tab-bottom-nav .md-bottom {
    display: none;
}

.md-tab-bottom-nav .md-tab-sel,
.md-tab-bottom-nav .md-bottom-sel {
    display: block;
    height: 100%;
    font-size: 18px;
    font-weight: normal;
    padding: 30px;
}

Looking for something you didn't see or have a sales question?
Ask us about it, we're here to help.

Component license


Purchase component licenses if you are looking for specific funcionality.

Total


All features will be included with the license.

Buy component license

Framework license


Get all 36 components, including with the Framework license.



Mobiscroll for React $595


Use Javascript when building with plain and simple JS. Use jQuery when you have jQuery already included or if you are building with jQuery Mobile. Use AngularJS when building with Angular 1.x or Ionic 1. Use Angular when building with Angular 2/4/5/6/7/8/9 or Ionic 2/3/4. Use it when you are building your app or website with React.


Buy framework license
See other licensing options

Framework license


Get all 36 components, including with the Framework license.



Mobiscroll for React $595


  • Use it when building with plain and simple JS
  • Compatible with vanilla JS app or frameworks like Vue
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with jQuery and jQuery Mobile
  • Enjoy the familiar API if you already use jQuery
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with Angular JS and Ionic 1
  • For web and mobile apps based on Angular 1.x
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with Angular and Ionic 2/3/4
  • Visual Studio and VS Code integration
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it when building with React JS
  • Collection of UI components for web and mobile
  • Royalty-free commercial usage
  • Technical support is included with the license
Buy framework license
See other licensing options

Framework license


Select the development framework you are using. Get all 36 components with the license.

Mobiscroll for Javascript
Mobiscroll for jQuery
Mobiscroll for React
Mobiscroll for Angular
Mobiscroll for Angular JS
  • Use it when building with plain and simple JS
  • Compatible with vanilla JS app or frameworks like Vue
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with jQuery and jQuery Mobile
  • Enjoy the familiar API if you already use jQuery
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with Angular JS and Ionic 1
  • For web and mobile apps based on Angular 1.x
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with Angular and Ionic 2/3/4
  • Visual Studio and VS Code integration
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it when building with React JS
  • Collection of UI components for web and mobile
  • Royalty-free commercial usage
  • Technical support is included with the license
Buy framework license
See other licensing options

Select the framework you are interested in

Javascript
jQuery
Angular
Angular JS
React

Use Javascript when building with plain and simple JS.

Use jQuery when you have jQuery already included or if you are building with jQuery Mobile.

Use AngularJS when building with Angular 1.x or Ionic 1.

Use Angular when building with Angular 2/4/5/6/7/8/9 or Ionic 2/3/4.

Use it when you are building your app or website with React.

Do you need additional support seats?

The license comes with one support seat. ( +$100/seat )

Add the source code?

Price
Buy now
Customize & try demos locally
Sign in or start your free trial

What framework are you using?

Javascript
jQuery
AngularJS
Angular
Ionic
React
Other
Select a framework
Email address

Customize & try this demo locally
Sign in or start your free trial

We have to set you up with a trial for this to run 👍

Email address

Install demo in your app
Follow this quick, two minute install guide
Close window

Step 1.Install the Mobiscroll CLI from npm

Copy command
$ npm install -g @mobiscroll/cli

The CLI makes configuring your apps super simple 👍

Step 2.Run the following command in the root folder of your Ionic project

Copy command
$ mobiscroll config ionic
$ mobiscroll config ionic --lite

You will be prompted to log in with your mobiscroll account. Set your password here

Create an Ionic 3 & Mobiscroll starter with the CLI:

$ mobiscroll start ionic myStarter

Run this command for Ionic 4 & Mobiscroll starter:

$ mobiscroll start ionic-angular myStarter

Step 3.Copy the code into your app.

Copy TS
Copy HTML
Copy CSS
Copy Module

Step 4.Run ionic serve in the root folder of your app 🎉

Copy command
$ ionic serve

And voilà, everything should be running smoothly.

Customize & try demos locally
How would you like to do it?
Install demo in your app
Follow this quick, two minute install guide
Close window

Step 1.Install the Mobiscroll CLI from npm

Copy command
$ npm install -g @mobiscroll/cli

The CLI makes configuring your apps super simple 👍

Step 2.Run the following command in the root folder of your Angular project

Copy command
$ mobiscroll config angular
$ mobiscroll config angular --lite

You will be prompted to log in with your mobiscroll account. Set your password here

Step 3.Copy the code into your app. HTML goes into the markup, TS into Typescript.

Copy TS
Copy HTML
Copy CSS
Copy Module

Step 4.Run ng serve in the root folder of your app 🎉

Copy command
$ ng serve

And voilà, everything should be running smoothly.

Thanks for downloading
Try and customize the app locally

Extract the zip file and run the project like any Ionic app. Make sure to have Ionic CLI installed and open the terminal in the app root folder.

Step 1. Run in root folder
$ npm install
Step 2. Start the app
$ ionic serve

Let us know if we can help and enjoy!

Change your password
Need to update your password? Enter and hit the button below

You are setting a password for the account

New Password Required Enter at least 6 characters
Change your password
Need to update your password? Enter and hit the button below

Your password has been changed!

Thanks for downloading
Customize demos locally

Everything is set up so that you can dig in right away and start exploring.

We have set up a trial so that you can try the demos locally.

Extract the zip file and open the demo in your favorite browser. To install Mobiscroll in your project follow instructions from this page.


Let us know if we can help and enjoy! 👍

Thanks for downloading
Customize demos locally

Please extract the zip file and run the project like any Angular CLI app. Make sure to have the Angular CLI installed.

For installation and usage, extract the zip file and open a terminal window and follow these steps.

Step 1. Run in root folder
$ npm install
Step 2. Start the app
$ ng serve --open

Let us know if we can help and enjoy! 👍

Thanks for downloading
Customize demos locally

Everything is set up so that you can dig in right away and start exploring.

We have set up a trial so that you can try the demos locally.

The easiest way to get started is to follow the installation steps and by grabbing the code directly from the demo page. Let us know if we can help and enjoy!

You'll find a fully functional Kitchen-sink Ionic app in the zip file.

Thanks for downloading
Customize demos locally

Everything is set up so that you can dig in right away and start exploring.

We have set up a trial so that you can try the demos locally.

The demos are using Babel's in-browser ES6 and JSX transformer. Extract the zip file and open the demo in your browser. To install Mobiscroll in your project follow instructions from this page.


Let us know if we can help and enjoy! 👍

Demos
Alerts & notifications
Alert Notifications Note
Components
Alerts & notifications 3
Buttons 4
Calendar 27
Cards 14
Collapsible 3
Color 10
Date & Time 20
Event Calendar 25
Forms 13
Grid layout 7
Image 7
Inputs & fields 6
Listview 19
Measurement 10
Navigation 8
Number 8
Numpad 14
Option List 4
Popup 10
Range 19
Scroller 7
Scrollview 5
Select 18
Slider & progress 4
Styling 6
Timer 5
Timespan 6
Toggle & Radio 4
Treelist 7
Theme Select
Mobiscroll
Mobiscroll Dark
Material
Material Dark
iOS
iOS Dark
Bootstrap
Windows
Windows Dark
Display Mode
Language Locale
See other demos and change options
Theme
Display
Locale
See other demos