ホームページ > 記事 > ウェブフロントエンド > CSSで2列レイアウトを実装する方法
方法: 1. 両方のボックス要素に「dislpay:inline-block」を設定します。 2. 両方のボックス要素をフロートに設定します。 3. 左側の固定幅要素をフロートにし、右側の要素をmargin-left. 値が固定幅要素の幅より大きい場合; 4. 浮動 BFC; 5. 絶対位置決め margin-left など。
このチュートリアルの動作環境: Windows 7 システム、CSS3&&HTML5 バージョン、Dell G3 コンピューター。
2 列レイアウトには、左側の固定幅とアダプティブの 2 種類があります。 1 つは、両方の列がアダプティブであることです (つまり、左側の幅は子要素によって決定され、右側は残りのスペースを埋めます)。 CSSの面接質問は共通試験問題であり、フロントエンド開発エンジニアが身につけておくべきスキルでもありますので、その実装方法を以下に紹介します。
原則: 両方の要素に dislpay:inline-block を設定します。 HTML スペースの影響のため、親要素のフォント サイズは 0 に設定する必要があり、右側のアダプティブ要素の幅は calc 関数を使用して計算されます。 2 つの要素の高さが異なる場合は、要素のvertical-align:top 調整を設定できます。
# 欠点: 親要素のフォントサイズが 0 に設定されているため、子要素のテキストは表示されません
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> *{ padding: 0; margin: 0; } .box{ height: 600px; width: 100%; font-size:0; } .left{ display: inline-block; width: 100px; height: 200px; background-color: red; vertical-align: top; } .right{ display: inline-block; width: calc(100% - 100px); height: 400px; background-color: blue; vertical-align: top; } </style> </head> <body> <div class="box"> <div class="left"> <span>1234</span> </div> <div class="right"> <span>1234</span> </div> </div> </body> </html>
原則: 2 つの要素が float に設定され、右側のアダプティブ要素の幅が calc 関数を使用して計算されます
欠点: 親要素をフローティングからクリアする必要がある
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> *{ padding: 0; margin: 0; } .box{ height: 600px; width: 100%; } .left{ float: left; width: 100px; height: 200px; background-color: red; } .right{ float: left; width: calc(100% - 100px); height: 400px; background-color: blue; } </style> </head> <body> <div class="box"> <div class="left"> <span> 123adadadddddddddddddddddddddddddddddddddddddddd </span> </div> <div class="right"></div> </div> </body> </html>
欠点: 親要素は float
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
*{
padding: 0;
margin: 0;
}
.box{
height: 600px;
width: 100%;
}
.left{
float: left;
width: 100px;
height: 200px;
background-color: red;
}
.right{
margin-left: 100px;
height: 400px;
background-color: blue;
}
</style>
</head>
<body>
<div class="box">
<div class="left">
<p>1234</p>
</div>
<div class="right">
<p>1234</p>
</div>
</div>
</body>
</html>
欠点: のコンテンツが左側の要素が設定された幅を超えると、右側の要素と重なります
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
*{
padding: 0;
margin: 0;
}
.box{
height: 600px;
width: 100%;
overflow: hidden;
}
.left{
float: left;
width: 100px;
height: 200px;
background-color: red;
}
.right{
overflow: auto;
height: 400px;
background-color: blue;
}
</style>
</head>
<body>
<div class="box">
<div class="left">111111111111111111111111</div>
<div class="right">111111111111111111111111111111111111111111111</div>
</div>
<div class="right"></div>
</body>
</html>
欠点: 親要素は相対位置に設定されます
#<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> *{ padding: 0; margin: 0; } .box{ height: 600px; width: 100%; position: relative; } .left{ position: absolute; width: 100px; height: 200px; background-color: red; } .right{ margin-left: 100px; height: 400px; background-color: blue; } </style> </head> <body> <div class="box"> <div class="left"></div> <div class="right"></div> </div> </body> </html>
#6.flex レイアウト
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
*{
padding: 0;
margin: 0;
}
.box{
height: 600px;
width: 100%;
display: flex;
}
.left{
width: 100px;
height: 200px;
background-color: red;
}
.right{
flex: 1;
height: 400px;
background-color: blue;
}
</style>
</head>
<body>
<div class="box">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
## 未満ではサポートされません。 #3. 左側と右側の要素は両方ともアダプティブです
厳密に言えば、両方の要素がアダプティブであるという意味ではなく、上の固定幅が に変更されるだけです。子要素によって引き伸ばされます
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .parent{ display: table; width: 100%; } .box{ display: table-cell; width: 0.1%; } .left{ margin-right: 20px; background-color: red; height: 200px; } .right{ display: table-cell; background-color: blue; height: 300px; } </style> </head> <body> <div class="parent"> <div class="box"> <div class="left">126545453dddddddd453453453</div> </div> <div class="right">12121</div> </div> </body> </html>
## 原則: 親要素は表示を設定します: Grid, Grid-template-columns:auto 1fr; (この属性は次のように定義します)列幅、auto キーワードは長さがブラウザ自体によって決定されることを示します。fr は相対的なサイズ単位であり、残りのスペースが均等に分割されることを示します) グリッドギャップ: 20px (行間隔)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .parent{ display:grid; grid-template-columns:auto 1fr; grid-gap:20px } .left{ background-color: red; height: 200px; } .right{ height:300px; background-color: blue; } </style> </head> <body> <div class="parent"> <div class="left">1111111111111111111111111</div> <div class="right"></div> </div> </body> </html>
(学習ビデオ共有: css ビデオ チュートリアル)
以上がCSSで2列レイアウトを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。