2011-12-23 9 views
1

私は私のウェブサイトのために、次のレイアウトを作成しようとしています:純粋なHTML: "float"を使わずにこのレイアウトを作成するには?

<table width="80%" align="center"> 
    <tr> 
     <td width="80%" bgcolor="red">MAIN CONTENT</td> 
     <td bgcolor="green">SIDEBAR</td> 
    </tr>  
</table> 

あなたは、これはページ幅の80%であり、コンテンツエリアは、その幅の80%であるテーブルを作成します想像通り、サイドバーは残りの部分を埋めます。

今回は、DIVまたはSPAN、または基本的にTABLElessデザインを使用したいと思います。今、私は私は2つのdiv要素を使用し、これを達成するために彼らの「フロート」プロパティを使用することができます知っているが、私はこのような、より簡単で、より論理的なものがあるかどうかを確認するために期待していた。残念ながら

<div align="center" style="width:80%"> 
    <span style="width:80%;"> 
     MAIN CONTENT 
    </span> 
    <span> 
     SIDEBAR 
    </span> 
</div> 

上記動作しません。まったく、私は理由を知らない。誰かが "フロート"を使用しない純粋なHTML実装を私に見せてもらえますか?

インターネット上に見られるすべてのサイトには、少なくとも1つのサイドバーがありますので、私の答えは私以外の多くの人に役立つことを願っています。ありがとう!

+1

すべて間違っている!それらは非意味的な方法でインラインコンテンツをラップするために使用されます。レイアウトをマークアップするにはdivのみを使用してください! (html5を使用している場合を除き、html5タグを使用してください)。 – Kyle

+0

なぜ浮遊物を使いたくないのですか?新しいCSS3フレックスボックスのもの以外に、あなたはそれほど簡単に離れません。 – Interrobang

+0

@KyleSevenoaks:DIVとSPANの違いを読んでみましたが、唯一の違いはSPANには表示があることです:インライン。 – supersan

答えて

5

floatを使用せずに、適切なマークアップdisplay: table;,display: table-cell;とCSSを使用してこれを行うことができます。

HTML:

<div id="wrap"> 
     <div id="sidebar"> 
     I am a sidebar! 
     </div> 
     <div id="mainContent"> 
     I am some main content 
    </div> 
</div> 

CSS:

#wrap 
{ 
    width: 100%; 
    height: 400px; 
    display: table; 
} 

#sidebar 
{ 
    display: table-cell; 
    border: 1px dashed #f00; 
} 

#mainContent 
{ 
    display: table-cell; 
    width: 80%; 
    border: 1px dashed #0f0; 
} 

しかし、注意してください、IE7および下、このCSSをサポートしていません。

HTML

<div id="wrap"> 
     <div id="sidebar"> 
     I am a sidebar! 
     </div> 
     <div id="mainContent"> 
     I am some main content 
    </div> 
    <div class="clear">&nbsp;</div> 
</div> 

CSS:

をあなたはまた、所望のレイアウトを作成するためにフロートを使用することができ、ほぼ同じマークアップ(1つの余分のdiv)を使用して

http://jsfiddle.net/57Fvk/


#wrap 
{ 
    width: 100%; 
    height: 400px; 
} 

#sidebar 
{ 
    width: 20%; 
    float: left; 
    background: #f00; 
    height: 100%; 
} 

#mainContent 
{ 
    width: 80%; 
    float: left; 
    background: #0f0; 
    height: 100%; 
} 

.clear 
{ 
    clear: both; 
} 

http://jsfiddle.net/shzLc/

+0

迅速な回答ありがとうございます。私はあまりにもディスプレイにつまずいた:テーブル;この中で最も洗練されたソリューションを見つけるための私の探求中に。私はまた、付加的な利点として、それ以外の場合には動作しないように見える**「縦に並んだ:中」のものを修正する**ことを学びました。しかし、2つのこと。 1つは、それをサポートするブラウザー・マトリックスのリストの中で、私のクライアントがサポートしたいと思うブラウザーの中にはうまくいかないということです。第二に、DIVをちょうどハックしてテーブルセルにすると、私はすべての人生をやっているように、テーブルを使うほうがいいですか?しかし、私は答えを歓迎します – supersan

+0

いいえ、あなたはテーブルを使用することをお勧めします。これは失敗しないで、古い、醜いテーブルよりも維持するのがはるかに簡単で適切な、エレガントなマークアップを使用しています。テーブルにはその場所がありますが、これはそれではありません。浮動型マークアップにclearfixを使用することについても言及していますが、これも調べるべきです。私はそれを含めるために私の答えを更新します。 – Kyle

+0

素晴らしいともう一度お手伝いをしていただきありがとうございます。私はこれをたくさん研究しようとしましたが、たぶん、この種のレイアウトが必要な大部分のサイトがあるので、これを行うためのよりよい解決策があるかもしれないということに疑問が残っていました。とにかく、私はこのサイトのすべての答えを見たら、これは感謝して私の心を安らぎにしてくれるでしょう。 – supersan

0

は、ここでは、このレイアウトを作成するための非常にシンプルな方法です:

http://jsfiddle.net/e94zc/

HTML:

<div id="page"> 
    <div id="content"> 
     Content 
    </div> 
    <div id="sidebar"> 
     Sidebar 
    </div> 
</div> 

CSS:あなたは `` sのを使用している

#page{ 
    margin: 0 auto; 
    width:80%; 
    position: relative; 
    } 
#content{ 
    width:80%; 
    position: absolute; 
    top: 0; 
} 
#sidebar{ 
    position: absolute; 
    top: 0; 
    left: 80%; 
    width: 20%; 
} 
+0

こんにちは、これはやっていることのかなり良い方法です。共有のおかげで! (私はこの回答をupvoteにrepポイントを持ってもらいたい)。 – supersan

+0

しかし、私はこのレイアウトにフロートを使用することを選択しました。私はそれらを避ける正当な理由は考えられません。 –

関連する問題