2017-02-12 6 views
0

以下のコードは、メニュー項目をブラウザーウィンドウに対して垂直方向に自動調整しますが、ヘッダーを考慮しません。ヘッダーとブラウザーの下部の間のサイドバーをどのように垂直に整列させることができますか。現在、下の項目はブラウザの下に表示されています。バーチャルサイドバーを動的に調整してブラウザのヘッダーとボトムの間で自動的に調整する方法

HTML:

<h1> 
Header 
</h1> 
<div class="sidebar"> 
    <ul> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
    <li>Item 6</li> 
    <li>Item 7</li> 
    </ul> 
</div> 

CSS:

.sidebar{ 
    background-color: orange; 
    margin-left: 30px; 
    height: 100vh; 
    position: fixed; 
    top: 0px; 
} 

.sidebar ul{ 
    height: 100%; 
    list-style-type: none; 
    padding: 0px 15px 0px 15px; 
    margin:0px; 
    display: flex; 
    flex-direction: column; 
    justify-content: space-around; 
} 
+0

は、ヘッダの高さが知られていますか? – Banzay

+0

ページに垂直スクロールバーが含まれている場合、固定位置で常に表示されるようにメニューを 'position:fixed'でスタイルする必要がありますか? –

答えて

0

は、私が使用して終了するものです。

HTML:

<h1> 
Header 
</h1> 
    <section> 
    <div class="sidebar"> 
     <ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
     <li>Item 4</li> 
     <li>Item 5</li> 
     <li>Item 6</li> 
     <li>Item 7</li> 
     </ul> 
    </div> 
    <main> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    <p>main content</p> 
    </main> 
</section> 

CSS:

body { 
    display: flex; 
    height: 100vh; 
} 
section { 
    display: flex; 
    flex-grow: 1; 
} 
main { 
    background: #eee; 
    position: absolute; 
} 
body, .sidebar, .sidebar ul { 
    display: flex; 
    flex-direction: column; 
} 
.sidebar ul { 
    flex-grow: 1; 
} 
.sidebar{ 
    background-color: orange; 
} 
.sidebar ul{ 
    list-style-type: none; 
    padding: 0px 15px 0px 15px; 
    margin:0px; 
    justify-content: space-around; 
} 
0

あなたは別のフレキシボックスにヘッダーやサイドバーをラップすることができます。ここで This is the example

HTML

<div class="flex"> 
    <h1> 
    Header 
    </h1> 
    <div class="sidebar"> 
     <ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
     <li>Item 4</li> 
     <li>Item 5</li> 
     <li>Item 6</li> 
     <li>Item 7</li> 
     </ul> 
    </div> 
</div> 

CSS

.flex{ 
    flex-direction: column; 
} 
.sidebar{ 
    flex:1; 
    display:inline-block; 
    background-color: orange; 
    margin-left: 30px; 
    height: 100vh; 
    top: 0px; 
} 

.sidebar ul{ 
    height: 100%; 
    list-style-type: none; 
    padding: 0px 15px 0px 15px; 
    margin:0px; 
    display: flex; 
    flex-direction: column; 
    justify-content: space-around; 
} 
+0

あなたのHTMLとCSSをSO答えの '<>'エディタに入れて、jsfiddleのようなサードパーティのサイトにリンクしていないライブデモがあるようにしてください。 –

+0

おそらくあなたは正しいです、それは私の個人的な好みです、特に外部のリソースやフレームワークがある場合。私は次回内部エンジンを使うつもりです:) – Baro

関連する問題