2012-07-12 16 views
5

私はユニークなウェブサイトのレイアウトを作成するためのパラダイムと慣習を打ち破ることを好むクリエイティブなデザインスタジオに取り組んでいます。最近、水平のウェブサイトレイアウトを開発し始めました。水平のウェブサイトのレイアウトは「クール」に見えますが、私はまだ垂直グリッドベースのウェブサイトをそのまま使えるように、それらを流動的かつ反応的にする方法を試していません。CSSを使用して反応的な水平レイアウトを作成するには?

通常、コンテナを持つ垂直型Webサイトの場合、コンテナ要素のパーセンテージベースの幅を持つため、最大幅を設定します。レスポンシブなレイアウトでは、コンテンツはページから無限にスクロールされますが、コンテンツが一意であり、したがって数式のターゲット/コンテキスト* 100が実際には機能しない場合は、幅が変わる可能性があります。

グリッドベースのレスポンシブウェブサイトと同じように、要素の高さ、パディング、マージンを調整する方法がありますか?私はJavascriptを使用する必要はありませんが、CSS修正が理想的です。あなたの参考のために

私が作成しようとしていますレイアウトのタイプの例:

enter image description here

+0

唯一の問題は、私は、たとえば構築しています現在のサイトは、容器が膨張して幅の変化が依存するので、それは水平石造プラグインを使用しているため、様々な幅を有するコンテンツブロックを有していることですコンテンツのシャッフル方法とコンテンツのサイズに関する情報高さはすべてパーセンテージに基づいているため、実際にはコンテキストはありません。私はこれが私たちのデザイナーに見えるほど簡単ではないと思っています;) –

+0

ええ、これは私たちの多くのための新しい領域ですが、私が見ているのは、水平レイアウト全体か、ユーザーの操作や進行状況に基づいてビューにスクロールします。 – artlung

+0

今日私はこの種のレイアウトをやっていればCSSフレキシブルボックスモデルを使用します。 Flexは、現代のすべてのブラウザでサポートされている非常に強力なレイアウト方法です。 私はプログラマーがレイアウトを混乱させていたので、javascriptに頼らずに複雑なレイアウトのために2012年にflexboxを使用しました。これは当時の流れであったが、これまでの流れの中ではやっかいだったが、それ以来、最後の呼び出しに入っている。たとえ以前の仕様やブラウザがサポートされていなくても、使用するポリ充てん剤があります。 – Thurstan

答えて

4

あなたはページコンテナのdivの子要素を計算.outerWidthとすべて一緒にそれらを追加し、追加することによって、jQueryを使ってこれを行うことができ、そのページまたはdiv要素の.css('width')

HTML構造へ:

<div id="main"> 
    <div><img src="#" /></div> 
    <div><img src="#" /></div> 
    <div><img src="#" /></div> 
</div> 

編集:I CSSを追加するのを忘れましたが、ここでの主なポイントは、子divsを#mainにして左に浮動させたいということです。

Javascriptを:

function() { 
     var window_width = jQuery(window).width(), 
      container = jQuery('#main'), 
      page_width = 0; 

     // Grab every child element of the "main" container 
     container.children().each(function(index){ 
      var incl_margin = true, 
       $this = jQuery(this); 

      // Check if each child element has a margin-left or margin-right 
      if (parseInt($this.css('margin-left')) < 0 || parseInt($this.css('margin-right')) < 0) { 
       var incl_margin = false; 
      } 

      // Get element's width including margins (if they exist from above) 
      var width = $this.outerWidth(incl_margin); 
      page_width += width; 

     }); 

     // Add total width of containers elements as the containers width 
     if(page_width > 0) 
      container.css({'width' : page_width + 'px'}); 
    } 
} 
+0

これは私が現在行っていることですが、このようなものです。横向きのレイアウトでは、横向きのレイアウトを素早く作成できるようになると考えています。答えをありがとう、これは素晴らしいです。 –

1

これを行うには多くの方法があります。

あなたはあなただけのラッパーのdivを作ることができるページの幅を正確に知っている場合は、全幅を設定し、そのようにラッパーの内側の側で、あなたのコンテンツのdiv側をフロート:

<div style="width: 2500px; border: red solid 1px;"> 
    <div style="width: 500px; float: left;">Content</div> 
    <div style="width: 500px; float: left;">Content</div> 
    <div style="width: 500px; float: left;">Content</div> 
    <div style="width: 500px; float: left;">Content</div> 
    <div style="width: 500px; float: left;">Content</div> 
</div> 

あなたの場合正確な幅を知っている、これは最も簡単な解決策です。

幅が不明または変化する場合は、JavaScriptを使用して全幅を計算し、同じ結果をラッパーに適用できます。これはほとんどのニーズに対応するはずです。

+1

問題は、幅や高さを知らなくても、どのように水平レイアウトを反応させるのですか?従来のレスポンシブウェブサイトは、グリッドに基づいており、水平には幅と高さがなく、ブラウザに基づいて変化するコンテナがあります。重いJSを使ってページの再描画をたくさんするのでなければ、私たちがすでにやっていること以外は実際には可能ではないと思います。 –

関連する問題