简体   繁体   English

手风琴一起开

[英]Accordions are opening together

手风琴一起开 As you can see in the image, when I open one accordion, the accordion beside it opens as well.正如您在图片中看到的,当我打开一个手风琴时,它旁边的手风琴也会打开。 I'm think its the css that's causing the issue, but I'm not sure.我认为是 css 导致了这个问题,但我不确定。 I expected the accordion to open by itself, not with the accordion beside it, it seems as if the javascript is controlling the max height of the accordion beside it too.我希望手风琴自己打开,而不是旁边的手风琴,好像 javascript 也在控制它旁边手风琴的最大高度。


Here is the code:这是代码:

<div class="accordion-wrapper">
            <div class="accordion-card">
              <div class="accordion-header">Card 1</div>
              <div class="accordion-body">
                <div class="accordion-body-content">
                  Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quos
                  aliquid sint voluptatum deserunt alias iusto excepturi
                  pariatur odio
                </div>
              </div>
            </div>

            <div class="accordion-card">
              <div class="accordion-header">Card 2</div>
              <div class="accordion-body">
                <div class="accordion-body-content">
                  Lorem ipsum dolor sit, amet consectetur adipisicing elit.
                  Eaque nesciunt vero sunt. Ad eveniet maiores quidem quis id
                  animi
                </div>
              </div>
            </div>

            <div class="accordion-card">
              <div class="accordion-header">Card 3</div>
              <div class="accordion-body">
                <div class="accordion-body-content">
                  Lorem ipsum dolor sit, amet consectetur adipisicing elit.
                  Eaque nesciunt vero sunt. Ad eveniet maiores quidem quis id
                  animi
                </div>
              </div>
            </div>

            <div class="accordion-card">
              <div class="accordion-header">Card 4</div>
              <div class="accordion-body">
                <div class="accordion-body-content">
                  Lorem ipsum dolor sit, amet consectetur adipisicing elit.
                  Eaque nesciunt vero sunt. Ad eveniet maiores quidem quis id
                  animi
                </div>
              </div>
            </div>

            <div class="accordion-card">
              <div class="accordion-header">Card 5</div>
              <div class="accordion-body">
                <div class="accordion-body-content">
                  Lorem ipsum dolor sit, amet consectetur adipisicing elit.
                  Eaque nesciunt vero sunt. Ad eveniet maiores quidem quis id
                  animi
                </div>
              </div>
            </div>

            <div class="accordion-card">
              <div class="accordion-header">Card 6</div>
              <div class="accordion-body">
                <div class="accordion-body-content">
                  Lorem ipsum dolor sit, amet consectetur adipisicing elit.
                  Eaque nesciunt vero sunt. Ad eveniet maiores quidem quis id
                  animi
                </div>
              </div>
            </div>
          </div>
const accordionItemHeaders =
        document.querySelectorAll(".accordion-header");

      accordionItemHeaders.forEach((accordionItemHeader) => {
        accordionItemHeader.addEventListener("click", (event) => {
          accordionItemHeader.classList.toggle("active");
          //animation
          const accordionItemBody = accordionItemHeader.nextElementSibling;
          if (accordionItemHeader.classList.contains("active")) {
            accordionItemBody.style.maxHeight =
              accordionItemBody.scrollHeight + "px";
          } else {
            accordionItemBody.style.maxHeight = 0;
          }
        });
      });
.accordion-wrapper {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  position: relative;
  margin-top: 25px;
}

.accordion-card {
  background-color: rgba(182, 210, 253, 0.041);
  border-radius: 10px;
  width: 30vw;
  max-width: 385px;
  min-width: 350px;
  border: 1px solid rgba(153, 196, 239, 0.121);
  position: relative;
}

.accordion-header {
  color: rgba(255, 255, 255, 0.841);
  font-weight: 600;
  font-size: 1.25rem;
  padding: 1rem 1.5rem 0.8rem 1.3rem;
  display: flex;
  align-items: center;
  position: relative;
  cursor: pointer;
}

.accordion-body {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.2s ease-out;
}

.accordion-body-content {
  color: rgba(255, 255, 255, 0.658);
  font-weight: 400;
  font-size: 1.1rem;
  padding: 0.8rem 1rem 0.8rem 1.3rem;
  line-height: 1.5rem;
  border-top: 1px solid;
  border-image: linear-gradient(to right, rgba(153, 196, 239, 0.053), rgba(153, 196, 239, 0.201), rgba(153, 196, 239, 0.053)) 1;
  letter-spacing: 0.02em;
}

.accordion-header::after {
  content: '\003E';
  font-size: 2rem;
  font-weight: 400;
  position: absolute;
  right: 1rem;
  transition: ease-in 0.3s;
}

.accordion-header.active::after {
  transform: rotate(90deg);
  transition: ease-in 0.3s;
}

I would appreciate it very much if anyone knows how to make only one accordion open at a time.如果有人知道如何一次只打开一个手风琴,我将不胜感激。 Thanks谢谢

This is caused because display: flex uses align-items: stretch as default value which causes other elements in the row to fill whenever any enlarges the parent they all are contained in. Please set it to flex-start which will prevent this from happening, like this:这是因为display: flex使用align-items: stretch作为默认值,这会导致行中的其他元素在任何放大它们都包含的父元素时填充。请将其设置为flex-start以防止这种情况发生,像这样:

.accordion-wrapper {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  position: relative;
  margin-top: 25px;
  align-items: flex-start;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM