デモ:http ://dabblet.com/gist/3768929
この結果を取得するには、非常に便利な'box-sizing:border-box'プロパティを使用します。これについては、paulirish.com / 2012 /box-sizing-border-box-ftw/を参照してください。
IE8 +と互換性があり、IE7以下のレイアウトを少し調整する必要があります。あなたはサイドバーに'位置:絶対'を与えることができます...それは(あまり面倒なことなく)できる最高のものです。
さて、私はこれまでに何億回も同様のレイアウトを作成しましたが、ボックスサイズのプロパティにこれ以上感謝することはできません。変更点の簡単なレビューは次のとおりです。
#sidebarの「padding-top」値は#newpostcreatorの高さに等しくなりました。次に、#newpostcreatorは、高さに等しい値(この場合は-206px)を使用して、負のトップポジショニングを使用して元の位置に戻されます。
'*'ユニバーサルセレクターを使用して、すべての要素' position:relative'も指定したことに注意してください。これは、ページ上に絶対位置の要素が複数ある場合に非常に便利です。そのため、それぞれのコンテナごとに相対位置を指定する必要はありません。これは主にDRY(Do n't Repeat Yourself)であり、よりクリーンなコードになります。これにより、すべての要素に「上」「左」「右」および「下」を介した追加の位置制御も提供されます。
また、#sidebarは'position:fixed'であるため、レイアウトから削除され、ビューポートを基準にして配置されます。そのため、ページのコンテンツを中断/オーバーラップせずに静止させるために、いくらかの空白スペースが必要です。これを行うには、#containerにサイドバーの幅に等しい左のパディング値を指定します。しかし、私はあなたがすでにあなたのフィドルでそれをしているのを見ました。私はそれを少し洗練しました。
サイドバーに戻って、206ピクセルのパディングトップを付けることについて説明しました。この背後にあるロジックを理解するには、レイアウトにおけるボックスサイズの役割を理解する必要があります。基本的に、「border-box」の要素には、パディングと境界線がすべてコンテナ内に配置されています。したがって、要素を指定する幅に関係なく、パディング/境界線を追加しても、最終的な幅/高さは追加されません。その中に含まれます。これはマージンでは機能しないことに注意してください。
したがって、サイドバーに残っているスペースから206pxのパディングを差し引いたスペースは100%であり、これを#notiareaに割り当てます。
それはほとんどそれです。コードを研究すると、私が提供できたものよりも理解が深まります。リンクを確認してください。古いバージョンのFirefox、Opera、Chromeのボックスサイズにベンダープレフィックスを追加することを忘れないでください。