ホームページ  >  記事  >  ウェブフロントエンド  >  CSSクリアフロートは何をするのですか?フロートをクリーンアップする方法 (概要)

CSSクリアフロートは何をするのですか?フロートをクリーンアップする方法 (概要)

青灯夜游
青灯夜游オリジナル
2018-09-17 11:21:356237ブラウズ

フロントエンド開発のプロセスでは、float をよく使用しますが、これは私たちが好きでも嫌いでもある属性です。フローティングによって簡単にレイアウトできるので気に入っていますが、フローティング後に解決すべき問題が多すぎるため嫌いです。この章では、CSS がフロートをクリアする理由とフロートをクリアする方法、および CSS でフロートを削除するいくつかの方法を紹介します。困っている友人は参考にしていただければ幸いです。

#1. なぜ浮くのですか?

フローティング (float) の最も基本的な理由は、テキストの折り返し効果を実現するためです。後に、これをレイアウトに使用すると、いくつかの欠点を補うことができることがわかりました。従来のレイアウトでは非常に便利です。

2. float をクリアする必要があるのはなぜですか?

Float (float) は、フローティング ボックスが別のフローティング ボックスまたはその外端にあるボックスを含むボックスに遭遇するまで左右に移動するように制御できます。フローティング ボックスはドキュメント フロー内の通常のフローに属しません。要素がフローティングされると、ブロック レベルの要素のレイアウトには影響しませんが、インライン要素のレイアウトにのみ影響します。このとき、ドキュメント フローの通常のフローでは、フローティング ボックスのレイアウト モードが同じではないことがわかります。包含ボックスの高さがフローティング ボックスよりも小さい場合、「高さの崩壊」が発生します。

CSSクリアフロートは何をするのですか?フロートをクリーンアップする方法 (概要)

上の図の親要素の高さはパディングの効果であり、親要素は高く設定されていません。

親要素の高さが設定されていない場合:


  • 親要素内の子要素が float に設定されていない場合、親要素も自動的に引き伸ばされ、高さの値が表示されます。

  • 親要素内の子要素が float に設定されている場合、親要素の高さは表示されません。自動的に引き伸ばされ、高さの値はありません。

この方法で float を設定した後は、明らかに次のようないくつかの問題が発生します。

  1. 親要素のマージンが影響を受け、マージンが変更できなくなります。

  2. 親要素の高さが設定されておらず、フローティング後に親要素の高さが拡張されていない場合、親要素はディスプレイに表示されません。

記述例(背景色)

フロートクリアなし:

CSSクリアフロートは何をするのですか?フロートをクリーンアップする方法 (概要)

フロートクリア後:


CSSクリアフロートは何をするのですか?フロートをクリーンアップする方法 (概要)

#3. フロートをクリアする方法
フロートをクリアするいくつかの方法を以下に紹介します。 CSS 内 (上の図の効果を実現します):

1. Clear 属性を持つ空の要素を使用します

空のタグを使用してフロートをクリアします。 float をクリアする必要がある親要素 すべてのフローティング要素の後に空のタグを追加し (理論的には任意のタグにすることができますが、一般的には

が使用されます) フローティング要素をクリアし、CSS コードのクリアを定義します。どちらも彼らにとって。

コード例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.demo{
				width: 500px;
				margin: 50px auto;
				background-color: #CCCCCC;
			}
			.left{
				width: 100px;
				height: 100px;
				float: left;
				background-color: #21B4BB;
			}
			.right{
				width: 100px;
				height: 50px;
				float: right;
				background-color: #21B4BB;
			}
			.clear{
				clear:both;
			}
		</style>
	</head>
	<body>
		<div class="demo">
			<div class="left">left</div>
			<div class="right">right</div>
			<div class="clear"></div>
		</div>
	</body>
</html>

利点: シンプル、コードが少なく、ブラウザーとの互換性が良好。

欠点: 多数の非セマンティックな HTML 要素を追加する必要があり、コードは十分に洗練されておらず、後で保守するのは簡単ではありません。

2. CSS の overflow プロパティを使用します。

オーバーフローを使用して浮動小数点をクリアします。浮動小数点数が含まれる要素に CSS コード overflow:auto または overflow:hidden を定義するだけです。それをクリアする必要があります。

コード例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.demo{
				width: 500px;
				margin: 50px auto;
				background-color: #CCCCCC;
				overflow:hidden
			}
			.left{
				width: 100px;
				height: 100px;
				float: left;
				background-color: #21B4BB;
			}
			.right{
				width: 100px;
				height: 50px;
				float: right;
				background-color: #21B4BB;
			}
		</style>
	</head>
	<body>
		<div class="demo">
			<div class="left">left</div>
			<div class="right">right</div>
		</div>
	</body>
</html>

メリット: 構造的・意味的に問題がなく、コード量が非常に少ない

デメリット: コンテンツが増えた場合、簡単自動行折り返しが発生し、コンテンツが非表示になり、オーバーフローする必要がある要素を表示できなくなります。

3. CSS:after pseudo-element

を使用します。親要素の :after 疑似要素と set display:table

display:table により、生成された要素がブロック レベルのテーブルに表示され、残りのスペースが占有されます。


content: " " を通じて最後の要素としてコンテンツを生成します。コンテンツの内容については、従来の CSS は content: "." でOKです。バージョンによっては空のコンテンツが含まれる場合があります。

コード例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.demo{
				width: 500px;
				margin: 50px auto;
				background-color: #CCCCCC;
				*zoom: 1;
			}
			.demo:after { 
				content: " ";
				display: table; 
				clear: both;  
			}  
			.left{
				width: 100px;
				height: 100px;
				float: left;
				background-color: #21B4BB;
			}
			.right{
				width: 100px;
				height: 50px;
				float: right;
				background-color: #21B4BB;
			}
		</style>
	</head>
	<body>
		<div class="demo">
			<div class="left">left</div>
			<div class="right">right</div>
		</div>
	</body>
</html>

短所: 最新のブラウザに適していますが、IE6/7 はサポートしていません。*ズーム: 1 は IE6/7 との互換性のためです

以上がCSSクリアフロートは何をするのですか?フロートをクリーンアップする方法 (概要)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。