LoginSignup
80
56

More than 3 years have passed since last update.

複数行テキストの末尾省略をCSSのみで実現する

Last updated at Posted at 2018-11-02

やりたいこと

複数行テキストの末尾を…(3点リーダー)で省略したい。
このとき、JavaScriptを使わずCSSだけで実現したい。

なんでCSSだけで?

JavaScriptで末尾省略する方法だとある程度の行数のコードを書かないといけない。
また、ライブラリを使う方法もあるが、バージョンアップやjQuery依存など考慮するべき点がいくつかある。

CSSで実現できれば上記のような心配が少なく、保守性を維持しやすいかと思いCSSだけで実現する方法を探した。

実現方法

CSS line-clamp を使う

display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;

メリット
- 少ない行数で実現できる
- 幅が可変でも変な隙間ができたりせず綺麗に表示できる

デメリット
- IE, Firefoxで未対応 → IEで未対応
- モバイル対応のみならば使える(Android版のFirefoxユーザーもいるが…)
- 使う場合はフォールバックも設定しておくのが望ましい。

参考: https://codepen.io/martinwolf/pen/qlFdp

追記 2019.08.29

祝! Firefox で対応されました。
スクリーンショット 2019-08-29 12.00.17.png
https://caniuse.com/#search=webkit-line-clamp

※ちなみに Firefox for Android ではまだ未対応なのでモバイル対応が必要な場合は注意

IE(に最低限の)対応版

IE は推奨していないけど、レイアウトが崩れるのは困るなーくらいの対応でいい場合に使えるサンプルを書いてみた。
IE の場合は…(3点リーダー)は表示されず、はみ出した文は非表示(hidden)になる。

See the Pen CSS line-clamp with IE compatible by Sho Ezawa (@ezawa800) on CodePen.

IEで見た場合

スクリーンショット 2019-08-30 17.48.21.png

IE以外でみた場合

スクリーンショット 2019-08-30 17.43.52.png

before, after要素を使う

.ellipsis {
    position: relative;
    height: 80px;
    overflow: hidden;
    line-height: 20px;
}

.ellipsis:before, .ellipsis:after {
    position: absolute;
    background: #fff;
}

.ellipsis:before {
    content: "・・・";
    bottom: 0;
    right: 0;
}

.ellipsis:after {
    content: "";
    width: 100%;
    height: 100%;
}

copied by http://blog.keisuke11.com/webdesign/word-trim/

メリット
- どのブラウザでも動作する

デメリット
- 行数は多めでハック感もややあり
- テキストの末尾と…(3点リーター)との間に隙間ができることがある(特に幅が可変のとき)

PC対応が必要でどうしてもFirefoxを外せない場合はこちら。
個人的には2つ目のデメリットが看過できないので使いたくない…。

まとめ

Firefoxさん!CSS line-clamp対応してくれー!
(IEはいいです)

ありがとう Firefox さん!
これで安心して line-clamp が使えます!

80
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
56