1. 問題ブリック(表示:ブロック)を投げて、まず現象を見る:
HTMLコード構造を分析する:
<div class="outer"> <div class="div1">1</div> <div class="div2">2</div> <div class="div3">3</div></div>
CSSコードスタイルを分析する:
リーリー
ここには最良の情報はありません。 外側の DIV.outer は高さを設定しますが、その内側の要素が浮動しない場合、外側の層の高さは自動的に拡張されることがわかっています。ただし、内部要素をフローティングにすると、以下のような影響が現れます:
(1): 背景が表示されない (2): 境界線が開けない (3): マージン設定値が正しく表示されない
内部要素がフローティングの場合、フローティングがオフになっていない場合、その時点でフローティング要素がドキュメント フローから分離されているため、その親要素にはフローティング内部要素が含まれなくなります。そのため、外側の層を伸ばして開くことはできません。 解決策は次のとおりです (他のコード例を使用してください):
1. 親 div は擬似クラスを定義します: after とzoom
.outer{border: 1px solid #ccc;background: #fc9;color: #fff; margin: 50px auto;padding: 50px;}.div1{width: 80px;height: 80px;background: red;float: left;}.div2{width: 80px;height: 80px;background: blue;float: left;}.div3{width: 80px;height: 80px;background: sienna;float: left;}
長所: ブラウザのサポートが良好で、奇妙な問題が発生しにくい (現在: Tencent、NetEase、Sina などの大規模な Web サイトで使用されている)
<style type="text/css"> .div1{background:#000080;border:1px solid red;} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD} /*清除浮动代码*/ .clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0} .clearfloat{zoom:1} </style> <div class="div1 clearfloat"> <div class="left">Left</div> <div class="right">Right</div> </div><div class="div2"> div2 </div>
原則: width またはzoom:1 を定義する必要があり、overflow を使用する場合は高さは定義できません。 :hidden、ブラウザは自動的にフローティングエリアの高さをチェックします
<style type="text/css"> .div1{background:#000080;border:1px solid red} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD} /*清除浮动代码*/ .clearfloat{clear:both} </style> <div class="div1"> <div class="left">Left</div> <div class="right">Right</div><div class="clearfloat"></div></div><div class="div2"> div2 </div>
利点: シンプルで少ない。コード、優れたブラウザサポート
<style type="text/css"> .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:hidden} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD} </style> <div class="div1"> <div class="left">Left</div> <div class="right">Right</div></div><div class="div2"> div2 </div>
利点 : コードは簡潔です