2017-05-03 3 views
0

Ich möchte ein bestimmtes Layout für eine Einstellungsansicht erstellen. Dies ist, wie es aussehen soll: MockupCSS: Seitenleiste 100% Anzeigehöhe ohne überlappende Navigationsleiste. (individuelle Nav Höhe)

Es ist ein Fest Navigation bar auf die Seite links und der Inhalt auf dem rechts kann unabhängig gescrollt werden. Die Navigationsleiste auf der linken Seite sollte immer die komplette Seite mit Ausnahme der Navigationsleiste ausfüllen.

Ich weiß, ich könnte die linke Navigation position:fixed machen und es zu einem der Top-Navigationshöhenversatz geben, aber die Höhe der Navigation ändert sich dynamisch.

Gibt es also eine dynamische Lösung?

body, 
 
html { 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
h1 { 
 
    margin: 0; 
 
} 
 

 
.lorem { 
 
    background-color: Gainsboro; 
 
    height: 100px; 
 
    margin: 10px; 
 
} 
 

 
#nav-top { 
 
    height: 100px; 
 
    Background-color: SeaGreen; 
 
} 
 

 
#nav-sub { 
 
    height: 30px; 
 
    Background-color: YellowGreen; 
 
} 
 

 
.content { 
 
    position: relative; 
 
} 
 

 
.left-nav { 
 
    position: fixed; 
 
    background-color: Teal; 
 
    top: 0; 
 
    margin: 0; 
 
    bottom: 0; 
 
    z-index: 2; 
 
}
<div id="nav-top"> Navigation</div> 
 
<div id="nav-sub"> Subnavigation</div> 
 
<ul class="left-nav"> 
 
    <li>Item</li> 
 
    <li>Item</li> 
 
    <li>Item</li> 
 
    <li>Item</li> 
 
    <li>Item</li> 
 
</ul> 
 

 
<div class="content"> 
 
    <h1>Scrollable Content</h1> 
 
    <div class="lorem"> 
 
    </div> 
 
    <div class="lorem"> 
 
    </div> 
 
    <div class="lorem"> 
 
    </div> 
 
    <div class="lorem"> 
 
    </div> 
 
    <div class="lorem"> 
 
    </div> 
 
</div>

Dies ist der Link zu meinem JSFiddle: Vielen Dank für jede Hilfe!

+0

Ist das, was Sie wollen? https://jsfiddle.net/webbm/rL3cjf9k/2/ – webbm

+0

@ webbm Fast kann ich noch nicht den Inhalt mit dieser Lösung scrollen. Der Inhalt unter dem ersten ipsum-div ist nicht sichtbar und kann nicht in die Ansicht gescrollt werden. – HelloWorld0815

+0

Was bewirkt, dass sich die Höhe des Headers dynamisch ändert? Nach Benutzeraktion auf einer Seite? Seite zum Seiteninhalt? –

Antwort

0

Warum nicht stattdessen eine Tabelle verwenden?

body, html { 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
h1{ 
 
    margin:0; 
 
} 
 

 
.lorem{ 
 
    background-color: Gainsboro; 
 
    height: 100px; 
 
    margin:10px; 
 
} 
 

 
#nav-top{ 
 
    height:100px; 
 
    Background-color:SeaGreen; 
 
} 
 
#nav-sub{ 
 
    height:30px; 
 
    Background-color:YellowGreen; 
 
} 
 

 
.content{ 
 
    width:100%; 
 
} 
 

 
.left-nav { 
 
    background-color: Teal; 
 
    vertical-align: top; 
 
}
<div id="nav-top"> Navigation</div> 
 
<div id="nav-sub"> Subnavigation</div> 
 

 
<table><tr class="left-nav"> 
 
<td> 
 
    <ul> 
 
    <li>Item</li> 
 
    <li>Item</li> 
 
    <li>Item</li> 
 
    <li>Item</li> 
 
    <li>Item</li> 
 
    </ul> 
 
</td> 
 
<td class="content"> 
 
    <div > 
 
     <h1>Scrollable Content</h1> 
 
     <div class="lorem"> 
 
     </div> 
 
      <div class="lorem"> 
 
     </div> 
 
      <div class="lorem"> 
 
     </div> 
 
      <div class="lorem"> 
 
     </div> 
 
      <div class="lorem"> 
 
     </div> 
 
    </div> 
 
</td> 
 
</tr> 
 
</table>

+0

Ich weiß nicht, wie Sie das mit Tabellen machen würden. Um die td-Höhe auf die gewünschte Höhe zu bringen, tritt das gleiche Problem erneut auf. Ihr Code führt zu merkwürdigem Verhalten. Es sieht nicht wie das Modell aus, das ich gezeichnet habe. – HelloWorld0815

+0

@ HelloWorld0815 Ich habe den Code aktualisiert, der besser aussehen sollte. – Neil

+0

Fast möchte ich die linke Navigation klebrig sein, so dass die Elemente beim Scrollen immer sichtbar sind. – HelloWorld0815

0

Anwenden Breite und Höhe auf Körper und festen Abmessungen gelten für den Header, Seitenleiste und Hauptinhalt.

body { 
 
    width: 100vw; 
 
    height: 100vh; 
 
    margin: 0; 
 
    padding: 0; 
 
    display: flex; 
 
    flex-wrap: wrap; 
 
    overflow: hidden; 
 
} 
 

 
header { 
 
    width: 100%; 
 
    min-height: 100px; 
 
    background-color: rgb(103, 194, 33); 
 
    display: flex; 
 
    align-items: center; 
 
    box-sizing: border-box; 
 
    padding: 5%; 
 
} 
 

 
aside { 
 
    width: 20%; 
 
    max-height: calc(100% - 100px); 
 
    background-color: rgb(159, 159, 159); 
 
} 
 

 
ul { 
 
    list-style: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    display: flex; 
 
    flex-direction: column; 
 
    align-items: center; 
 
} 
 

 
li { 
 
    padding: 5%; 
 
} 
 

 
main { 
 
    width: 80%; 
 
    max-height: calc(100% - 100px); 
 
    overflow-x: hidden; 
 
    overflow-y: scroll; 
 
    box-sizing: border-box; 
 
    padding: 2.5%; 
 
} 
 

 
.container { 
 
    width: 100%; 
 
    height: 25%; 
 
    background-color: rgb(223, 223, 223); 
 
    margin-bottom: 2.5%; 
 
}
<header>Brand</header> 
 
<aside> 
 
    <ul> 
 
    <li>item</li> 
 
    <li>item</li> 
 
    <li>item</li> 
 
    <li>item</li> 
 
    </ul> 
 
</aside> 
 
<main> 
 
    <h1>Some Content</h1> 
 
    <div class="container"></div> 
 
    <div class="container"></div> 
 
    <div class="container"></div> 
 
    <div class="container"></div> 
 
    <div class="container"></div> 
 
    <div class="container"></div> 
 
    <div class="container"></div> 
 
</main>

+0

Ich kenne die Kopfhöhe nicht, da sie sich dynamisch ändert. Ich möchte auch, dass die Kopfzeile eine statische Höhe hat, um sicherzustellen, dass sie auf Mobilgeräten und Desktops dieselbe Höhe hat. Daher kann ich keine% -Werte verwenden, stattdessen muss ich mich an absolute Werte halten. Außerdem ist diese Lösung für mein Setup schwer anwendbar, da die Elemente in mehr Tags eingebettet sind. Um es mit 100% arbeiten zu können, müsste ich jedes Eltern-Div auch auf 100% Höhe setzen. (Breaking andere Dinge) – HelloWorld0815

+0

Wenn Sie nicht wissen, die Höhe der Header, warum stellen Sie es auf 100px für? Der Prozentwert ist nicht erforderlich. Sie können es auf jede gewünschte Höhe einstellen. Ich werde den Code aktualisieren, um das zu zeigen. Und für andere Dinge müssen Sie Ihren Code aktualisieren, wenn Sie sie sowieso in Ihren scrollbaren Teil einfügen wollen. –

+0

Ich setze ihn auf 100px, um das Beispiel so einfach wie möglich zu halten und es auf sein Kern- "Problem" zu reduzieren.In der realen Anwendung gibt es einige Medienabfragen und Benutzeraktionen, die Elemente innerhalb der Kopfzeile ändern, was zu einer dynamischen Höhe führt, die ich nicht sicher vorhersagen kann. Auch 'height: calc (100% - 100px);' müsste ich wissen, dass der Offset 100px ist. – HelloWorld0815