CSSフロートの特性についての簡単な説明

CSSフロートの特性についての簡単な説明

この記事では、CSS フロートの特徴を紹介します。皆さんと共有し、自分用のメモとして残したいと思います。

フロートには次のプロパティがあります。

  1. テキストをカバーできません
  2. フローティング要素の後にブロックレベル要素が続かない場合は、次の要素がフローティング要素と並んで配置されます(要素の幅が設定されていない場合、画面に収まらない場合は折り返されます)。
  3. フローティング要素の前の要素がフローティングでない場合、フローティング要素は現在の行にのみフローティングします。フローティング要素がフローティング要素に遭遇すると、スペースが残っていない限り、1 行に並べられます。
  4. 要素の配置値が絶対または固定に設定されている場合、フローティングは無視されます。
  5. floatは親要素の高さを縮小します
  6. フローティング要素は次の要素の margin-top の影響を受けます。

テキストをカバーできません

<スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
       div{
           幅:100ピクセル;
           高さ:100px;
       }
        .item1{
            フロート:左;
            背景色: ピンク;
        }
        .item2{
            背景色: #58d3e2;
        }
    </スタイル>
<div class="item1">アイテム1</div>
<div class="item2">アイテム2</div> 

ご覧のとおり、テキストを除いて、item2 の div の他のすべてのコンテンツは、item1 の下で実行されるため表示されません。テキストがフローティング要素で覆われないのはなぜですか?フローティングの本質はテキストの折り返しを実現することだからです。

また、上記から、フローティング要素の後のブロックレベル要素がフローティング要素の位置を占め、フローティング要素は常に標準フロー要素の上にあると結論付けることができます。

フローティング要素の後にブロックレベル要素が続かない場合は、次の要素がフローティング要素と並んで配置されます(要素の幅が設定されていない場合、画面に収まらない場合は折り返されません)。

<スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
       div{
           幅:100ピクセル;
           高さ:100px;
       }
        .item1{
            フロート:左;
            背景色: ピンク;
        }
        .item2{
            表示: インラインブロック;
            背景色: #58d3e2;
        }
    </スタイル>
<div class="item1">アイテム1</div>
<div class="item2">アイテム2</div> 

フローティング要素の前の要素がフローティングでない場合、フローティング要素は現在の行にのみフローティングします。フローティング要素がフローティング要素に遭遇すると、スペースが残っていない限り、1 行に並べられます。

<スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
       div{
           幅:100ピクセル;
           高さ:100px;
       }
        .item1{
            背景色: ピンク;
        }
        .item2{
            フロート:左;
            背景色: #58d3e2;
        }
    </スタイル>
<div class="item1">アイテム1</div>
<div class="item2">アイテム2</div>
<div class="item3">アイテム3</div> 

 <スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
       div{
           幅:400ピクセル;
           高さ:100px;
           フロート: 左;
       }
        .item1{
            背景色: ピンク;
        }
        .item2{
            背景色: #58d3e2;
        }
        .item3{
            背景色: #61dafb;
        }
        .item4{
            背景色: #e9203d;
        }
    </スタイル>
<div class="item1">アイテム1</div>
<div class="item2">アイテム2</div>
<div class="item3">アイテム3</div>
<div class="item4">項目4</div> 

適応を実現するために幅をパーセンテージで設定できます

 div{
           幅:25%;
           高さ:100px;
           フロート: 左;
       } 

要素の配置値が絶対または固定に設定されている場合、フローティングは無視されます。

<スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
       div{
           位置: 絶対;
           フロート: 左;
           幅:100ピクセル;
           高さ:100px;
           境界線: 1px 実線の赤;
       }
    </スタイル>
 <div class="item1">フローティングとポジショニングの融合</div> 

インライン要素がフローティングを使用すると、ブロック ボックスが生成され、幅、高さ、マージン、パディングなどの属性を使用できるようになります。

 <スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
       [クラス^='アイテム']{

           フロート: 左;
           幅:100ピクセル;
           高さ:100px;
           行の高さ: 100px;
           テキスト配置: 中央;
       }
        .item1{
            フロート: 左;
            背景色: ピンク;
        }
        .item2{
            表示: インラインブロック;
            背景色: #58d3e2;
        }

    </スタイル>
<span class="item1">アイテム1</span>
<div class="item2">アイテム2</div> 

floatは親要素の高さを縮小します

Web デザインでは、コンテンツに div をラッピング コンテナーとして割り当てることが非常に一般的です。このラッピング コンテナーは高さを設定せず、内部のコンテンツによってラッピング コンテナーの高さが拡張されます。子要素にフローティングを設定しない場合は問題ありません。ただし、子要素にフローティングを設定すると、親要素はフローティング要素の高さに適応できず、親要素の高さが 0 になるため、背景色などが表示されなくなります。理由は次のとおりです。

div の高さは事前に設定されていないため、div の高さは、含まれる子要素の高さによって決まります。フローティングはドキュメントフローの外側にあるため、子要素の高さは計算されません。このとき、div 内の子要素の高さは 0 に相当するため、親要素の高さが崩れてしまいます。

   <スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }

        。アイテム{
            フロート: 左;
            幅:100ピクセル;
            高さ:100px;
            背景色: ピンク;
        }

    </スタイル>
   <div class="box">
       <div class="item"></div>
   </div> 

解決:

1. 親要素に「overflow:hidden」を追加する

もちろん「overflow:auto」にすることもできます。ただし、IE との互換性を保つには、overflow:hidden を使用するのが最適です。

。箱{
  オーバーフロー:非表示;
}

では、なぜ「overflow:hidden」がこの問題を解決するのでしょうか?

これは、「overflow:hidden」が BFC をトリガーし、それが「height:auto」の計算方法を決定するためです。

つまり、BFC の高さを計算するときに、フローティング要素も計算に含まれるため、このとき親要素はフローティング要素の高さに適応します。

そのため、「display:inline-block」、「position:absolute」、「float:left」を設定することで、親要素の高さの崩れの問題を解決することもできます。 BFC を作成できれば、フローティングの子要素をラップする効果を実現できるからです。そのため、インターネット上では「BFC はフローティング要素をラップできる」と言われています。

2. 親要素のコンテンツの後ろまたは前に疑似要素を追加し、フローティングをクリアする

::before または ::after を使用して親要素のコンテンツに疑似要素を追加し、そのコンテンツを空にして位置を占有しないようにすることができます。最後に、疑似要素に「clear:both」を追加してフロートをクリアします。

 <スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
        .box::after{
            コンテンツ: '';
            表示: ブロック;
            クリア:両方;
        }
        。アイテム{
            フロート:左;
            幅:100ピクセル;
            高さ: 100px;
            背景色: ディープピンク;
        }

    </スタイル>
<div class="box">
    <div class="item"></div>
</div>

なぜこれが可能なのでしょうか?

その理由を理解するには、2 つの点を知る必要があります。1 つは疑似要素の実際の機能であり、もう 1 つは CSS のフロートのクリアは要素自体にのみ影響し、他の要素には影響しないため、フロートのクリアは水平方向の配置を崩すものとして理解できるということです。

まず、::after と ::before の役割を理解する必要があります。これらは、要素の前後に疑似要素を挿入するのではなく、要素のコンテンツ (要素内) の前後に疑似要素を挿入します。以前は、:before 疑似要素と :after 疑似要素によって挿入されるコンテンツは、ターゲット要素の前または後に挿入されるものだと思っていました。実際には、挿入されるコンテンツは、関連付けられたターゲット要素の子要素になりますが、この要素のコンテンツの「前」または「後」に配置されます。例を見てみましょう。.box の高さが 300px であることがわかります。これは、2 つの疑似要素が .box コンテンツに挿入されていることを意味します。

<スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
        .box::before{
            コンテンツ: 'before';
            高さ: 100px;
            幅: 100ピクセル;
            表示: ブロック;
            クリア:両方;
            背景色: #61dafb;
        }
        .box::after{
            コンテンツ: 'after';
            幅:100ピクセル;
            高さ:100px;
            表示: ブロック;
            クリア:両方;
            背景色: アクアマリン;
        }
        。アイテム{
            フロート:左;
            幅:100ピクセル;
            高さ: 100px;
            背景色: ディープピンク;
        }

    </スタイル>
<div class="box">
    <div class="item"></div>
</div> 

まとめると、浮動小数点をクリアするために、以下の方法がよく使用されます。

.box::after{
  コンテンツ:'';
  表示:ブロック;
  クリア:両方;
}
または.box::before{
  コンテンツ:'';
  表示:ブロック;
  クリア:両方;
}
または.box::before,.box::after{
  コンテンツ:'';
  表示:ブロック;
  クリア:両方;
}
//::before と ::after は、content 属性で使用する必要があります。content は、挿入されるコンテンツを定義するために使用されます。content には値があるか、少なくとも空である必要があります。デフォルトでは、疑似要素の表示はデフォルト値の inline ですが、display:block を設定することで変更できます。

親要素のコンテンツの前後に疑似要素を挿入します。コンテンツを空に設定すると、コンテンツが位置を占有しなくなります (高さは 0)。 「clear:both」は親要素の左と右のフロートをクリアし、フローティング要素に遭遇したときに .box::before と .box::after がラップされるようにして、高さが拡張されます。親要素はこの高さに適応するため、高さが崩れることはありません。

高さの崩壊を解決する他の方法は、これら 2 つのアイデアに基づいています。1 つは BFC をトリガーすること、もう 1 つは要素 + クリア フロート (clear) を追加することです。

フローティング要素は次の要素の margin-top の影響を受けます。

<スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
        div{
            幅:100ピクセル;
            高さ:100px;
        }
        div:n番目の型(1){
            フロート: 左;
            背景色: #61dafb;
        }
        div:n番目の型(2){
            上マージン: 100px;
            背景色: #58d3e2;
        }

    </スタイル>
<div>div1</div>
<div>div2</div>

最初の div も下に続いているのがわかります。解決策は、次の要素に clear を設定することです。このとき、次の要素の margin-top は無効になります。

<スタイル>
        本文、div{
            マージン:0;
            パディング:0;
        }
        div{
            幅:100ピクセル;
            高さ:100px;
        }
        div:n番目の型(1){
            フロート: 左;
            背景色: #61dafb;
        }
        div:n番目の型(2){
            クリア:両方;
            上マージン: 100px;
            背景色: #58d3e2;
        }

    </スタイル>
<div>div1</div>
<div>div2</div> 

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

<<:  MySQL スロークエリログの役割と公開

>>:  フロントエンドJavaScriptの約束

推薦する

vuexの強制リフレッシュによるデータ損失問題の分析

vuex 永続状態基本原則: すべての vuex データをローカルストレージに保存し、ページが更新さ...

MySQL シリーズ 12 バックアップとリカバリ

目次チュートリアルシリーズ1. バックアップ戦略の説明1. バックアップの種類2. バックアップで考...

Docker を使用した Redis マスタースレーブレプリケーションの実践の詳細説明

目次1. 背景2. 操作手順3. Dockerをインストールする4. 主なサービス構成5. サービス...

無効にするとフォームの入力が送信できない問題の解決方法

以前、追加と変更を一緒に記述したテストプログラムを書いたことがあります。変更が必要な場合は、フォーム...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

画像の半透明処理 画像と半透明の背景の実装のアイデアとコード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

MySQL 集計統計データの低速クエリの最適化

前面に書かれた注文テーブル、アクセス記録テーブル、商品テーブルなど、日常生活でデータベースを操作する...

JD.com フラッシュセール効果を実現する JavaScript

この記事では、JD.comのフラッシュセール効果を実現するためのJavaScriptの具体的なコード...

HTML の順序なしリストタグと順序付きリストタグの使用例

1. 上部と下部のリストタグ: <dl>..</dl>:上dt下層dd: カ...

MySQL DATEDIFF 関数を使用して 2 つの日付間の時間間隔を取得する方法

説明する2 つの日付間の時間間隔を返します。文法DateDiff(間隔、日付1、日付2 [、週の最初...

WeChatミニプログラムが星評価を実装

この記事では、WeChatアプレットで星評価を実装するための具体的なコードを参考までに紹介します。具...

DockerはPruneコマンドを使用してnoneイメージをクリーンアップします

目次無イメージの創造と混乱Noneオブジェクトをクリーンアップする方法トリムミラーコンテナで使用され...

nginxを使用してドメイン名ベースの仮想ホストを構成する

1. 仮想ホストとは何ですか?仮想ホストは、特殊なテクノロジーを使用して、実行中のサーバーを論理的に...

HTML外部参照CSSファイルが効果を発揮しない理由の分析と解決

フロントエンドの初心者として、私は数日間フロントエンドをいじってみました。 。今日、私は自分が固く信...

Vue.js ディレクティブのカスタム命令の詳細な説明

デモコマンドをカスタマイズするVue カスタム ディレクティブの構文は次のとおりです。 Vue.di...