私はCSSを使用してdivを2つの列に分割しようとしましたが、まだ機能させることができていません。私の基本構造は次のとおりです。
<div id="content">
<div id="left">
<div id="object1"></div>
<div id="object2"></div>
</div>
<div id="right">
<div id="object3"></div>
<div id="object4"></div>
</div>
</div>
左右のdivをそれぞれの位置(左右)にフロートさせようとすると、コンテンツdivの背景色が無視されるようです。また、さまざまなWebサイトから試した他のコードは、私の構造に変換できないようです。
助けてくれてありがとう!
これらの2つのdivをフロートすると、コンテンツdivの高さがゼロになります。追加するだけ
<br style="clear:both;"/>
#right divの後、コンテンツdiv内。これにより、コンテンツdivが2つの内部のフローティングdivを囲むようになります。
これは私に適しています。画面を2つの半分に分割しました:20%と80%:
<div style="width: 20%; float:left">
#left content in here
</div>
<div style="width: 80%; float:right">
#right content in there
</div>
これを行うもう1つの方法は、overflow:hidden;
を浮動要素の親要素に追加することです。
overflow:hiddenは、フロートされた要素に収まるように要素を成長させます。
この方法では、別のhtml要素を追加するのではなく、すべてcssで実行できます。
これを行う最も柔軟な方法:
#content::after {
display:block;
content:"";
clear:both;
}
これは、#contentに要素を追加するのとまったく同じように機能します。
<br style="clear:both;"/>
しかし、実際に要素を追加することはありません。 :: afterは擬似要素と呼ばれます。これが__contentにoverflow:hidden;
を追加するよりも優れている唯一の理由は、絶対位置の子要素がオーバーフローしても表示されるようにするためです。また、ボックスシャドウを表示したままにすることもできます。
クリア方法が好きではない理由が何であれ、このようなことはフロートとパーセンテージ幅に依存しています。
簡単なケースで機能するものを次に示します。
#content {
overflow:auto;
width: 600px;
background: gray;
}
#left, #right {
width: 40%;
margin:5px;
padding: 1em;
background: white;
}
#left { float:left; }
#right { float:right; }
いくつかのコンテンツを入れると、それが機能することがわかります:
<div id="content">
<div id="left">
<div id="object1">some stuff</div>
<div id="object2">some more stuff</div>
</div>
<div id="right">
<div id="object3">unas cosas</div>
<div id="object4">mas cosas para ti</div>
</div>
</div>
ここで見ることができます: http://cssdesk.com/d64uy
子divをinline-block
にすると、それらは並んで配置されます。
#content {
width: 500px;
height: 500px;
}
#left, #right {
display: inline-block;
width: 45%;
height: 100%;
}
デモ を参照してください
Divを垂直に分割する最良の方法-
#parent {
margin: 0;
width: 100%;
}
.left {
float: left;
width: 60%;
}
.right {
overflow: hidden;
width: 40%;
}
私はこの投稿が古いことを知っていますが、あなたがまだもっと簡単な解決策を探しているなら。
#container .left,
#container .right {
display: inline-block;
}
#container .left {
width: 20%;
float: left;
}
#container .right {
width: 80%;
float: right;
}
与えられた答えはどれも元の質問に答えません。
問題は、cssを使用してdivを2列に分割する方法です。
上記の答えはすべて、2つの列をシミュレートするために、実際には2つのdivを単一のdivに埋め込みます。動的な方法でコンテンツを2つの列にフローすることはできないため、これは悪い考えです。
したがって、上記の代わりに、次のようにCSSを使用して2列を含むように定義された単一のdivを使用してください...
.two-column-div {
column-count: 2;
}
上記をクラスとしてdivに割り当てると、実際にはその内容が2つの列に流れます。さらに進んで、マージン間のギャップを定義することもできます。 divのコンテンツによっては、コンテンツが列間で途切れないように、Wordのブレーク値を台無しにする必要がある場合があります。
フロートはフローに影響しません。私がしがちなのは
<p class="extro" style="clear: both">possibly some content</p>
「ラッピングdiv」の最後(この場合はコンテンツ)。そのような段落が必要になるかもしれないと言うことで、意味論的にこれを正当化できます。別のアプローチは、clearfix CSSを使用することです:
#content:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
#content {
display: inline-block;
}
/* \*/
* html #content {
height: 1%;
}
#content {
display: block;
}
/* */
コメントのトリックは、ブラウザ間の互換性のためです。
各子DIVの幅%を設定します。
#content {
font-size: 0;
}
#content > div {
font-size: 16px;
width: 50%;
}
* Safariでは、動作させるために49%を設定する必要がある場合があります。
分割を2列に分割するのは非常に簡単です。これを配置すると(幅:50%など)列の幅をより適切に指定し、左列にfloat:leftを、右列にfloat:rightを設定します。
flexbox を使用して、div要素のレイアウトを制御できます。
* { box-sizing: border-box; }
#content {
background-color: rgba(210, 210, 210, 0.5);
border: 1px solid #000;
padding: 0.5rem;
display: flex;
}
#left,
#right {
background-color: rgba(10, 10, 10, 0.5);
border: 1px solid #fff;
padding: 0.5rem;
flex-grow: 1;
color: #fff;
}
<div id="content">
<div id="left">
<div id="object1">lorem ipsum</div>
<div id="object2">dolor site amet</div>
</div>
<div id="right">
<div id="object3">lorem ipsum</div>
<div id="object4">dolor site amet</div>
</div>
</div>
これはここで最もよく答えられます 質問21138
最近では、自尊心のある人は、フロートをクリアするという「マイクロクリアフィックス」アプローチを使用する必要があります。