css 构建手风琴组件(accordion component)

手风琴组件是下面这样的组件:

在这里插入图片描述
多用于FAQ,只显示标题,内容默认隐藏,只有点击才会出现。

用CSS实现下面的组件,当然,点击隐藏/显示的功能要使用 JavaScript 才能实现,这部分先不考虑。
在这里插入图片描述
如下的css,使用了 flex, grid, 然后使用一个名称为open的class 控制 content 的隐藏与显示,添加则显示,删除则隐藏。

<!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>Accordion Component</title>

    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap"
      rel="stylesheet"
    />
    <style>
      /*
        SPACING SYSTEM (px)
        2 / 4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 / 80 / 96 / 128

        FONT SIZE SYSTEM (px)
        10 / 12 / 14 / 16 / 18 / 20 / 24 / 30 / 36 / 44 / 52 / 62 / 74 / 86 / 98
         
        Main color: #087f5b 
        Tint1: #099268;
        Grey: #343a40
        footer-color: #495057;
     */

      * {
     
     
        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: 20px;
      }

      .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: 500px;
        /* color: #087f5b; */
      }

      .number {
     
     
        color: #ced4da;
      }

      .icon {
     
     
        width: 24px;
        height: 24px;
        stroke: #087f5b;
      }
      .hidden-box {
     
     
        grid-column: 2;
        display: none;
        /* grid-row: 2/3; */
      }

      /* OPEN STATE */
      .open {
     
     
        border-top: 4px solid #087f5b;
      }

      .open .hidden-box {
     
     
        display: block;
      }

      .open .number,
      .open .text {
     
     
        color: #087f5b;
      }

      .hidden-box p {
     
     
        line-height: 1.6;
        margin-bottom: 24px;
      }

      .hidden-box ul {
     
     
        color: #868e96;
        margin-left: 20px;

        display: flex;
        flex-direction: column;
        gap: 20px;
      }
    </style>
  </head>
  <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
            reprehenderit sapiente voluptatum doloribus nostrum! Quis
            praesentium maxime sequi in accusantium
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit. s</li>
            <li>
              Ex eius tempora unt vel nemo dolorum? Et maxime autem totam est,
            </li>
            <li>expedita dignissimos fugiat voluptate deleniti a repellat,</li>
            <li>
              Lorem ipsum dolor sit, amet consectetur adipisicing elit. Saepe
            </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
            reprehenderit sapiente voluptatum doloribus nostrum! Quis
            praesentium maxime sequi in accusantium
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit. s</li>
            <li>
              Ex eius tempora unt vel nemo dolorum? Et maxime autem totam est,
            </li>
            <li>expedita dignissimos fugiat voluptate deleniti a repellat,</li>
            <li>
              Lorem ipsum dolor sit, amet consectetur adipisicing elit. Saepe
            </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
            reprehenderit sapiente voluptatum doloribus nostrum! Quis
            praesentium maxime sequi in accusantium
          </p>
          <ul>
            <li>Lorem ipsum, dolor sit amet consectetur adipisicing elit. s</li>
            <li>
              Ex eius tempora unt vel nemo dolorum? Et maxime autem totam est,
            </li>
            <li>expedita dignissimos fugiat voluptate deleniti a repellat,</li>
            <li>
              Lorem ipsum dolor sit, amet consectetur adipisicing elit. Saepe
            </li>
          </ul>
        </div>
      </div>
    </div>
  </body>
</html>

猜你喜欢

转载自blog.csdn.net/ftell/article/details/123239837
今日推荐