How To Integrate
Bootstrap/HTML Template In ReactJS
In this article, we will explain how to integrate HTML template in a React.js project.
Prerequisites
We should have the basic knowledge of React.js
- Visual Studio Code IDE should be installed on your system.
- Bootstrap need to install and node js need to install.
Let's first download a Bootstrap template. You can download a
free template from the following Link. I am going to use sb Admin Bootstrap template.
To create a new React.js project, open the command prompt and
enter the following command.
npx create-react-app fallenloves
Open the newly created project in Visual Studio Code and
install Bootstrap in this project by using the following command.
npm install --save bootstrap
Now, open the index.js file and add import Bootstrap.
- import 'bootstrap/dist/css/bootstrap.min.css';
After finish install import then create new folder assets,
and copy css, js and img folder from the template
Now open index.html file and add reference of css and js. Add
the following code in index.html.
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <meta name="theme-color" content="#000000" />
- <meta
- name="description"
- content="Web site created using create-react-app"
- />
- <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
- <link href="./assets/vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
- <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
- <link href="./assets/css/sb-admin-2.min.css" rel="stylesheet">
- <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
- <title>React App</title>
- </head>
- <body>
- <noscript>You need to enable JavaScript to run this app.</noscript>
- <div id="root"></div>
- <script src="./assets//vendor/jquery/jquery.min.js"></script>
- <script src="./assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
- <script src="./assets/vendor/jquery-easing/jquery.easing.min.js"></script>
- <script src="./assets/js/sb-admin-2.min.js"></script>
- <script src="./assets/vendor/chart.js/Chart.min.js"></script>
- <script src="./assets/js/demo/chart-area-demo.js"></script>
- <script src="./assets/js/demo/chart-pie-demo.js"></script>
- </body>
- </html>
Now, go to the src folder, create a new folder named 'Layout
'and inside this folder, add 4 new components,
- Footer.js
- Header.js
- Layout.js
- Leftside.js
Now open Header.js
component and add the following code.
Now open Header.js
component and add the following code.
- import React, { Component } from 'react'
-
- export class Header extends Component {
- render() {
- return (
- <div>
- <nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
-
-
- <button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
- <i class="fa fa-bars"></i>
- </button>
-
-
- <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search">
- <div class="input-group">
- <input type="text" class="form-control bg-light border-0 small" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2"/>
- <div class="input-group-append">
- <button class="btn btn-primary" type="button">
- <i class="fas fa-search fa-sm"></i>
- </button>
- </div>
- </div>
- </form>
-
-
- <ul class="navbar-nav ml-auto">
-
-
- <li class="nav-item dropdown no-arrow d-sm-none">
- <a class="nav-link dropdown-toggle" href="#" id="searchDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- <i class="fas fa-search fa-fw"></i>
- </a>
-
- <div class="dropdown-menu dropdown-menu-right p-3 shadow animated--grow-in" aria-labelledby="searchDropdown">
- <form class="form-inline mr-auto w-100 navbar-search">
- <div class="input-group">
- <input type="text" class="form-control bg-light border-0 small" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2"/>
- <div class="input-group-append">
- <button class="btn btn-primary" type="button">
- <i class="fas fa-search fa-sm"></i>
- </button>
- </div>
- </div>
- </form>
- </div>
- </li>
-
-
- <li class="nav-item dropdown no-arrow mx-1">
- <a class="nav-link dropdown-toggle" href="#" id="alertsDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- <i class="fas fa-bell fa-fw"></i>
- <span class="badge badge-danger badge-counter">3+</span>
- </a>
-
- <div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="alertsDropdown">
- <h6 class="dropdown-header">
- Alerts Center
- </h6>
- <a class="dropdown-item d-flex align-items-center" href="#">
- <div class="mr-3">
- <div class="icon-circle bg-primary">
- <i class="fas fa-file-alt text-white"></i>
- </div>
- </div>
- <div>
- <div class="small text-gray-500">December 12, 2019</div>
- <span class="font-weight-bold">A new monthly report is ready to download!</span>
- </div>
- </a>
- <a class="dropdown-item d-flex align-items-center" href="#">
- <div class="mr-3">
- <div class="icon-circle bg-success">
- <i class="fas fa-donate text-white"></i>
- </div>
- </div>
- <div>
- <div class="small text-gray-500">December 7, 2019</div>
- $290.29 has been deposited into your account!
- </div>
- </a>
- <a class="dropdown-item d-flex align-items-center" href="#">
- <div class="mr-3">
- <div class="icon-circle bg-warning">
- <i class="fas fa-exclamation-triangle text-white"></i>
- </div>
- </div>
- <div>
- <div class="small text-gray-500">December 2, 2019</div>
- Spending Alert: We've noticed unusually high spending for your account.
- </div>
- </a>
- <a class="dropdown-item text-center small text-gray-500" href="#">Show All Alerts</a>
- </div>
- </li>
-
-
- <li class="nav-item dropdown no-arrow mx-1">
- <a class="nav-link dropdown-toggle" href="#" id="messagesDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- <i class="fas fa-envelope fa-fw"></i>
-
- <span class="badge badge-danger badge-counter">7</span>
- </a>
-
- <div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="messagesDropdown">
- <h6 class="dropdown-header">
- Message Center
- </h6>
- <a class="dropdown-item d-flex align-items-center" href="#">
- <div class="dropdown-list-image mr-3">
- <img class="rounded-circle" src="https://source.unsplash.com/fn_BT9fwg_E/60x60" alt=""/>
- <div class="status-indicator bg-success"></div>
- </div>
- <div class="font-weight-bold">
- <div class="text-truncate">Hi there! I am wondering if you can help me with a problem I've been having.</div>
- <div class="small text-gray-500">Emily Fowler · 58m</div>
- </div>
- </a>
- <a class="dropdown-item d-flex align-items-center" href="#">
- <div class="dropdown-list-image mr-3">
- <img class="rounded-circle" src="https://source.unsplash.com/AU4VPcFN4LE/60x60" alt=""/>
- <div class="status-indicator"></div>
- </div>
- <div>
- <div class="text-truncate">I have the photos that you ordered last month, how would you like them sent to you?</div>
- <div class="small text-gray-500">Jae Chun · 1d</div>
- </div>
- </a>
- <a class="dropdown-item d-flex align-items-center" href="#">
- <div class="dropdown-list-image mr-3">
- <img class="rounded-circle" src="https://source.unsplash.com/CS2uCrpNzJY/60x60" alt=""/>
- <div class="status-indicator bg-warning"></div>
- </div>
- <div>
- <div class="text-truncate">Last month's report looks great, I am very happy with the progress so far, keep up the good work!</div>
- <div class="small text-gray-500">Morgan Alvarez · 2d</div>
- </div>
- </a>
- <a class="dropdown-item d-flex align-items-center" href="#">
- <div class="dropdown-list-image mr-3">
- <img class="rounded-circle" src="https://source.unsplash.com/Mv9hjnEUHR4/60x60" alt=""/>
- <div class="status-indicator bg-success"></div>
- </div>
- <div>
- <div class="text-truncate">Am I a good boy? The reason I ask is because someone told me that people say this to all dogs, even if they aren't good...</div>
- <div class="small text-gray-500">Chicken the Dog · 2w</div>
- </div>
- </a>
- <a class="dropdown-item text-center small text-gray-500" href="#">Read More Messages</a>
- </div>
- </li>
-
- <div class="topbar-divider d-none d-sm-block"></div>
-
-
- <li class="nav-item dropdown no-arrow">
- <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- <span class="mr-2 d-none d-lg-inline text-gray-600 small">Valerie Luna</span>
- <img class="img-profile rounded-circle" src="https://source.unsplash.com/QAB-WJcbgJk/60x60"/>
- </a>
-
- <div class="dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="userDropdown">
- <a class="dropdown-item" href="#">
- <i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
- Profile
- </a>
- <a class="dropdown-item" href="#">
- <i class="fas fa-cogs fa-sm fa-fw mr-2 text-gray-400"></i>
- Settings
- </a>
- <a class="dropdown-item" href="#">
- <i class="fas fa-list fa-sm fa-fw mr-2 text-gray-400"></i>
- Activity Log
- </a>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
- <i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>
- Logout
- </a>
- </div>
- </li>
-
- </ul>
-
- </nav>
- </div>
- )
- }
- }
-
- export default Header
Now
open Leftside.js component and add the following code.
- import React, { Component } from 'react'
- import { Link } from 'react-router-dom';
- export class Leftside extends Component {
- render() {
- return (
- <div>
- <ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
- <a class="sidebar-brand d-flex align-items-center justify-content-center" href="index.html">
- <div class="sidebar-brand-text mx-3">React Routing </div>
- </a>
-
- <hr class="sidebar-divider my-0" />
-
- <li class="nav-item active">
- <a class="nav-link" href="index.html">
- <i class="fas fa-fw fa-tachometer-alt"></i>
- <span>Dashboard</span></a>
- </li>
- <hr class="sidebar-divider" />
- <div class="sidebar-heading">
- Interface
- </div>
- <li class="nav-item">
- <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="true" aria-controls="collapseTwo">
- <i class="fas fa-fw fa-cog"></i>
- <span>Components</span>
- </a>
- <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
- <div class="bg-white py-2 collapse-inner rounded">
- <h6 class="collapse-header">Custom Components:</h6>
- <Link class="collapse-item" to="/home">Buttons</Link>
- <Link class="collapse-item" to="/button">Chart</Link>
- </div>
- </div>
- </li>
- <li class="nav-item">
- <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseUtilities" aria-expanded="true" aria-controls="collapseUtilities">
- <i class="fas fa-fw fa-wrench"></i>
- <span>Utilities</span>
- </a>
- <div id="collapseUtilities" class="collapse" aria-labelledby="headingUtilities" data-parent="#accordionSidebar">
- <div class="bg-white py-2 collapse-inner rounded">
- <h6 class="collapse-header">Custom Utilities:</h6>
- <a class="collapse-item" href="utilities-color.html">Colors</a>
- <a class="collapse-item" href="utilities-border.html">Borders</a>
- <a class="collapse-item" href="utilities-animation.html">Animations</a>
- <a class="collapse-item" href="utilities-other.html">Other</a>
- </div>
- </div>
- </li>
- <hr class="sidebar-divider" />
-
- <div class="sidebar-heading">
- Addons
- </div>
- <li class="nav-item">
- <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="true" aria-controls="collapsePages">
- <i class="fas fa-fw fa-folder"></i>
- <span>Pages</span>
- </a>
- <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
- <div class="bg-white py-2 collapse-inner rounded">
- <h6 class="collapse-header">Login Screens:</h6>
- <a class="collapse-item" href="login.html">Login</a>
- <a class="collapse-item" href="register.html">Register</a>
- <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
- <div class="collapse-divider"></div>
- <h6 class="collapse-header">Other Pages:</h6>
- <a class="collapse-item" href="404.html">404 Page</a>
- <a class="collapse-item" href="blank.html">Blank Page</a>
- </div>
- </div>
- </li>
- <li class="nav-item">
- <Link class="nav-link" to="/color"> <i class="fas fa-fw fa-chart-area"></i>Colors</Link>
- {/* <a class="nav-link" href="charts.html">
- <i class="fas fa-fw fa-chart-area"></i>
- <span>Charts</span></a> */}
- </li>
- <li class="nav-item">
- <Link class="nav-link" to="/table"> <i class="fas fa-fw fa-table"></i>Tables</Link>
- {/* <a class="nav-link" href="tables.html">
- <i class="fas fa-fw fa-table"></i>
- <span>Tables</span></a> */}
- </li>
- <hr class="sidebar-divider d-none d-md-block" />
- <div class="text-center d-none d-md-inline">
- <button class="rounded-circle border-0" id="sidebarToggle"></button>
- </div>
-
- </ul>
- </div>
- )
- }
- }
-
- export default Leftside
Now open the Footer.js
component and add the following code.
- import React, { Component } from 'react'
-
- export class Footer extends Component {
- render() {
- return (
- <div>
- <footer class="sticky-footer bg-white">
- <div class="container my-auto">
- <div class="copyright text-center my-auto">
- <span>Copyright © Your Website 2019</span>
- </div>
- </div>
- </footer>
- </div>
- )
- }
- }
-
- export default Footer
Now open Layout.js
component and import Header, Footer and Leftside component, add the
following code in this component.
- import React, { Component, Suspense } from 'react';
- import Leftside from './Leftside';
- import Header from './Header'
- import Footer from './Footer'
- import Home from '../Home'
- import {
- Route, Switch, Redirect
- } from 'react-router-dom';
- export class Layout extends Component {
- loading = () => <div className="animated fadeIn pt-1 text-center">Loading...</div>
- render() {
- return (
- <div>
- <div id="wrapper">
- <Leftside></Leftside>
- <div id="content-wrapper" class="d-flex flex-column">
- <div id="content">
- <Header />
- <Home/>
- </div>
- <Footer />
- </div>
- </div>
- </div>
- )
- }
- }
-
- export default Layout
Now open app.js
file and following code
- import React from 'react';
- import logo from './logo.svg';
- import './App.css';
- import Layout from './Layout/Layout'
- import Login from "./Login";
- import { HashRouter, Route, Switch } from 'react-router-dom';
- function App() {
- return (
- <div className="App">
- <Layout/>
- </div>
- );
- }
-
- export default App;
Now run the project by
using 'npm start' and check the result.