1

I have this snippet:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body style='overflow: hidden;'>
<style>
        *, :after, :before {
            box-sizing: border-box;
        }

        .example {
            display: flex;
            flex-direction: column;
            justify-content: flex-end;
            height: 100%;
            max-height: 100%;
        }

        .bottom {
            overflow: auto;
            height: 140px;
            max-height: 100%;
            flex-shrink: 0;
            white-space: pre-wrap;
        }

        .top {
            position: relative;
            display: flex;
        }

        .scroll {
            overflow-y: scroll;
            width: 100%;
        }

        .elements {
            position: relative;
        }
        .test {
            margin-top: 20px;
        }
    </style>
<article class="example">
    <div class="top">
        <div class="scroll">
            <article class="elements">
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
                <article class="test">
                    TEST
                </article>
            </article>
        </div>
    </div>
    <article class="bottom">
        Bottom
    </article>
</article>
</body>
</html>
The idea is that "Bottom" text is always visible, and area with "Test" element is scrollable - but scroll is not working. Would you like to spent a minute and help me to figure it out? Thank you in advance for every help.

2 Answers 2

1

You don't have a height set for the article container ( and you can use overflow: auto; too ).

.elements {
   position: relative;
   overflow: auto;
   height: 150px;
}
Sign up to request clarification or add additional context in comments.

1 Comment

I did it for example purpose (for real case, it has about 150px height)
0

Bit changes to your code

*,
 :after,
 :before {
  box-sizing: border-box;
}

/* some normalization to document */

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

.example {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  height: 100%;
  max-height: 100%;
}

.bottom {
  overflow: auto;
  height: 140px;
  max-height: 100%;
  flex-shrink: 0;
  white-space: pre-wrap;
}

/* handling overflow here */

.top {
  position: relative;
  display: flex;
  overflow: auto;
}

/* removed overflow here */

.scroll {
  width: 100%;
}

.elements {
  position: relative;
}

.test {
  margin-top: 20px;
}
<article class="example">
  <div class="top">
    <div class="scroll">
      <article class="elements">
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
        <article class="test">
          TEST
        </article>
      </article>
    </div>
  </div>
  <article class="bottom">
    Bottom
  </article>
</article>

2 Comments

If I understood correctly, the only one change is handling scroll one level up, am I right?
You should explain what exactly did you change, it can be helpful for the person who asked the question and other people who might have the same problem.

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.