《文本溢出截斷省略》方案合集

本文首發(fā)于政采云前端團隊博客:可能是最全的 “文本溢出截斷省略” 方案合集

https://www.zoo.team/article/text-overflow

單行文本溢出省略

核心CSS語句

overflow:hidden;
/*設(shè)置文字在一行荸镊,不換行*/
white-space:nowrap; 
/*文本溢出時奋早,顯示省略符號來代表被修剪的文本*/
text-overflow:ellipsis;
  • 優(yōu)點

    • 無兼容性問題
    • 響應(yīng)式截斷
    • 文本溢出范圍才顯示省略符號逾苫,否則不顯示省略號
  • 短板

    • 只支持單行文本截斷

適應(yīng)場景

  • 適用單行文本溢出省略號的情況

Demo

<style>
  .demo{
    overflow:hidden;
    white-space:nowrap;
    text-overflow:ellipsis;    
  }
</style>
<body>
  <div class='demo'>這是一段很長很長的文本</div>
</body>

多行文本溢出省略

CSS實現(xiàn)方案

/*限制在一個塊元素內(nèi)顯示的行數(shù),2表示最多顯示2行粮彤,為了實現(xiàn)該效果,他需要組合其他的webkit屬性*/
-webkit-line-clamp:2;
/*和上面的結(jié)合使用,將對象作為彈性伸縮盒子模型顯示*/
display:-webkit-box;
/*設(shè)置或檢索伸縮盒子的子元素的排列方式*/
-webkit-box-orient:vertical;
overflow:hidden;
text-overflow:ellipsis
  • 優(yōu)點
    • 響應(yīng)式截斷
    • 文本溢出范圍才顯示省略號,否則不顯示省略號
    • 省略號顯示位置剛好
  • 短板
    • 兼容性一般:-webkit-line-clamp屬性只有webkit內(nèi)核的瀏覽器才支持
WX20200103-175632@2x.png

適用場景

  • 多適用于移動端頁面 馁龟,因為移動設(shè)備瀏覽器更多是基于Webkit內(nèi)核
<style>
  display:-webkit-box;
  overflow:hidden;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
</style>
<body>
 <div class='demo'>這是一段很長很長的文本</div>
</body>

基于Javascript的實現(xiàn)方案

  • 優(yōu)點

    • 無兼容性問題
    • 響應(yīng)式截斷
    • 文本溢出范圍才顯示省略號,否則不顯示省略號
  • 短板

    • 需要JS實現(xiàn)漆魔,背離展示和行為相分離原則
    • 文本為中英文混合時坷檩,省略號顯示位置略有偏差

適用場景

  • 適用于響應(yīng)式截斷却音,多行文本溢出省略的情況

Demo

當前僅適用于文本為中文,若文本中有英文矢炼,可自行修改

<script type="text/javascript">
    const text = '這是一段很長的文本';
    const totalTextLen = text.length;
    const formatStr = () => {
        const ele = document.getElementsByClassName('demo')[0];
        const lineNum = 2;
        const baseWidth = window.getComputedStyle(ele).width;
        const baseFontSize = window.getComputedStyle(ele).fontSize;
        const lineWidth = +baseWidth.slice(0, -2);

        // 所計算的strNum為元素內(nèi)部一行可容納的字數(shù)(不區(qū)分中英文)
        const strNum = Math.floor(lineWidth / +baseFontSize.slice(0, -2));

        let content = '';

          // 多行可容納總字數(shù)
        const totalStrNum = Math.floor(strNum * lineNum);

        const lastIndex = totalStrNum - totalTextLen;

        if (totalTextLen > totalStrNum) {
            content = text.slice(0, lastIndex - 3).concat('...');
        } else {
            content = text;
        }
        ele.innerHTML = content;
    }

    formatStr();

        window.onresize = () => {
        formatStr();
    };
</script>

<body>
    <div class='demo'></div>
</body>

多行文本溢出省略(按照高度)

  • 多行文本溢出不顯示省略號

    • 核心CSS語句
overflow:hidden;
line-height:20px;
max-height:40px;
  • 優(yōu)點

    • 無兼容性問題
    • 響應(yīng)式截斷
  • 短板

    • 單純截斷文字系瓢,不展示省略號,觀感上較為生硬

使用場景

  • 適用于文本溢出不需要省略號的情況
<style>
    .demo {
        overflow: hidden;
        max-height: 40px;
        line-height: 20px;
    }
</style>

<body>
    <div class='demo'>這是一段很長的文本</div>
</body>

偽元素 + 定位實現(xiàn)多行省略

  • 核心 css 語句

    • position: relative; (為偽元素絕對定位)
    • overflow: hidden; (文本溢出限定的寬度就隱藏內(nèi)容)
    • position: absolute;(給省略號絕對定位)
    • line-height: 20px; (結(jié)合元素高度,高度固定的情況下,設(shè)定行高, 控制顯示行數(shù))
    • height: 40px; (設(shè)定當前元素高度)
    • ::after {} (設(shè)置省略號樣式)
  • 優(yōu)點
  • 無兼容性問題
  • 響應(yīng)式截斷
  • 短板
    • 無法識別文字的長短句灌,無論文本是否溢出范圍夷陋,一直顯示省略號
    • 省略號顯示可能不會剛剛好,有時會遮住一半文字

適用場景

  • 適用于對省略號效果要求較低胰锌,文本一定會溢出元素的情況
<style>
    .demo {
        position: relative;
        line-height: 20px;
        height: 40px;
        overflow: hidden;
    }
    .demo::after {
        content: "...";
        position: absolute;
        bottom: 0;
        right: 0;
        padding: 0 20px 0 10px;
    }
</style>

<body>
    <div class='demo'>這是一段很長的文本</div>
</body>

利用 Float 特性骗绕,純 CSS 實現(xiàn)多行省略

  • 核心 CSS 語句

    • ine-height: 20px;(結(jié)合元素高度,高度固定的情況下,設(shè)定行高, 控制顯示行數(shù))
    • overflow: hidden资昧;(文本溢出限定的寬度就隱藏內(nèi)容)
    • float: right/left爹谭;(利用元素浮動的特性實現(xiàn))
    • position: relative;(根據(jù)自身位置移動省略號位置, 實現(xiàn)文本溢出顯示省略號效果)
    • word-break: break-all榛搔;(使一個單詞能夠在換行時進行拆分)
  • 優(yōu)點

    • 無兼容問題
    • 響應(yīng)式截斷
    • 文本溢出范圍才顯示省略號,否則不顯示省略號
  • 短板

    • 省略號顯示可能不會剛剛好东揣,有時會遮住一半文字

適用場景

+ 適用于對省略效果要求較低践惑,多行文本響應(yīng)式截斷的情況
<style>
    .demo {
        background: #099;
        max-height: 40px;
        line-height: 20px;
        overflow: hidden;
    }
    .demo::before{
        float: left;
        content:'';
        width: 20px;
        height: 40px;
    }

    .demo .text {
        float: right;
        width: 100%;
        margin-left: -20px;
        word-break: break-all;
    }
    .demo::after{
        float:right;
        content:'...';
        width: 20px;
        height: 20px;
        position: relative;
        left:100%;
        transform: translate(-100%,-100%);
    }
</style>

<body>
    <div class='demo'>這是一段很長的文本</div>
</body>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嘶卧,隨后出現(xiàn)的幾起案子尔觉,更是在濱河造成了極大的恐慌,老刑警劉巖芥吟,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侦铜,死亡現(xiàn)場離奇詭異,居然都是意外死亡钟鸵,警方通過查閱死者的電腦和手機钉稍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棺耍,“玉大人贡未,你說我怎么就攤上這事∶膳郏” “怎么了俊卤?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長害幅。 經(jīng)常有香客問我消恍,道長,這世上最難降的妖魔是什么以现? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任狠怨,我火速辦了婚禮约啊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘取董。我一直安慰自己棍苹,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布茵汰。 她就那樣靜靜地躺著枢里,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹂午。 梳的紋絲不亂的頭發(fā)上栏豺,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音豆胸,去河邊找鬼奥洼。 笑死,一個胖子當著我的面吹牛晚胡,可吹牛的內(nèi)容都是我干的灵奖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼估盘,長吁一口氣:“原來是場噩夢啊……” “哼瓷患!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遣妥,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤擅编,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后箫踩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爱态,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年境钟,在試婚紗的時候發(fā)現(xiàn)自己被綠了锦担。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡吱韭,死狀恐怖吆豹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情理盆,我是刑警寧澤痘煤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站猿规,受9級特大地震影響衷快,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姨俩,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一蘸拔、第九天 我趴在偏房一處隱蔽的房頂上張望师郑。 院中可真熱鬧,春花似錦调窍、人聲如沸宝冕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽地梨。三九已至,卻和暖如春缔恳,著一層夾襖步出監(jiān)牢的瞬間宝剖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工歉甚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留万细,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓纸泄,卻偏偏與公主長得像赖钞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子聘裁,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345