I was following a tutorial on youtube and discovered that when the window size is small, and my content, which expands on click, when above the size of the window, does not allow me to scroll to the top, yet I can scroll to the bottom and back up to that point in which I can not scroll to the top no longer.
const accordion = document.getElementsByClassName('content-container');
for (i = 0; i < accordion.length; i++) {
accordion[i].addEventListener('click',
function() {
this.classList.toggle('active'); // toggles the class name on or off
}
)
}
body {
background: url(/projects/images/project-3-image.jpg) no-repeat center center/cover;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
.accordion {
background-color: #fff;
width: 65%;
padding: 30px;
border-radius: 30px;
}
.accordion .accordion-title {
margin-bottom: 30px;
text-align: center;
}
.accordion .content-container .question {
padding: 18px 0px;
font-size: 22px;
cursor: pointer;
border-bottom: 1px solid #000;
position: relative;
transition: .5s;
}
.accordion .content-container .question::after {
content: '+';
position: absolute;
right: -5px;
}
.accordion .content-container .answer {
padding-top: 15px;
font-size: 22px;
line-height: 1.5;
width: 100%;
height: 0px;
overflow: hidden;
transition: .5s;
}
/* JS Styling Link */
.accordion .content-container.active .answer {
height: 200px;
}
.accordion .content-container.active .question {
font-size: 18px;
transition: .5s;
}
.accordion .content-container.active .question::after {
content: '-';
font-size: 30px;
transition: .5s;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Accordian</title>
<link rel="stylesheet" href="project3.css">
</head>
<body>
<div class="accordion">
<h2 class="accordion-title">Freqently Asked Questions</h2>
<div class="content-container">
<div class="question">What is the Return Policy?</div>
<div class="answer">Lorem ipsum dolor sit amet consectetur adipisicing elit. Error, animi! Accusamus temporibus tenetur perferendis delectus asperiores libero cumque repudiandae, nesciunt totam deleniti quis nostrum? Obcaecati minima consequatur incidunt id vero?</div>
</div>
<div class="content-container">
<div class="question">What is the Return Policy?</div>
<div class="answer">Lorem ipsum dolor sit amet consectetur adipisicing elit. Error, animi! Accusamus temporibus tenetur perferendis delectus asperiores libero cumque repudiandae, nesciunt totam deleniti quis nostrum? Obcaecati minima consequatur incidunt id vero?</div>
</div>
<div class="content-container">
<div class="question">What is the Return Policy?</div>
<div class="answer">Lorem ipsum dolor sit amet consectetur adipisicing elit. Error, animi! Accusamus temporibus tenetur perferendis delectus asperiores libero cumque repudiandae, nesciunt totam deleniti quis nostrum? Obcaecati minima consequatur incidunt id vero?</div>
</div>
</div>
<script src="project3.js"></script>
</body>
</html>
I am new to css and html so I tried to instead of using justify-content : center;
and align-items: center;
, to use margin: auto;
, but that did not work. I figured this problem was happening because flex prioritizes being in the center regardless of whether it expands across the limits of the outer content.
2
Answers
It’s a combination of using
100vh
on thebody
along withheight: 200px
on.answer
when it’sactive
.It’s doing this when your browser is small because when you open each accordion at a small screen (
<600px
) it’s trying to add the staticheight
‘s while maintainingbody {height: 100vh;}
.What I would do is just use a media query to handle this on smaller screens both vertically and horizontally.
Examples from my comment:
keyword safe from MDN :
Margin:auto on the child instead: