<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          拜托,css這樣實(shí)現(xiàn)多行文本“展開收起” 超酷的好吧

          共 5958字,需瀏覽 12分鐘

           ·

          2022-02-24 01:41


          點(diǎn)擊上方 前端陽光,關(guān)注公眾號(hào)

          回復(fù)加群,加入技術(shù)交流群交流群

          前言

          2022.02.14的午后,我站在你家門口,再次遇見了你,他又來牽起你的手

          無法言語,我是什么,這樣傻傻的我怎么守護(hù)你

          這次我靜靜哭了選擇放棄,我好想好想把記憶折疊起

          可惜,記憶不能像之前那個(gè)需求一樣自由展開與折疊

          前段時(shí)間接到一個(gè)需求,關(guān)于文字展開和收起的,走了很多路,踩了很多坑。

          在這個(gè)夜深人靜,想你想到淚流的時(shí)候,決定記錄分享一下。

          需求如下所述:

          1. 「未滿兩行時(shí)」

          2. 「超過兩行,少于7行時(shí)」

          未展開

          展開

          1. 「超過7行時(shí)」

          未展開

          展開

          就如上面所述,我倒是第一次做這種需求,于是就網(wǎng)上搜索下案例,然后就搜出下面這篇文章:

          ?

          文章鏈接:https://juejin.cn/post/6963904955262435336#comment

          ?

          點(diǎn)贊和評(píng)論都挺多的,于是就用他的方案來實(shí)現(xiàn)了。

          但是后面發(fā)現(xiàn)有些問題,其實(shí)他的文章后面的評(píng)論區(qū)也有讀者提出來了問題。

          其實(shí)我覺得問題也不大,于是問哦下設(shè)計(jì)大佬

          顯然,就收到了拒絕。

          被拒絕是十分正常不過的事情了,不過這比被發(fā)好人卡殺傷力少太多了,不信你聽聽:

          "你真的挺好的,人也很優(yōu)秀,但是配不上我"

          這矯情的措辭結(jié)構(gòu)

          經(jīng)歷過的人會(huì)懂

          可能是孤獨(dú)讓情緒變得脆弱,毫無頭緒的我,開始尋求網(wǎng)友的幫助。

          群里就有大佬提供了這個(gè)

          https://codepen.io/xboxyan/pen/LYWpWzK

          這個(gè)跟方法跟 上面介紹的那篇文章的方法差不多

          不同點(diǎn)在于這個(gè)方法是利用div高度來限制文字顯示的行數(shù)的。

          上面文章里是利用-webkit-line-clamp來限制行數(shù)。

          然后它的省略號(hào)也是在label按鈕里模擬出來的。

          上面文章里的方法的缺點(diǎn)上面已經(jīng)說了,那么群里推薦的方法是否也能解決問題呢?

          其實(shí)不行,本來在pc上看確實(shí)是沒問題了,但是在安卓和ios看發(fā)現(xiàn)不太行。

          發(fā)現(xiàn)在ios上限制7行的時(shí)候,顯示除了7.5行,就是多了半行?;蛘?總有一個(gè)手機(jī)對(duì)不齊(我們要適配各種安卓機(jī)和低端ios)

          雖說兩個(gè)方法都有缺點(diǎn),但是都有優(yōu)點(diǎn),于是結(jié)合兩者的優(yōu)點(diǎn)就進(jìn)行了我的方案的實(shí)現(xiàn)。

          我的方案

          <div class="activity-desc-wrapper">
            <input
              type="checkbox"
              class="toggleInput"
              id="toggleInput"
              v-model="isUnFold"
            />

            <div class="activity-desc" ref="descBox" id="descBox">
              <label
                class="btn"
                for="toggleInput"
                v-if="isMoreThan2Line && (!isUnFold || isMoreThan7Line)"
                >
          {{ isUnFold ? '展開' : '收起' }}</label
              >

              概述文字概述文字概述文字概述文字概
              述文字概述文字概述文字概述文字概述文字概述文字
              <label
                class="btn-no-absolute"
                for="toggleInput"
                v-if="isUnFold && !isMoreThan7Line"
                >
          收起</label
              >

            </div>
          </div>

          首先,跟上面那篇文章里介紹的一樣,用input來記錄當(dāng)前是展開還是收起狀態(tài),

          不同點(diǎn)是我用了兩個(gè)label按鈕。

          一個(gè)label是不用定位的,直接跟在文字的末尾。這種是作為文字超過兩行,但是未超過七行,展開的狀態(tài)。

          前面的label則是絕對(duì)定位到文字盒子的末尾。作為 文字超過兩行未展開,展開后文字超過七行的情況。

          可以看下css的實(shí)現(xiàn)

          .activity-desc-wrapper {
            display: flex;
            .toggleInput {
              display: none;
            }
            .toggleInput:checked + .activity-desc {
              -webkit-line-clamp7;
            }

            .activity-desc {
              padding0;
              position: relative;
              margin-top7px;
              font-size24px;
              font-weight400;
              color#8a8f99;
              line-height1.2;

              display: -webkit-box;
              overflow: hidden;
              -webkit-line-clamp2;
              -webkit-box-orient: vertical;

              .btn {
                position: absolute;
                padding0 3px 0 7px;
                font-weight400;
                bottom0px;
                right0;
                line-height1.2;
                font-size24px;
                color#939fe1;
                background#f5f7fa;
                &::before {
                  content'...';
                  color#8a8f99;
                  transformtranslateX(-100%);
                }
              }
              .btn-no-absolute {
                float: none;
                font-size24px;
                font-weight400;
                color#939fe1;
              }
            }
          }

          我的方案的另一個(gè)重點(diǎn)在于「判斷文字是否超過2行和七行」,這個(gè)就在于獲取文字的實(shí)際高度是多少,一開始以為是沒辦法獲取的,只能獲取到省略后的文字高度,在隨便調(diào)試了一下之后,發(fā)現(xiàn)「scrollHeight」屬性就可以獲取到盒子的實(shí)際高度了,

          mounted() {
            // 判斷文案實(shí)際行數(shù)
            this.$nextTick(() => {
              const height = this.$refs.descBox.scrollHeight;
              const lineHeight = +window
                .getComputedStyle(this.$refs.descBox)
                .lineHeight.match(/\d+\.*\d+/g)[0];
              this.isMoreThan7Line = height / lineHeight > 7;
              this.isMoreThan2Line = height / lineHeight > 2;
            });
          },

          完美,收獲了一幫小迷妹。

          總結(jié)

          1. 跟在文字后面的按鈕可以不設(shè)置定位
          2. 處于文字行數(shù)末尾的按鈕可以設(shè)置絕對(duì)定位然后
          3. 行數(shù)的判斷可以用scrollHeight屬性
          4. 利用偽元素來模擬省略號(hào)...

          回憶起從前,我的心總是默默的等候

          你曾經(jīng)說你 想找一個(gè)依靠

          等了好幾天 等你的留言 卻發(fā)現(xiàn)是空白一片

          站在鏡子前 是不是我的樣子有點(diǎn)丑

          技術(shù)交流群


          我組建了技術(shù)交流群,里面有很多 大佬,歡迎進(jìn)來交流、學(xué)習(xí)、共建?;貜?fù)加群即可。


             “分享、點(diǎn)贊、在看” 支持一波??

          瀏覽 70
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草在线视频免费播放 | 丁香五月小说 | 性色国产成人久久久精品 | 亚洲正在视频 | 小嫩嫩虎白無毛在线 |