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