How to Create a Sidebar Layout in HTML and CSS

Introduction

A sidebar layout is a common design pattern used in websites to display navigation menus, additional information, or important links on the side of the main content. With CSS, you can easily create a flexible and responsive sidebar layout that works on different screen sizes. In this guide, you'll learn how to create a simple sidebar layout with a fixed sidebar and a main content area.

Implementation Steps

  1. Create Basic HTML Structure: Write the HTML structure for the sidebar and the main content.
  2. Add CSS to Style the Sidebar and Main Content: Use CSS to style the layout, including positioning the sidebar and content.
  3. Make the Layout Responsive: Add media queries to ensure the sidebar layout is responsive on smaller screens.

Step 1: Create a Basic HTML Structure

We’ll start by creating the website's basic structure, including a sidebar on the left and a main content area on the right.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sidebar Layout Example</title>
</head>
<body>

    <!-- Step 1: Sidebar layout structure -->
    <div class="container">
        <!-- Sidebar -->
        <aside class="sidebar">
            <nav>
                <ul>
                    <li><a href="#">Home</a></li>
                    <li><a href="#">About</a></li>
                    <li><a href="#">Services</a></li>
                    <li><a href="#">Contact</a></li>
                </ul>
            </nav>
        </aside>

        <!-- Main content -->
        <main class="main-content">
            <h1>Welcome to Our Website</h1>
            <p>This is the main content area where you can add text, images, and more.</p>
        </main>
    </div>

</body>
</html>

Explanation:

  • The aside element represents the sidebar, which contains a simple navigation menu.
  • The main element holds the main content, which will be styled to appear alongside the sidebar.

Step 2: Add CSS to Style the Sidebar and Main Content

Now, let’s style the layout using CSS to position the sidebar and the main content next to each other.

/* Basic styles */
body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

.container {
    display: flex; /* Align the sidebar and main content side by side */
    min-height: 100vh; /* Full-height layout */
}

/* Sidebar styles */
.sidebar {
    background-color: #2c3e50;
    color: white;
    width: 250px; /* Fixed width for the sidebar */
    padding: 20px;
    height: 100vh; /* Make the sidebar fill the full height of the viewport */
}

.sidebar nav ul {
    list-style: none;
    padding: 0;
}

.sidebar nav ul li {
    margin-bottom: 15px;
}

.sidebar nav ul li a {
    color: white;
    text-decoration: none;
    font-size: 18px;
}

.sidebar nav ul li a:hover {
    text-decoration: underline;
}

/* Main content styles */
.main-content {
    flex: 1; /* Take up the remaining space */
    padding: 20px;
    background-color: #ecf0f1;
}

.main-content h1 {
    font-size: 36px;
}

.main-content p {
    font-size: 18px;
    line-height: 1.6;
}

Explanation:

  • display: flex;: This is used in the .container class to align the sidebar and main content side by side.
  • .sidebar: The sidebar is given a fixed width (250px) and a height of 100% of the viewport (100vh), ensuring it stays fixed on the left.
  • .main-content: The main content takes up the remaining space (flex: 1), allowing it to adjust its width according to the screen size.

Step 3: Make the Layout Responsive

To ensure the sidebar layout works well on smaller screens, we’ll add a media query that stacks the sidebar above the main content when the screen width is less than 768px.

/* Step 3: Responsive layout for smaller screens */
@media (max-width: 768px) {
    .container {
        flex-direction: column; /* Stack the sidebar and content vertically */
    }

    .sidebar {
        width: 100%; /* Sidebar takes up full width on small screens */
        height: auto; /* Allow the sidebar height to adjust */
    }

    .main-content {
        flex: none;
    }
}

Explanation:

  • flex-direction: column;: When the screen width is smaller than 768px, the sidebar and main content stack vertically.
  • .sidebar { width: 100%; }: The sidebar takes up the full width on smaller screens.

Complete Code Example

Here’s the complete HTML and CSS code for a working sidebar layout with a responsive design:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sidebar Layout Example</title>
    <style>
        /* Basic styles */
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .container {
            display: flex; /* Align the sidebar and main content side by side */
            min-height: 100vh; /* Full-height layout */
        }

        /* Sidebar styles */
        .sidebar {
            background-color: #2c3e50;
            color: white;
            width: 250px; /* Fixed width for the sidebar */
            padding: 20px;
            height: 100vh; /* Make the sidebar fill the full height of the viewport */
        }

        .sidebar nav ul {
            list-style: none;
            padding: 0;
        }

        .sidebar nav ul li {
            margin-bottom: 15px;
        }

        .sidebar nav ul li a {
            color: white;
            text-decoration: none;
            font-size: 18px;
        }

        .sidebar nav ul li a:hover {
            text-decoration: underline;
        }

        /* Main content styles */
        .main-content {
            flex: 1; /* Take up the remaining space */
            padding: 20px;
            background-color: #ecf0f1;
        }

        .main-content h1 {
            font-size: 36px;
        }

        .main-content p {
            font-size: 18px;
            line-height: 1.6;
        }

        /* Step 3: Responsive layout for smaller screens */
        @media (max-width: 768px) {
            .container {
                flex-direction: column; /* Stack the sidebar and content vertically */
            }

            .sidebar {
                width: 100%; /* Sidebar takes up full width on small screens */
                height: auto; /* Allow the sidebar height to adjust */
            }

            .main-content {
                flex: none;
            }
        }
    </style>
</head>
<body>

    <!-- Sidebar layout structure -->
    <div class="container">
        <!-- Sidebar -->
        <aside class="sidebar">
            <nav>
                <ul>
                    <li><a href="#">Home</a></li>
                    <li><a href="#">About</a></li>
                    <li><a href="#">Services</a></li>
                    <li><a href="#">Contact</a></li>
                </ul>
            </nav>
        </aside>

        <!-- Main content -->
        <main class="main-content">
            <h1>Welcome to Our Website</h1>
            <p>This is the main content area where you can add text, images, and more.</p>
        </main>
    </div>

</body>
</html>

Output

You can play with the above HTML in Online HTML Editor and Compiler. Here is the output of the above HTML page.:

Conclusion

In this tutorial, you learned how to create a simple sidebar layout using CSS. The sidebar is fixed on the left, while the main content fills the remaining space. We also added a responsive design using media queries, ensuring the layout stacks vertically on smaller screens. You can customize this layout further to fit your design needs, such as changing colors and fonts or adding more content to the sidebar and main section.

Comments