CSS - Making accordion without Js

chayonning·2023년 6월 11일

css

목록 보기
2/2

⭐Accordion is a useful tool when we want to toggle between hiding and showing the content⭐

So in today I will write about making an accordian without Javascript ❕

<---CSS--->
* {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      body {
        font-family: "Inter", sans-serif;
      }
      .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;
      }
      .open {
        border-top: #087f5b 4px solid;
      }
      .open .hidden-box {
        display: block;
      }
      .number,
      .text {
        font-size: 24px;
        font-weight: 500px;
        /* color: #087f5b; */
      }
      .number {
        color: #ced4da;
      }
      .icon {
        width: 24px;
        height: 24px;
        stroke: #087f5b;
      }

      .hidden-box p {
        line-height: 1.5;
        margin-bottom: 24px;
      }
      .hidden-box ul {
        color: #868e96;
        margin-left: 20px;
        display: flex;
        flex-direction: column;
        gap: 12px;
      }
      .hidden-box {
        grid-column: 2/-1;
        display: none;
      }
      /* .hidden-box li {
        margin-bottom: 12px;
      } */
    </style>

<----html--->
 <body>
    <div class="accordion">
      <div class="item">
        <p class="number">01</p>
        <p class="text">How long do I have to return my chair</p>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth="{1.5}"
          stroke="currentColor"
          class="icon"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M19.5 8.25l-7.5 7.5-7.5-7.5"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Libero
            recusandae porro provident quasi dolor odit eum ipsa est, officia
            aliquid nostrum amet, at vero cumque? Laborum dicta rem quam ab.
          </p>
          <ul>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</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"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth="{1.5}"
          stroke="currentColor"
          class="icon"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M19.5 8.25l-7.5 7.5-7.5-7.5"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Libero
            recusandae porro provident quasi dolor odit eum ipsa est, officia
            aliquid nostrum amet, at vero cumque? Laborum dicta rem quam ab.
          </p>
          <ul>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
          </ul>
        </div>
      </div>

      <div class="item">
        <p class="number">03</p>
        <p class="text">How long do I have to return my chair</p>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth="{1.5}"
          stroke="currentColor"
          class="icon"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M19.5 8.25l-7.5 7.5-7.5-7.5"
          />
        </svg>
        <div class="hidden-box">
          <p>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Libero
            recusandae porro provident quasi dolor odit eum ipsa est, officia
            aliquid nostrum amet, at vero cumque? Laborum dicta rem quam ab.
          </p>
          <ul>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
          </ul>
        </div>
      </div>
    </div>
  </body>
</html>

❣result❣

❗ New Fact that I learned ❗

  • Give the same class (here, hidden-box) to all three of the boxes you see, and then add the class to the parent class of the box you want the toggle to open.
  • I wanted to make the second toggle open in this case, so I added ( .open ) class to the item, the largest parent class in the second box.
    So when I wrote it in HTML, I used
    .
  • Because the CSS has already done
    .hidden-box{
     display:none;
     }   
  .open.hidden-box{
  display:block;//The sub-element will work if we have the parent element (.open).//
  }

0개의 댓글