2011-01-19 30 views
4

私は、ページのコンテキストに応じて変更できるhtml構造を持っています。CSS - 自動div幅

<div class="container"> 
    <div class="column"> 
    blah 
    </div>  
</div> 

等に:一部のページではのように見えるので、

<div class="container"> 
    <div class="column"> 
    blah 
    </div>  
    <div class="column"> 
    blah 
    </div>  
</div> 

、コンテナは、流体幅(100%)を持っています。

.column divも流動性があり、最初の例ではコンテナの幅を持つ必要があります。 100%、 であり、第2の例では50%幅であり、左に整列している。

同様:

---------------------------- 
|       | 
|   column1   | 
|       | 
----------------------------- 

---------------------------- 
|   |    | 
| column2 | column2  | 
|   |    | 
----------------------------- 

私はこれをどのように行うことができますか?

私も、私は(、クラスまたはそのような何かを追加するかもしれない唯一のjavascriptハックを使用するか、PHPの出力をキャプチャして、正規表現を使用することはできませんcolumn1の/ column2の内の任意のマークアップを変更できないことに注意してください:)

+0

javascriptを使用して.column要素にクラスを追加できますか? – Sampson

+0

はい、私は本当にそのような解決策を避けようとしています。あなたはレイアウトが固定される前に "遅延"を得るだろう – Alex

+0

私は同意するが、あなたは "クラスやそれに類するものを追加する"ことはできないと言ったが、 "javascript hacksを使う"という考えを楽しませたので、 CSS/Markupへのアクセスは可能でしたが、あなたはスクリプトにアクセスできました。 – Sampson

答えて

4

私は2つのソリューションを考えることができます。

  1. CSS3 flex boxを使用してください。
  2. 列をdisplay: table-cell;、コンテナのdisplay: table-row;に設定します。
+0

テーブルの表示方法は素晴らしいかもしれませんが、動作していないようです。 table-cell/table-rowを使用するための制限はありますか? – Alex

+0

私は取り外さなければならなかったフロートを持っていましたが、今は動作します。おそらくIEではないが、私は気にしない。ありがとう! – Alex

+1

実際、IE8からテーブル表示モードがうまく動作するはずです。 Quirksmode(http://www.quirksmode.org/css/display.html)で互換性テーブル全体とそれに関する詳細を確認できます。 – coreyward

1

最高のものは、JavaScript:http://jsfiddle.net/V5Au7/です。

いくつかの非常に厄介な落とし穴:

  1. これは#containerの唯一のdivは、クラス名を持つものであることを前提とし、「列。」
  2. これは、列に罫線、余白、または余白がないことを前提としています。
  3. You could run into sub-pixel problems, by relying on percentages.もちろん、1つまたは2つの列だけを貼り付けると、これはおそらく問題にはなりません。

IE6でも動作するCSS専用の方法があるはずです。私はそれを感じることができます、私はそれを見つけることができません。

関連する問題