如何设置这些div的动画



我会制作这些div的动画,这样当我点击右箭头时就会得到答案,当点击时就会关闭。我该怎么做?我想在你点击时打开盒子显示答案,然后关闭它,在点击时只显示问题。此处的屏幕截图:https://ibb.co/dc2MZTn

HTML

  <body>
    <div class="accordion">
      <div class="item">
        <p class="number">01</p>
        <p class="text">Where are these chairs assembled?</p>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
      <div class="item open">
        <p class="number">02</p>
        <p class="text">How long do I have to return my chair?</p>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
      <div class="item">
        <p class="number">03</p>
        <p class="text">Do you ship to countries outside the EU?</p>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
    </div>
  </body>
</html>

CSS

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body {
  font-family: "Inter", sans-serif;
  color: #343a40;
  line-height: 1;
}
.accordion {
  width: 700px;
  margin: 100px auto;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.item {
  box-shadow: 0 0 32px rgba(0, 0, 0, 0.1);
  padding: 24px;
  display: grid;
  grid-template-columns: auto 1fr auto;
  column-gap: 24px;
  row-gap: 32px;
  align-items: center;
}
.number,
.text {
  font-size: 24px;
  font-weight: 500;
  /* color: #087f5b; */
}
.number {
  color: #ced4da;
}
.icon {
  width: 24px;
  height: 24px;
  stroke: #087f5b;
}
.hidden-box {
  grid-column: 2;
  display: none;
}
.hidden-box p {
  line-height: 1.6;
  margin-bottom: 24px;
}
.hidden-box ul {
  color: #868e96;
  margin-left: 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
/* OPEN STATE */
.open {
  border-top: 4px solid #087f5b;
}
.open .hidden-box {
  display: block;
}
.open .number,
.open .text {
  color: #087f5b;
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
  <body>
    <div class="accordion">
      <div class="item">
        <p class="number">01</p>
        <p class="text">Where are these chairs assembled?</p>

添加标签

        <label for="down-arrow1">
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        </label>

添加了输入类型复选框

        <input type="checkbox" id="down-arrow1">
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
      <div class="item open">
        <p class="number">02</p>
        <p class="text">How long do I have to return my chair?</p>
        <label for="down-arrow2">
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        </label>
        <input type="checkbox" id="down-arrow2">
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
      <div class="item">
        <p class="number">03</p>
        <p class="text">Do you ship to countries outside the EU?</p>
        <label for="down-arrow3">
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        </label>
        <input type="checkbox" id="down-arrow3">
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
    </div>
</body>
</html>

CSS

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body {
  font-family: "Inter", sans-serif;
  color: #343a40;
  line-height: 1;
}
.accordion {
  width: 700px;
  margin: 100px auto;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.item {
  box-shadow: 0 0 32px rgba(0, 0, 0, 0.1);
  padding: 24px;
  display: grid;
  grid-template-columns: auto 1fr auto;
  column-gap: 24px;
  row-gap: 32px;
  align-items: center;
}
.number,
.text {
  font-size: 24px;
  font-weight: 500;
  /* color: #087f5b; */
}
.number {
  color: #ced4da;
}
.icon {
  width: 24px;
  height: 24px;
  stroke: #087f5b;
}
.hidden-box {
  grid-column: 2;
  display: none;
}
.hidden-box p {
  line-height: 1.6;
  margin-bottom: 24px;
}
.hidden-box ul {
  color: #868e96;
  margin-left: 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

隐藏复选框

input {
    display: none;
}
/* OPEN STATE */

单击向下箭头=>显示文本

#down-arrow1:checked ~ .hidden-box, #down-arrow2:checked ~ .hidden-box, #down-arrow3:checked ~ .hidden-box {
    display: block;

}

解释:将图像放在标签内,创建一个标签可点击的复选框,然后隐藏复选框(我也是HTML/CSS的新手,所以这可能不是最优化的方法(

有很多方法可以做到这一点,但我现在能想到的是下面的片段,如果你不想关闭其他项目,你可以简单地删除函数中的forEach方法

//this only closes others
document.querySelectorAll('.open').forEach(elm =>{
  if(elm !== e.target.parentNode){
    elm.classList.remove('open');  
  }
});

//attaching event listers to all svg.icon
document.querySelectorAll('svg.icon').forEach(elm =>{
  elm.addEventListener('click', openMe);
});
//the main function
function openMe(e){
//toggle the open class of the parent (item itself)
var targ =  e.target.parentNode;
if(targ.tagName == 'svg'){targ = targ.parentNode;}
targ.classList.toggle('open');  
//====================
//This following block is to close every other item
document.querySelectorAll('.open').forEach(elm =>{
  if(elm !== targ){
    elm.classList.remove('open');  
  }
});   
//===========================
}
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body {
  font-family: "Inter", sans-serif;
  color: #343a40;
  line-height: 1;
}
.accordion {
  width: 700px;
  margin: 100px auto;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.item {
  box-shadow: 0 0 32px rgba(0, 0, 0, 0.1);
  padding: 24px;
  display: grid;
  grid-template-columns: auto 1fr auto;
  column-gap: 24px;
  row-gap: 32px;
  align-items: center;
}
.number,
.text {
  font-size: 24px;
  font-weight: 500;
  /* color: #087f5b; */
}
.number {
  color: #ced4da;
}
.icon {
  width: 24px;
  height: 24px;
  stroke: #087f5b;
}
.hidden-box {
  grid-column: 2;
  display: none;
}
.hidden-box p {
  line-height: 1.6;
  margin-bottom: 24px;
}
.hidden-box ul {
  color: #868e96;
  margin-left: 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
/* OPEN STATE */
.open {
  border-top: 4px solid #087f5b;
}
.open .hidden-box {
  display: block;
}
.open .number,
.open .text {
  color: #087f5b;
}
<div class="accordion">
      <div class="item">
        <p class="number">01</p>
        <p class="text">Where are these chairs assembled?</p>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
      <div class="item open">
        <p class="number">02</p>
        <p class="text">How long do I have to return my chair?</p>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
      <div class="item">
        <p class="number">03</p>
        <p class="text">Do you ship to countries outside the EU?</p>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="icon"
          fill="none"
          viewBox="0 0 24 24"
          stroke="currentColor"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M19 9l-7 7-7-7"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit.
            Accusantium dolor at sequi obcaecati cupiditate. Voluptates
            repellendus cupiditate aperiam! Incidunt amet quo neque.
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
            <li>
              Quasi accusamus corporis totam tempora suscipit ab obcaecati.
            </li>
            <li>Tempora, et atque officia at consequatur laborum!</li>
            <li>Repudiandae praesentium illo voluptate in, atque enim.</li>
          </ul>
        </div>
      </div>
    </div>

最新更新