Responsive Design with Bootstrap

Intermediate 25 min read Lesson 3 of 4

What is Responsive Design?

Responsive design is an approach to web design that makes web pages render well on a variety of devices and window or screen sizes. It ensures a consistent user experience across desktop, tablet, and mobile devices.

Key Principle

"One design for all screens" - The same HTML content adapts to different screen sizes using CSS media queries and flexible layouts.

Bootstrap Grid System

Bootstrap uses a 12-column grid system for responsive layouts:

Grid Breakpoints

Breakpoint Class Prefix Dimensions
Extra small .col- Less than 576px
Small .col-sm- 576px and up
Medium .col-md- 768px and up
Large .col-lg- 992px and up
Extra large .col-xl- 1200px and up
Extra extra large .col-xxl- 1400px and up

Grid Examples

<!-- Equal width columns -->
<div class="row">
    <div class="col">Column 1</div>
    <div class="col">Column 2</div>
    <div class="col">Column 3</div>
</div>

<!-- Different width columns -->
<div class="row">
    <div class="col-4">4 columns wide</div>
    <div class="col-8">8 columns wide</div>
</div>

<!-- Responsive columns -->
<div class="row">
    <div class="col-12 col-md-6 col-lg-4">
        Full on mobile, half on tablet, third on desktop
    </div>
</div>

Bootstrap Components

1. Navbar

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <div class="container">
        <a class="navbar-brand" href="#">My App</a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav ms-auto">
                <li class="nav-item">
                    <a class="nav-link" href="#">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">About</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Contact</a>
                </li>
            </ul>
        </div>
    </div>
</nav>

2. Cards

<div class="row">
    <div class="col-12 col-md-4 mb-4">
        <div class="card">
            <img src="image.jpg" class="card-img-top" alt="...">
            <div class="card-body">
                <h5 class="card-title">Card Title</h5>
                <p class="card-text">Some quick example text.</p>
                <a href="#" class="btn btn-primary">Learn More</a>
            </div>
        </div>
    </div>
</div>

3. Forms

<form>
    <div class="mb-3">
        <label for="email" class="form-label">Email address</label>
        <input type="email" class="form-control" id="email" placeholder="Enter email">
    </div>
    
    <div class="mb-3">
        <label for="password" class="form-label">Password</label>
        <input type="password" class="form-control" id="password" placeholder="Password">
    </div>
    
    <div class="mb-3 form-check">
        <input type="checkbox" class="form-check-input" id="remember">
        <label class="form-check-label" for="remember">Remember me</label>
    </div>
    
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

4. Modals

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
    Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Modal Title</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <p>Modal content goes here.</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
            </div>
        </div>
    </div>
</div>

Customizing Bootstrap

Custom CSS Overrides

/* wwwroot/css/custom.css */
:root {
    --primary-color: #512BD4;
    --secondary-color: #0D6EFD;
    --dark-color: #1a1a2e;
}

.btn-primary {
    background-color: var(--primary-color);
    border-color: var(--primary-color);
}

.btn-primary:hover {
    background-color: darken(var(--primary-color), 10%);
    border-color: darken(var(--primary-color), 10%);
}

.navbar-custom {
    background: linear-gradient(135deg, var(--primary-color), var(--dark-color));
}

.card {
    border: none;
    box-shadow: 0 2px 15px rgba(0,0,0,0.05);
    transition: all 0.3s ease;
}

.card:hover {
    transform: translateY(-5px);
    box-shadow: 0 5px 30px rgba(0,0,0,0.1);
}

Complete Responsive Page Example

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Page</title>
    
    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- Font Awesome -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <!-- Custom CSS -->
    <link href="css/custom.css" rel="stylesheet">
</head>
<body>
    <!-- Navbar -->
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <div class="container">
            <a class="navbar-brand" href="#">MyApp</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav ms-auto">
                    <li class="nav-item"><a class="nav-link active" href="#">Home</a></li>
                    <li class="nav-item"><a class="nav-link" href="#">Features</a></li>
                    <li class="nav-item"><a class="nav-link" href="#">Pricing</a></li>
                    <li class="nav-item"><a class="nav-link" href="#">Contact</a></li>
                </ul>
            </div>
        </div>
    </nav>

    <!-- Hero Section -->
    <div class="hero-section py-5 text-center">
        <div class="container">
            <h1 class="display-4 fw-bold">Welcome to MyApp</h1>
            <p class="lead">A responsive web application built with Bootstrap</p>
            <a href="#" class="btn btn-primary btn-lg">Get Started</a>
        </div>
    </div>

    <!-- Features Section -->
    <div class="container py-5">
        <h2 class="text-center mb-4">Features</h2>
        <div class="row g-4">
            <div class="col-12 col-md-4">
                <div class="card h-100 text-center">
                    <div class="card-body">
                        <i class="fas fa-rocket fa-3x text-primary mb-3"></i>
                        <h5 class="card-title">Fast</h5>
                        <p class="card-text">Built for speed and performance.</p>
                    </div>
                </div>
            </div>
            <div class="col-12 col-md-4">
                <div class="card h-100 text-center">
                    <div class="card-body">
                        <i class="fas fa-shield-alt fa-3x text-success mb-3"></i>
                        <h5 class="card-title">Secure</h5>
                        <p class="card-text">Built with security in mind.</p>
                    </div>
                </div>
            </div>
            <div class="col-12 col-md-4">
                <div class="card h-100 text-center">
                    <div class="card-body">
                        <i class="fas fa-mobile-alt fa-3x text-warning mb-3"></i>
                        <h5 class="card-title">Responsive</h5>
                        <p class="card-text">Works on all devices.</p>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Footer -->
    <footer class="bg-dark text-white py-4 mt-5">
        <div class="container text-center">
            <p class="mb-0">© 2024 MyApp. All rights reserved.</p>
        </div>
    </footer>

    <!-- Bootstrap JS -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
Key Takeaway
  • Responsive design ensures your website works on all devices
  • Bootstrap provides a powerful grid system and components
  • Customize Bootstrap to match your brand
  • Always test on multiple screen sizes
Exercise

Build a responsive landing page:

  1. Use Bootstrap grid system
  2. Include responsive navbar
  3. Add cards for features
  4. Create a contact form
  5. Add a footer
  6. Customize with custom CSS
Test Your Knowledge - Take Quiz