39

2列のテーブルのようなページをレイアウトしようとしています。右端の列をページの右側にドッキングする必要があります。この列の背景色は明確である必要があります。右側のコンテンツは、ほとんどの場合、左側のコンテンツよりも小さくなります。右側のdivは、その下の行のセパレーターに到達するのに十分な高さである必要があります。背景色をそのスペースに塗りつぶすにはどうすればよいですか?

.rightfloat {
  color: red;
  background-color: #BBBBBB;
  float: right;
  width: 200px;
}

.left {
  font-size: 20pt;
}

.separator {
  clear: both;
  width: 100%;
  border-top: 1px solid black;
}
<div class="separator">
  <div class="rightfloat">
    Some really short content.
  </div>
  <div class="left"> 
    Some really really really really really really
    really really really really big content
  </div>
</div>
<div class="separator">
  <div class="rightfloat">
    Some more short content.
  </div>
  <div class="left"> 
    Some really really really really really really
    really really really really big content
  </div>
</div>


編集:この例は非常にテーブルに似ており、実際のテーブルが適切な選択であることに同意します。しかし、私の「実際の」ページは最終的にはテーブルのようになりません。最初にこのタスクをマスターしたいと思います。

また、何らかの理由で、IE7で投稿を作成/編集すると、コードはプレビュービューに正しく表示されますが、実際にメッセージを投稿すると、書式が削除されます。Firefox 2で私の投稿を編集することはうまくいったようです、FWIW。


別の編集:ええ、私はGateKillerの答えを受け入れませんでした。それは確かに私の単純なページではうまく機能しますが、私の実際の重いページではうまく機能しません。私はあなたが私に指摘したリンクのいくつかを調査します。

4

14 に答える 14

22

ええと...

あなたの質問に対する簡単な答えは、body と html タグに 100% の高さを設定し、ページの高さを 100% にしたい各 div 要素で高さを 100% に設定する必要があるということです。

実際、100% の高さはほとんどの設計状況では機能しません。これは短いかもしれませんが、良い答えではありません。Google の「任意の列で最も長い」レイアウト。最良の方法は、左右の列をラッパー内に配置し、div左右の列をフロートしてからラッパーをフロートすることです-これにより、内側のコンテナーの高さまで引き伸ばされます-次に、外側のラッパーに背景画像を設定します. ただし、IE の「ダブル マージン フロート バグ」が発生した場合に備えて、フローティング要素の水平マージンに注意してください。

于 2008-08-07T18:24:16.803 に答える
9

これを試してみてください:

html, body,
#left, #right {
  height: 100%
}

#left {
  float: left;
  width: 25%;
}
#right {
  width: 75%;
}
<html>
  <body>
    <div id="left">
      Content
    </div>
    <div id="right">
      Content
    </div>
  </body>
</html>

于 2008-08-07T17:33:14.270 に答える
5

私は厳密に CSS をあきらめ、少し jquery を使用しました。

var leftcol = $("#leftcolumn");
var rightcol = $("#rightcolumn");
var leftcol_height = leftcol.height();
var rightcol_height = rightcol.height();

if (leftcol_height > rightcol_height)
    rightcol.height(leftcol_height);
else
    leftcol.height(rightcol_height);
于 2009-06-22T23:18:16.650 に答える
3

これは、同じ高さの列の例です-同じ高さの列-再考

「フェイクコラム」のアイデアもチェックできます-フェイクコラム

テーブルルートに行かないでください。表形式のデータでない場合は、そのように扱わないでください。アクセシビリティと柔軟性にとっては悪いことです。

于 2008-08-07T17:39:22.713 に答える
2

私のサイトでも同じ問題がありました(恥知らずなプラグ)。

ナビゲーションセクション「float:right」があり、ページの本体には、右に配置された「repeat-y」で横に約250pxの背景画像があります。次に、「clear:both」を含むものを追加しました。これがW3SchoolsとCSSのclearプロパティです。

「ページ」クラスのdivの下部にクリアを配置しました。私のページソースは次のようになります。

body
 -> header (big blue banner)
 -> headerNav (green bar at the top)
 -> breadcrumbs (invisible at the moment)
 -> page
     -> navigation (floats to the right)
     -> content (main content)
         -> clear (the quote at the bottom)
         -> footerNav (the green bar at the bottom)
     -> clear (empty but still does something)
 -> footer (blue thing at the bottom)

私はそれが役立つことを願っています:)

于 2008-08-07T17:07:05.413 に答える
0

あなたの質問に対する簡単な答えは、bodyとhtmlタグに100%の高さを設定してから、ページの高さを100%にする各div要素の高さを100%に設定する必要があるということです。

于 2008-08-07T17:47:58.810 に答える
0

コードが読みやすくなるように、ここで手助けしようとしています。
上部の「101010」のボタンをクリックすると、コード スニペットを挿入できます。コードを入力して強調表示し、ボタンをクリックするだけです。

以下に例を示します。

<html>
    <body>
    <style type="text/css">
        .rightfloat {
            color: red;
            background-color: #BBBBBB;
            float: right;
            width: 200px;
        }

        .left {
            font-size: 20pt;
        }

        .separator {
            clear: both;
            width: 100%;
            border-top: 1px solid black;
        }
    </style>
于 2008-08-07T17:13:35.260 に答える
0

2 列のレイアウトは、CSS で機能させるのが少し難しいです (少なくとも CSS3 が実用化されるまでは)。

左右のフローティングはポイントまで機能しますが、背景を拡張することはできません。背景を無地に保つには、「フェイク カラム」と呼ばれる手法を実装する必要があります。これは基本的に、カラム自体に背景画像がないことを意味します。2 つの列は親タグ内に含まれます。この親タグには、必要な 2 つの列の色を含む背景画像が与えられます。この背景を必要なだけ大きくして (単色の場合は、高さを 1 ピクセルにします)、y を繰り返します。AListApart には、それを機能させるために何が必要かについての優れたウォークスルーがあります。

http://www.alistapart.com/articles/fauxcolumns/

于 2008-08-07T18:21:51.207 に答える
0

2つのオプションを考えることができます

  1. ページの読み込み時に小さい列のサイズを変更するには、javascript を使用します。
  2. 代わりbackground-colorにコンテナーの列に( ) を設定して、同じ高さを偽装します。<div/><div class="separator"/>repeat-y
于 2008-08-08T03:35:30.997 に答える
0

そのためには css プロパティwidthを使用するだけで十分です。

次に例を示します。

<style type="text/css">;
    td {
        width:25%;
        height:100%;
        float:left;
    }
</style>
于 2013-03-24T14:48:12.930 に答える
0

これでうまくいくはずです: CSS でhtmlandbody要素の高さを 100% に設定します。その後、必要に応じて高さを調整できますdiv

html {
    height: 100%;
}

body {
    height: 100%;
}
div {
    height: 100%; /* Set Div Height */
} 
于 2013-08-29T07:55:46.537 に答える