1

I am working on an Electron application with a specific layout requirement and encountering issues with unwanted scrollbars. I need the header, footer, and navigation sidebar to remain fixed in position, with only the main content area being scrollable when its content exceeds the viewport. The entire window is set to a height of 600px, and no component outside the main content should scroll.

Here is my current CSS:

body {
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-areas:
        "header header"
        "nav content"
        "footer footer";
    grid-template-rows: 100px 1fr 20px; /* Header height, content taking the rest, footer height */
    grid-template-columns: 150px 1fr; /* Navigation width, content taking the rest */
    min-height: 100vh;
    font-family: Arial, sans-serif;
}

#header {
    grid-area: header;
    background: #f0f0f0;
    padding: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 20px;
    position: fixed;
    top: 0;
    width: 100%;
    height: 100px;
}

#nav {
    grid-area: nav;
    background: #f0f0f0; /* Different color to distinguish nav area */
    top:60px;
    bottom:30px;
    width: 150px;
    position:absolute;
    -moz-box-sizing:border-box;
    -webkit-box-sizing:border-box;
    -o-box-sizing:border-box;
    -ms-box-sizing:border-box;
    box-sizing:border-box;
    left:0;
    position: fixed;
}

#content {
    grid-area: content;
    background: #f0f0f0;
    padding: 20px; /* Padding for content for better readability */
    overflow-y: auto; /* Enables scrolling if the content is taller than the screen */
}

#footer {
    grid-area: footer;
    background: #f0f0f0; /* Matching the header */
    padding: 10px; /* Consistent padding with the header */
    width: 100%;
    position: fixed; 
    bottom: 0;
    height: 30px;
}

and my index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MySoftware Client</title>
    <link rel="stylesheet" href="styles/master.css">
    <script defer src="renderer.js"></script>
</head>
<body>
    <div id="header">
        <div class="logo">
            <img src="../icons/icon.png" alt="My Company" height="40">
        </div>
        <h1>MySoftware</h1>
    </div>
    <div class="window-controls">
        <button id="close-btn">✕</button>
    </div>
    <div id="nav">
        <ul style="padding: 40px;">
            <button id="loadPage-Setup">Setup</button>
            <button id="loadPage-Help">Help</button>
        </ul>
    </div>
    <main id="content">
        <!-- Content will be loaded here -->
    </main>
    <div id="footer">
        <p>MySoftware v1.0.0</p>
    </div>
</body>
</html>

However, a scrollbar appears for the entire window. I want only the content area to have a scrollbar when necessary, without affecting the overall window.

Can anyone help with a minimal working template or correct my CSS to meet these layout requirements in an Electron environment?

I found a similar question, that doesn't involve Electron but they don't work when I copy-paste their solutions into my electron.

1 Answer 1

1

I think as you should set fixed height to content element.

#content {
    grid-area: content;
    background: #f0f0f0;
    padding: 20px; /* Padding for content for better readability */
    height: 80vh; /* can use calc() function or 500px etc. */
    overflow-x: hidden; /* for enable scroller */
}

I hope my answer can help you.

Sign up to request clarification or add additional context in comments.

1 Comment

it worked. just for completeness: I also had to add a "overflow: hidden;" to the body section in css

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.