floatプロパティの詳細

CSSのfloatプロパティを適切に使用することは、経験豊富なレイアウト設計者にとっても困難な作業です。 この記事では、実例とともに、floatのユースケースといくつかのエラーを収集します。







フロートとは何ですか?



CSSの一部の要素はブロック状であるため、新しい行で始まります。 たとえば、Pタグ付きの2つの段落を配置すると、それらは互いに下になります。 他の要素は「小文字」です。 ページに1行で表示されます。



要素をラップのタイプに再割り当てする1つの方法は、floatプロパティを使用することです。 典型的な例は、フロートを使用して画像を左または右に揃える場合です。 簡単なHTML画像と段落コードを次に示します。



<img src="http://lorempixum.com/200/200/" /> <p>Lorem ipsum...</p>
      
      





それらは新しい行から表示されます:







画像にCSSを追加します。

 img { float: right; margin: 20px; }
      
      







右揃えになります:







さらにテキストがある場合、段落は画像の周りに回ります:







画像とテキストの間に20ピクセルのインデントが必要だとしましょう。 この設計は機能しません。
 p {margin: 20px;}
      
      







それはまさにこのようなものです:

 img {margin: 20px;}
      
      











段落のインデントが機能しないのはなぜですか? それを把握するには、フレームを追加します。



 p { border: solid 1px black; }
      
      







結果はあなたを驚かせるかもしれません:







写真は段落内にあることがわかりました! したがって、マージンプロパティは最初のケースでは機能しません。 これを修正するには、float:leftを段落に適用し、絶対幅を指定します。



 img { float: right; margin: 20px; } p { float: left; width: 220px; margin: 20px; }
      
      











奇妙なフロート規則





浮動オブジェクトのより複雑な使用法、つまり浮動オブジェクトを管理するルールに移りましょう。 これは、画像ギャラリーのレイアウトで必要になる場合があります。 例:



 <ul> <li><img src="1450823466601083332032"/></li> <li><img src="http://placehold.it/100x150&text=2"/></li> <li><img src="1450823466394721548724"/></li> <li><img src="1450823466376067888878"/></li> <li><img src="1450823466279266032276"/></li> <li><img src="http://placehold.it/100x150&text=6"/></li> <li><img src="http://placehold.it/100x100&text=7"/></li> </ul>
      
      







デフォルトでは、リスト内の各アイテムは新しい行に表示されます。 float:をそれぞれに適用すると、画像は1行に改行付きで表示されます。



 li { float: left; margin: 4px; }
      
      











しかし、画像の高さが異なる場合はどうでしょうか?







リスト項目に単一行の表示を追加すると、少しきれいになります。



 li { display: inline; }
      
      











そして今、垂直に整列します:



 img { vertical-align: top; }
      
      











画像の高さが高い場合、残りの画像は前の画像の1つだけを流れることに注意してください。たとえば、







要素の順序を変更する例-たとえば、要素のリストが順番にあります。

 <ul> <li><img src="1450823466601083332032"/></li> <li><img src="http://placehold.it/100x100&text=2"/></li> <li><img src="1450823466394721548724"/></li> <li><img src="1450823466376067888878"/></li> <li><img src="1450823466279266032276"/></li> <li><img src="http://placehold.it/100x100&text=6"/></li> </ul>
      
      







逆順に並べたい場合は、float:leftの代わりにfloat:rightを使用します。HTMLの順序を変更する必要はありません。







floatを使用すると、ページ上の要素をグループ化するのに便利ですが、大きな問題は、後続の要素(テキストまたはブロック)も折り返しプロパティを取得することです。 たとえば、写真のブロックがあります。







その下のテキストがブロック全体に回り始めます:







これを回避するには、clearプロパティを使用する必要があります。 2番目の画像に該当する場合:



 ul li:nth-child(2) { clear: left; }
      
      







ここに到達します:







この場合、残りの画像はfloat:leftを継承し続けます。 したがって、テキストは不器用に表示されます。







明確に適用する必要があります:両方の段落に:



 p { clear: both; }
      
      







私たちの問題は解決されました:







ここで、前の例のギャラリーの背景を設定する必要があるとします。 要素が浮いていない場合、次のようになります。



 ul { background: gray; }
      
      











しかし、float:をリスト項目に適用すると、背景は完全に消えます:







ULの高さを最初に設定した場合:



 ul { height: 300px; }
      
      











これも問題を解決しません。なぜなら、 背景寸法は絶対的です。 clearfixクラスが役立ちます。これは、UL要素と同じレベルのdivに適用されます。



 .clearfix { clear: both; }
      
      







オーバーフローを使用する別のソリューションがあります:



 ul { overflow: auto; }
      
      











float要素の9つのルール:





  1. フローティング要素は、親コンテナの端を超えて拡張できません。
  2. 各浮動要素は、float:leftの場合は前の要素の右または下に表示され、float:rightの場合は左および下に表示されます。
  3. float:leftのブロックは、float:rightのブロックよりも右にはできません。
  4. フローティング要素は、コンテナの上部境界を超えて拡張できません。
  5. フロートは、親ブロックまたは前のフロートより高くすることはできません。
  6. フローティング要素は、インライン要素の前の行より高くすることはできません
  7. フローティングブロックはできるだけ高く配置する必要があります。
  8. 1つの浮動要素は、次の要素に続き、コンテナの制限を超えることはできません。次の行にラップされます。
  9. float:leftのブロックは可能な限り左に、float:rightのブロックは可能な限り右に配置する必要があります。



All Articles