フレックスレイアウトが子要素によって引き伸ばされたときに、コンテンツをコンテナ内に保持する方法

フレックスレイアウトが子要素によって引き伸ばされたときに、コンテンツをコンテナ内に保持する方法

モバイル デバイスでは、フレックス レイアウトが非常に便利です。デバイスの幅に応じてコンテナーの幅を自動的に調整できます。しかし、最近、プロジェクトに取り組んでいるときに問題が見つかりました。

li 要素には flex が設定されており、flex: 0 0 33.333% です。子要素のテキストは、flex で定義された幅を超えると自動的に省略されます。

<li>
    <a href="">
        <img src="upload/2022/web/5a1692eeN105a64b4.png" alt=""> 
        <p>Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi Xiaomi</p>
    </a>
</li>
ul{
     ディスプレイ: フレックス;
}
li{
    -webkit-box-flex: 0;
    -msフレックス: 0 0 33.333%;
    フレックス: 0 0 33.333%;
    テキスト配置: 中央;
    パディング: 0 1.333vw;
    -webkit-box-sizing: 境界線ボックス;
    ボックスのサイズ: 境界線ボックス;
    マージン下部: 2.667vw;
}
リップ{
    フォントサイズ: 3.2vw;
    色: #8F8E94;
    テキストオーバーフロー: 省略記号;
    空白: ラップなし;
}

この時点で、p のテキストは非常に長くなり、一部のデバイスでは非表示にする必要があることがわかります。つまり、テキストは折り返されず、省略記号がマークとして残ります。

ここでは、text-overflow: ellipsis が機能せず、省略記号がまったく表示されないことがわかります。また、nowrap が設定されているため、テキストがコンテンツを拡大し、コンテンツが画面を超えてしまうことがわかります。したがって、この問題を解決する必要があります。

親要素 .li の flex: 0 0 33.33% をキャンセルしようとしましたが、機能しません。

ul コンテナの display: flex をキャンセルしてみると、省略記号が表示されます。

そのため、フレックスレイアウトの問題であると推測され、さらに省略記号によって親要素の幅を制限する必要があるのではないかと推測されます。

親要素 li に width: 100% を設定しようとしても機能しませんが、width: 0 を設定すると機能します。今すぐ:

li{
    フレックス: 0 0 33.333%;
    幅: 0
}

幅が設定されていない場合、li は子ノードによって無限に拡張される可能性があります。したがって、p には常にすべてのテキストを 1 行に表示するのに十分な幅があり、切り捨て効果はトリガーされません。効果をテストする別の方法があります:

li{
    フレックス: 0 0 33.333%;
    オーバーフロー: 非表示;
}

上記の 2 つの方法では、目的の効果が得られます。つまり、li に flex 値を設定すると、親コンテナーの残りの幅が動的に取得され、独自の子要素によって引き伸ばされなくなります。

  • html および body 要素に max-width を設定すると、ページ幅が強制されるようです。
  • body にオーバーフローを設定すると、ページ幅は拡張できませんが、要素の幅は残ります。つまり、要素自体は依然としてオーバーフローします。
  • html と body に max-width と overflow を同時に設定します。ページの幅は max-width に制限されますが、要素自体は依然としてオーバーフローします。
  • .main コンテナに overflow: hidden を設定します。同様に、.main はオーバーフローしませんが、.notice 自体はオーバーフローします。
  • .notice 要素に width または max-width を設定すると、幅は制限されますが、省略記号... が特定の幅で完全に表示されず、2 つのドットだけが表示されることがあります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  HTMLドキュメントタイプの詳細な説明

>>:  弾力性のあるナビゲーション効果を実現するJavaScript

推薦する

Xtrabackup を使用して MySQL をバックアップおよび復元する方法

目次1. バックアップ1.1 万全の準備1.2 追加の準備2 バックアップとリカバリ2.1 データの...

Linux での Redis の永続性、マスター スレーブ同期、Sentinel の詳細な説明

1.0 Redis の永続性Redis はメモリ内データベースです。サーバー プロセスが終了すると、...

MySQLデータの挿入、更新、削除の詳細

目次1. 挿入2. 更新3. 削除1. 挿入 顧客に挿入( 顧客.顧客住所、 顧客.cust_cit...

webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます

TypeScript バンドルwebpack 統合通常、実際の開発では、ビルド ツールを使用してコー...

リアルタイムクロックを実装するネイティブJS

ネイティブ JS で実装したリアルタイム クロック エフェクトを共有します。エフェクトは以下のとおり...

CentOS 7.x に ZSH ターミナルをインストールする方法

1. 基本コンポーネントをインストールするまず、 yumコマンドを実行して、コードpullために必要...

Docker を使用した Laravel アプリケーションのデプロイ例

この記事で使用されているPHPベースイメージはphp:7.3-apacheです。この記事の Lara...

Linuxコマンドをバックグラウンドで実行する方法

通常、ターミナルでコマンドを実行する場合、別のコマンドの入力を開始する前に、現在のコマンドが終了する...

MySQL 5.7.25 圧縮版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.25圧縮版のインストールと設定方法を参考までに紹介します。具体的な...

WeChatミニプログラムQRコード生成ツール weapp-qrcode 詳細説明

WeChat ミニプログラム - QR コード ジェネレーターダウンロード: weapp-qrcod...

LED を使って Linux カーネルを使い始める方法を探る

目次序文LEDトリガー探索を始めるLEDデバイス登録LEDディレクトリ類推によって理解するクラスディ...

複数のフィールドを変更するためのMysql更新の構文の詳細な分析

MySQL でレコードを更新すると、構文は正しいのですが、レコードが更新されません...質問文実行前...

ネイティブJSが様々なスポーツの均一な動きを実現

この記事では、ネイティブ JS で実装された均一なモーションを紹介します。その効果は次のとおりです。...

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

mysql5.7.21 utf8 エンコーディングの問題と Mac 環境での解決方法

1. 目標: mysql の character_set_server の値を latin1 から ...