[CSSチュートリアル】Pure CSSカスタム複数行抜け問題(原理から実装まで)
テキストのオーバーフローをどのように表示するか、またそのニーズは何ですか?一行か複数行か?切り捨て、省略、カスタムスタイル、適応的な高さ?ここに答えがあります。複数行の省略を明らかにするために、原理から実装まで順を追って説明します。まずは、最もシンプルな1行のはみ出し省略である
ウォームアップ、一行抜け
これは、あまり魔法を使わない宇宙規模の統一解です
/* Principle: set text to not break lines, hide after overflow, truncate to show ellipsis */
.ellipsis {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
複数行の省略をどのように実装するか?まずは最も単純な
line-clamp
始めましょう。
最もシンプルな複数行の省略、ラインクランプ
CSS属性で
-webkit-line-clamp
ブロックコンテナの内容を指定された行数に制限することができます。
.ellipsis {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
属性は
-webkit
プレフィックスは、物事が単純ではなさそうなことを教えてくれる。そう、それは
webkit
カーネルは、非常にモバイルフレンドリーです。Android 2.3+、IOS 5.0+の端末では上記のコードをそのまま放り込めば問題ないのですが、PCで使う場合は互換性の問題に注意する必要があります。
PCとの互換性の問題に加え
line-clamp
そのため、省略記号の後にテキスト、矢印、その他のカスタムスタイルを追加する必要がある場合は、フロートなど他のオプションを検討する必要があります。
魔法の浮き輪「フロート
えっ!フロートで複数行の省略も実現できるんですか?はい、ここでは3つのフロートボックスを使って複数行の省略をシミュレートしています。まず、右側にフロートする3つのボックス(テキストボックス、プレースホルダーボックス、カスタムスタイルの省略ボックス)を用意し、原理をわかりやすくするために、ボックスに異なる背景色を追加しています。
<div class="box">
<! -- text box -->
<div class="box__text"> Tencent enriches the lives of Internet users with technology. Through communication and social software WeChat and QQ, it facilitates users' connections and helps them connect to digital content and lifestyle services at the snap of a finger. </div>
<! -- placeholder box -->
<div class="box__placeholder"></div>
<! -- Custom omitted boxes -->
<div class="box__more">... Expand</div>
</div>
<style>
.box__text {
width: 100%;
height: 60px;
line-height: 20px;
background-color: pink;
float: right;
}
.box__placeholder {
width: 60px;
height: 60px;
background-color: gray;
opacity: 0.8;
float: right;
}
.box__more {
width: 60px;
text-align: right;
background: yellow;
float: right;
}
</style>
次に、テキストボックスの左外側のマージンをマイナスにして、位置の調整を開始します。これは、ちょうどプレースホルダーボックスの幅になります。
.box__text {
margin-left: -60px;
}
これにより、プレースホルダー・ボックスのためのスペースが確保され、テキスト・ボックスと並んで左側にフロートすることになります。
上の画像では、テキストボックスの高さがプレースホルダーボックスの高さより低いため、1行目の高さはプレースホルダーボックスの高さとなり、1行目にはカスタム省略ボックスのためのスペースがなく、2行目にのみ配置することが可能です。テキスト ボックスの高さがプレースホルダー ボックスの高さより大きい場合(たとえば、テキストを 4 行で表示する場合)を想像してください。
1行目の高さはテキストボックスで押さえられ、1行目には省略されたボックスが入り込む余分なスペースができます。
すごーい! 次のステップは、プレースホルダーボックスと同じ行の右側に省略されたボックスを配置するだけです。
.box__more {
position: relative;
left: 100%;
transform: translate(-100%, -100%);
}
背景色を削除し、コンテナをオーバーフロー非表示に設定し、省略されたボックスにテキスト色とグラデーションを追加して、少し修正します。
.box {
position: relative;
overflow: hidden;
}
.box__more {
color: #1890ff;
background-image: linear-gradient(to left, white 40%, rgba(255, 255, 255, 0.8) 70%, transparent 100%);
}
要約すると、これは実際にfloatとBFCの原理を利用しています。
外側のボックスは
overflow: hidden
BFCを作成する、フローティングボックスの領域がBFCと重ならない、フローティング要素がBFCの高さの計算に関与する、フローティングボックスが現在の行の先頭または末尾にフローティングする、いくつかの位置決め技術を使用すると、複数行の省略の効果をシミュレートすることができます。
フローティングソリューションの利点は明確である。
- PC、モバイルの主要ブラウザに対応した高い互換性
- グラデーションを用いたカスタムテキスト省略スタイルに対応
楕円の領域は基本的にフローティングボックスなので、重なりを防ぐためにここにグラデーションが必要です。複雑な背景色を持つ一部の領域や、より強いカスタム楕円のニーズ(楕円を矢印や画像として定義するなど)には、圧倒的に見えるようになってきています。
省略されたスタイルのフルカスタマイズを実現する他の方法はないのでしょうか?
はい、カスタム省略ボックスは開いたままにしてください。
では、どのように脇を固めるのか?それは
line-clamp
. その
line-clamp
切り捨てられた省略記号
...
ちょうど、プレースホルダーに役立つように、どうにかしてデフォルトの省略記号を隠して、カスタムフローティングボックスに置き換えることができれば、うまくいくのではないでしょうか!?これが、次に取り上げるシナリオです。
フルカスタマイズ、フローティング+ラインクランプ
上記の考え方を整理してみると、以下の3つのポイントがあります。
の助けを借りて
line-clamp
デフォルトの省略記号、カスタム省略記号ボックスの位置を予約し、位置決め技術によって予約位置をカスタム省略記号ボックスで置き換えてデフォルトの省略記号を隠す方法を見つける。
それぞれを順番に見ていくと、まず予約位置である
line-clamp
デフォルトの省略記号の大きさは、フォントサイズによって決まります。
font-size
そのため、フォントサイズを調整することで、予約位置の大きさを制御することができます。ここでは、省略記号の大きさがフォントサイズにのみ影響されるようにするため、行の高さとテキストの間隔をリセットするために
.box__text {
position: relative;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
font-size: 60px;
line-height: 0;
letter-spacing: 0; /* Resets line height and text spacing to ensure that ellipsis occupancy is only affected by font size */
color: red; /* For demonstration purposes, we give the ellipsis a color first */
}
これにより、テキストボックスのフォントサイズのみを調整することで、予約省略ボックスの位置の大きさを制御することができます。このため
font-size
は継承されるので、その後、子ボックスをインライン化してフォントサイズをリセットします。
<div class="box__text">
<div class="box__inner">
Tencent enriches the lives of Internet users with technology. Through its communication and social networking software WeChat and QQ, Tencent facilitates users' connections and helps them connect to digital content and lifestyle services at the snap of a finger.
</div>
</div>
<style>
.box__inner {
font-size: 16px;
line-height: 20px;
color: #000;
vertical-align: top;
display: inline;
}
</style>
次のステップでは、省略記号を隠す方法を探します。これは、透明度や色の透明度を設定することで比較的簡単に行うことができます。
.box__text {
opacity: 0;
color: transparent;
}
省略記号が予約されたので、カスタム省略記号ボックスを予約された位置に配置する方法を考えなければなりませんが、どうすればいいでしょうか?あるいはフロートさせるか。を設定するので
-webkit-line-clamp
テキストボックスの高さを保持できない原因となっている、テキストの余分なコピーをレンダリングして高さを保持することで、位置決めにフロートを使用することができます。
高さ対応テキストをレンダリングするためのコンテナとして、絶対位置のボックスを用意する。
<div class="box__abs">
<div class="box__fake-text">
Tencent enriches the lives of Internet users with technology. Through its communication and social networking software WeChat and QQ, it facilitates users' connections and helps them connect to digital content and lifestyle services at the snap of a finger.
</div>
<div class="box__placeholder"></div>
<div class="box__more">... Expand</div>
</div>
<style>
.box__abs {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
</style>
次に、先ほどお話した3つのフローティングボックスを使って、複数行のはみ出し省略を実装します
.box__fake-text {
width: 100%;
margin-left: -60px;
line-height: 20px;
float: right;
color: transparent; /* text is meant to brace the height, with float to achieve multi-line overflow omission */
}
.box__placeholder {
width: 60px;
height: 60px;
float: right;
}
.box__more {
position: relative;
left: 100%;
transform: translate(-100%, -100%);
width: 60px;
text-align: right;
color: #1890ff;
float: right;
}
なお、ここでのテキストボックスは高さを保持するためのもので、表示する必要はないので、色を透明に設定しています。さて、最後のステップでは、背景色を削除し、外側のボックスをオーバーフローさせて非表示にすることで、次のような最終的な結果が得られます。
line-clamp
+ 行の高さと文字間隔をリセットし、外側のボックスのフォントサイズを調整するだけです。
font-size
エリプシスボックスを任意の矢印、画像、折り目、テキストに置き換えることができるので、もうUIガールが要求する心配はありません)。
今回は純粋なCSSカスタム複数行省略の問題点(原理から実装まで)についてご紹介しましたが、より関連するCSSカスタム複数行省略の内容はHouse of Scriptsの過去記事を検索するか、引き続き以下の関連記事を閲覧してください、今後ともHouse of Scriptsをよろしくお願いします!(`・ω・´)ゞ
関連
-
[CSSチュートリアル】CSSのクラスとidの共通命名規則
-
[CSSチュートリアル】CSSカウンターを使った数字の並びの美化方法
-
[CSSチュートリアル】ピュアCSSで実装した通知バーの3種類のスクロール効果
-
[CSSレイアウト例】CSSで中央揃えを実現する方法N種
-
[CSSチュートリアル】background-positionプロパティのパーセンテージ値の使い方を探る
-
[CSSチュートリアル】SVGを使ったCSSアニメーションでエネルギーフローを表現する
-
[CSSチュートリアル]実装ステップの吸引上部と下部のH5レイアウトのための純粋なCSSソリューション
-
原理を説明するためにいくつかの方法の虫眼鏡効果の模倣で[css3]css3
-
[CSSチュートリアル]フレックス内のボタンを縦に中央寄せにしない意外な解決法
-
[CSSチュートリアル】css3 背景画像 半透明 コンテンツ 不透明 方法例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[CSSチュートリアル】CSS+HTMLで実現するトップナビゲーションバー機能
-
[CSSチュートリアル】CSS擬似要素::マーカー解説
-
[CSSチュートリアル】CSSで炎のエフェクトを記述する方法
-
[css3]グレーモードやブラックモードを実現するCSS3フィルター(フィルター)サンプルコード(Webページ用
-
[CSSチュートリアル]CSS気まぐれボーダーアニメーション効果
-
[CSSチュートリアル】空間均等性の問題を解決する2つの方法
-
[CSSチュートリアル】カラフルで知的なシャドウ効果を実現するCSS
-
cssにおけるpx, em, rem, ptの特徴や違い、変換の詳細について
-
[CSSチュートリアル]アダプティブスクエアを実現するCSSの例
-
[css3]CSS3アニメーションによるグラフィックドロップ効果