1 つの列は固定幅で、1 つの列はアダプティブです個人ブログからの転載
この記事のレイアウトでは親要素の float がクリアされていないため、float を使用する一部のレイアウトでは、親要素の float をクリアする必要があることに注意してくださいコンテナ 、実際の状況で使用できます。 (フロートをクリアする方法についてはここでは説明しません)
<div class="parent"> <div class="left"> <p>left</p> </div> <div class="right"> <p>right</p> <p>right</p> </div></div>
1. float+margin
.left{ float: left; width: 100px;}.right{ margin-left: 120px;}
エラーの例を見てみましょう:
それを解決するには?
2. 改良版 --- float+margin+fix
レイアウトは次のように変更されます:
<div class="parent"> <div class="left"> <p>left</p> </div> <!-- html部分在这个地方进行了添加,使用right-fix把原有结构包裹住了 --> <div class="right-fix"> <div class="right"> <p >right</p> <p>right</p> </div> </div></div>
CSS 部分:
.left{ float: left; width: 100px; position: relative; /*提升左边的层级*/}.right-fix{ float: right; width: 100%; margin-left: -100px;/*处理右边掉下来的情况*/}.right{ margin-left: 120px;}
3. float+overflow
.left{ float:left; width:100px; margin-right:20px;}.right{ overflow:hidden;/*触发BFC*/ /*_zoom:1;*/ /*IE6使用zoom:1来触发BFC*/}
HTML 構造は最初のものと同じです。
4. flex
利点: iE10+ との互換性が低く、パフォーマンスが低く、小規模なレイアウトによく使用されます。すごい
固定幅の複数列とアダプティブ 1 列実際には、上のレイアウトの中央に中心を追加しているだけです。
HTMLの構造は以下の通りです:.parent{ display: table; width: 100%; table-layout: fixed;/*加速table渲染,实现布局优先*/}.left,.right{ display: table-cell;}.left{ width: 100px; padding-right: 20px;}
.parent{ display: flex; } .left{ width: 100px; margin-right: 20px; } .right{ flex:1;/**/ }
実際には、固定幅の 1 つの列と適応幅の 1 つの列の最後の 3 つを変更することです
1. float+overflow利点: 互換性が高く、最もよく使用され、構造が単純です (実際、元の実装ではすでにこれが実現されているため、上記からの変更は左側のコンテンツを使用することです。効果)
2. table<div class="parent"> <div class="left"> <p>left</p> </div> <div class="center"> <p>center</p> </div> <div class="right"> <p>right</p> <p>right</p> </div></div>ログイン後にコピー
短所: IE8+ をサポート、複雑な設定。
.left,.center{ float: left; width: 100px; margin-right: 20px;}.right{ overflow: hidden;}
3. flex
.left{ float:left; margin-right:20px; /*width:200px;*//*可设置宽度,也可使用内容撑开*/}.right{ overflow:hidden;}.left p{width:200px;}/*使用内容去撑开宽度*/
2 つの列は可変幅で、1 つの列は適応型です。
HTML 構造は、固定幅の 2 つの列とアダプティブな 1 つの列と同じです。
float+overflow を例にとると、中央を左と同じに設定するだけです。.parent{ display: table; width: 100%;}.left,.right{ display: table-cell;}.left{ width: 0.1%;/*只要足够小就行*/ padding-right: 20px;}.left p{width:200px;}/*使用内容去撑开宽度*/
均等配分
.parent{ display: flex; } .left{ margin-right: 20px; } .right{ flex:1;/**/ } .left p{width:200px;}/*使用内容去撑开宽度*/
実際には、負のマージンである G を親コンテナに追加するだけです:
利点: 設定が簡単。欠点: IE8+ をサポートします。レイアウトを変更すると、CSS スタイル (幅: XX%) を変更する必要があります。
.left,.center{ float: left; margin-right: 20px;}
達成?実際には、必ずしもそうではありません。左端に別の幅があることがわかります。
パディングが必要な場合は、自分で設定してください
上記に基づいて、
<div class="parent"> <div class="column"><p>1</p></div> <div class="column"><p>2</p></div> <div class="column"><p>3</p></div> <div class="column"><p>4</p></div></div>
3.効果は次のとおりです:
Flex が残りのスペースを自動的に割り当てるため、ここではマージンが使用されます等しい高さのレイアウト
とてもよくわかりましたか? HTML は最初の部分と同じです:
ただし、両側の高さは最も高い部分の高さと同じです。 うわー
ここには載せませんので、上記のコード実装を参照してください。主に次の解決策です:
実際、まったく同じではなく、効果を達成するだけです
p{background:#666;}/*对div中的p标签设置才有间隔效果,所以在设置内容时,也是在p中设置*/.parent{ margin-left: -20px;}.column{ float: left; width: 25%; padding-left: 20px; box-sizing: border-box;}
もう一度思い出してください: 実際の状況では、外側のコンテナは float をクリアする必要があります。