纯css控制展开收起,包括v-for的展开收起。

64 阅读3分钟

不是v-for方式:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .container {
        width: 800px;
        position: relative;
        padding-bottom: 20px;
      }
      .content {
        overflow: hidden;
        line-height: 1;
        /* 最多展示几行就(n*line-height)em, */
        height: 3em;
        background: yellow;
      }
      .more {
        position: absolute;
        bottom: 0;
        right: 0;
        background: blue;
        color: white;
      }
      .more::after {
        content: '展开';
      }
      .check {
        display: none;
      }
      .check:checked ~ .content {
        height: auto;
      }
      .check:checked ~ .more::after {
        content: '收起';
      }
    </style>
  </head>

  <body>
    <div class="container">
      <input
        class="check"
        type="checkbox"
        id="check" />
      <label
        class="more"
        for="check"></label>
      <div class="content">
      <div class="content">
      <div v-for="item in 5">一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区
      </div>
    </div>
    </div>
  </body>
</html>

v-for方式:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16"></script>
  <style>
    .container {
      width: 800px;
      position: relative;
      padding-bottom: 20px;
    }

    .content {
      overflow: hidden;
      line-height: 1;
      /* 最多展示几行就(n*line-height)em, */
      height: 3em;
      background: yellow;
    }

    .more {
      position: absolute;
      bottom: 0;
      right: 0;
      background: blue;
      color: white;
    }

    .more::after {
      content: '展开';
    }

    .check {
      display: none;
    }

    .check:checked~.content {
      height: auto;
    }

    .check:checked~.more::after {
      content: '收起';
    }
  </style>
</head>

<body>
  <div id="app" class="container">
    <input class="check" type="checkbox" id="check" checked/>
    <label class="more" for="check"></label>
    <div class="content">
      <div v-for="item in 5">一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区</div>
      <div>一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区一个帮助开发者成长的社区
      </div>
    </div>
  </div>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {}
    })
  </script>
</body>

</html>