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-clampEdge
プレフィックス
v79から-webkit-line-clampSafari
プレフィックス
v5から-webkit-line-clampSafari (iOS)
プレフィックス
v4.2から-webkit-line-clampFirefox
プレフィックス
v68から-webkit-line-clamp