line-clamp

テキストを指定した行数で切り、末尾に「…」を付けるプロパティ。 JavaScriptで文字を削っていた複数行の省略を、CSSだけで書けます。

今の書き方

行数を指定すると、はみ出した部分を隠して「…」を付けられます。 文字は削らないため、全文がHTMLに残ります。

.excerpt {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}

以前の書き方

複数行の省略は一部のブラウザでしか使えなかったため、JavaScriptで1文字ずつ削り、3行に収まったところで「…」を付けていました。 画面幅が変わるたびに、元の文に戻してやり直す必要もありました。

.excerpt {
  line-height: 1.5;
  max-height: 4.5em;
  overflow: hidden;
}
for (const excerpt of document.querySelectorAll('.excerpt')) {
  const text = excerpt.textContent
  const clamp = () => {
    excerpt.textContent = text
    let end = text.length
    while (excerpt.scrollHeight > excerpt.clientHeight && end > 0) {
      end--
      excerpt.textContent = text.slice(0, end) + '…'
    }
  }
  clamp()
  window.addEventListener('resize', clamp)
}

置き換えるときの注意点

  • プレフィックスなしのline-clampは、まだどのブラウザの正式版でも使えません。 全ブラウザで使えるのは、2020年1月からの-webkit-line-clampです。
  • -webkit-line-clampは、display: -webkit-boxと-webkit-box-orient: verticalを組み合わせたときだけ効きます。 この3つの組み合わせは、プレフィックス付きでも仕様で定められていて、今後も使えます。
  • 要素の高さが行数分より高くなると、隠れるはずの行が見えてしまいます。 heightを指定せず、FlexboxやGridの中では引き伸ばされないようにします(align-items: flex-startなど)。 余白はpaddingではなく、marginか外側の要素に付けます。

Browser Support

  • Chrome

    プレフィックス
    v6から
    -webkit-line-clamp
  • Edge

    プレフィックス
    v79から
    -webkit-line-clamp
  • Safari

    プレフィックス
    v5から
    -webkit-line-clamp
  • Safari (iOS)

    プレフィックス
    v4.2から
    -webkit-line-clamp
  • Firefox

    プレフィックス
    v68から
    -webkit-line-clamp

機能名やコードで検索できます

例:aspect-ratio、:has()、padding-top

別の言葉や、プロパティ名で試してください

検索を読み込めませんでした