2015-05-26 10 views
5

Ich versuche, ein Design, wo ich möchte eine linke Leiste für die Navigation und Dinge, die behoben werden und nicht Bildlauf, sondern ein Inhaltsfeld daneben, die Scrollen nach Bedarf. Das Problem, auf das ich stoße, wenn ich position: fixed; das erste DIV es technisch mache, was ich will, aber es überlappt das zweite DIV. Ich erschaffe das einfach und benutze JsFiddle, um einfach zu testen, also habe ich keinen anderen Code als diese Geige. Ich gebe zu, ich bin jetzt seit ungefähr 30 Stunden wach, also wenn mir das wirklich dumm ist, bitte vergib mir. Vielen Dank!Kann man zwei DIVs nebeneinander ausrichten, wenn einer fest ist?

FIDDLE

+0

Entfernen Sie Floats von eins und zwei und fügen Sie 'margin-left: 150px;' zu zwei hinzu. Dies ist ein anderer Weg. Wie http://jsfiddle.net/ypL8ypsf/4/ – Elyor

+0

'Position: fixed' ist relativ zu Fenster, nicht das Elternelement. –

+0

@ protocaolzzero, meine Lösung, ist die Lösung, die Sie brauchen;) Fragen Sie mich, wenn Sie irgendwelche Schwierigkeiten haben! –

Antwort

2

Ich habe versucht, lösen diesen Code zu schreiben, und es ist auch ansprechbar.

* { 
    padding: 0px; 
    margin: 0px; 
} 
#one { 
    float: left; 
    position: fixed; 
    width: 25%; 
    background: #666; 
    height: 100%; 
} 
#two { 
    box-sizing: border-box; 
    padding: 20px; 
    position: absolute; 
    left: 25%; 
    right: 0%; 
    float: right; 
    width: 75%; 
    background: #333; 
} 

Ich hoffe, das hilft.

+0

Dies ist die beste Antwort, die ich auf die Frage in der Art und Weise, wie ich es formuliert habe, gesehen habe, was ich zugeben werde, war sehr schlecht. Vielen Dank! –

0

Versuchen Sie, Ihre aktuellen float und position Stile mit zwingenden:

float: left; und
position: relative;

+0

Ich brauchte die erste Spalte, um behoben zu bleiben und nicht zu scrollen, so dass mein Problem nicht gelöst wurde. Trotzdem danke! –

0

Statt Festsetzung dass DIV, ich habe sie schweben sowohl auf der linken Seite und geben die zweite DIV Überlauf-y Bildlaufeigenschaft.

Hope this Sie helfen können:

#wrap { 
    background: #999; 
    width: 500px; 
    height: 400px; 
    border: 1px solid black; 
    padding: 5px; 
} 
#one { 
    float: left; 
    width: 25%; 
    background: #666; 
    height: 100%; 
    overflow:hidden; 

} 
#two { 
    float: left; 
    width: 75%; 
    background: #333; 
    height: 100%; 
    overflow-y: scroll; 
} 
.clear { 
    clear: both; 
} 

Wenn es Sie immer nicht usefull einige Rahmen mit Standard Sidebars versuchen.

+0

Diese Lösung hat fast funktioniert, aber das Problem kam mit meiner schrecklichen Erklärung meines Problems. Die Wrap Box, die ich in der Geige eingerichtet hatte, war nur ein Browserfenster zu emulieren, das sollte nicht so bleiben. Ich weiß, dass Sie das nicht wussten, und ich entschuldige mich für meine schlechte Erklärung. Trotzdem danke! –

0

Obwohl Sie dem zweiten div etwas Marge hinzufügen könnten, um es nach rechts zu verschieben, denke ich nicht, dass Sie dafür fixed verwenden sollten. Sie sollten dies tun:

<div class="div1">This is not moving</div> 
<div class="div2"> Loren ipsum...</div> 

html, body{ 
    height: 100%; 
    padding: 0; 
    margin: 0; 
} 
.div1{ 
    background: #DDD; 
    width:40%; 
    height: 100%; 
    float: left; 
    overflow: hidden; 
} 
.div2{ 
    background: #EEE; 
    width:60%; 
    height: 100%; 
    float: left; 
    overflow-y:auto; 
} 

Hier ist ein Stift für Sie: http://codepen.io/vandervals/pen/bdBWJV

+0

Diese Lösung hat das Problem nicht gelöst, aber ich sehe, wohin du gehst. Ich hatte eigentlich nicht vor, meine beiden Spalten in einem solchen Wrapper zu belassen, dieser Wrapper sollte nur ein Browserfenster emulieren. Danke aber, ich weiß deine Antwort zu schätzen! –

0

ich es geschafft, zu tun, was Sie wollen, aber um mehr div hinzufügen. die HTML würde

<div id="wrap"> 
<div id="testone"><div id="one"></div></div> 
<div id="test"><div id="two">Lorem ipsum... 
</div></div> 
<div class="clear"></div> 

und die CSS dann

#wrap { 
background: #999; 
width: 500px; 
height: 400px; 
border: 1px solid black; 
padding: 5px; 
overflow: scroll; 
} 
#testone{ 
float: left; 
width: 25%; 
background: #666; 
height: 100%; 
} 
#one { 
position: fixed; 
} 
#test{ 
float: right; 
width: 75%; 
height: 100%; 
} 
#two { 
background: #333; 
} 
.clear { 
clear: both; 
} 
+0

Das hat fast funktioniert!Das Problem (und ich weiß, dass ich das nicht richtig erklärt habe) besteht darin, dass ich den Hintergrund der ersten Spalte fixieren musste, um ein Bild zu überlagern und transparent zu machen. Vielen Dank, ich schätze es sehr! –

1

sein, wenn Sie hinzufügen position:fixed das Element aus dem Fluss und seine grundsätzlich Funktionen in Bezug auf das Fenster genommen wird.

so das folgende CSS:

#one { 
    float: left; 
    position: fixed; 
    width: 25%; 
    background: #666; 
    height: 100%; 
} 

25% 25% des Fensters nicht mehr als 25% der <div id="wrap"> (und somit die Überlappung), wenn Sie die position:fixed Sie keine Überlappung sehen ausziehen.

mit Position fixiert, möchten Sie wahrscheinlich etwas links auf <div id="two"> versetzt haben, Sie cal Experiment mit:

margin-left: // DO YOUR MATH. 

padding-left: // DO YOUR MATH. 
+1

Sie sind absolut richtig! Das hätte das Problem behoben, wenn ich es richtig formuliert hätte. Ich hätte entweder Ihre Rand- und Padding-Lösung verwenden oder meinen Spalten einen kleineren Prozentsatz zuweisen können, um die Überlappung auszugleichen. Danke, dass du deine Lösung so detailliert erklärt hast, dass du mir wirklich geholfen hast! :) –

1

Sie haben bereits height: 400px; auf über div so die Höhe zu #one angeben zu http://jsfiddle.net/ypL8ypsf/5/

#one { 
    position:fixed; 
    width:16%; 
    background: #666; 
    height:384px; 
} 

Hoffe, das wird helfen

+0

Danke! Der Grund, warum ich die Höhe dort eingestellt hatte, war ein Browserfenster zu emulieren, die tatsächliche Live-Version wird diese eingestellte Höhe nicht haben. Danke, das war technisch eine richtige Antwort auf meine schlecht formulierte Frage, aber Jugal Panchals Antwort passt am besten zu meiner Lösung. Vielen Dank noch einmal! –

1

Dies ändert sich in css Ihr Problem

#wrap { 
background: #999; 
width: 500px; 
height: 400px; 
border: 1px solid black; 
padding: 5px; 
overflow: scroll; 
} 
#one {  
position: fixed; 
width: 25%; 
background: #666; 
height: 100%; 
display:inline-block; 
} 
#two {  
width: 70%; 
background: #333; 
height: 100%; 
display:inline-block; 
overflow:hidden; 
margin-left:29%; 
} 
.clear { 
clear: both; 
} 
+0

Dies hat das Problem nicht gelöst. Es hat die Überlappung verlassen. Sie haben jedoch eine Alternative zur Verwendung eines Floats zur Verfügung gestellt, von dem ich nichts wusste! Danke für das! –

1

Wenn Sie Position: an einem Element festgelegt haben. Es kann nur durch das Browserfenster gesteuert werden, kann nicht durch Eltern div. Wenn Sie also die Breite hinzufügen: 25% füllt es 25% Ihres Browserfensters. nicht im Elternteil div.

ich habe 2 Lösungen,

  1. Javascript verwenden. dynamisch Breite in 'px' hinzufügen und Position hinzufügen: behoben nach
  2. Position verwenden: absolut. statt fest. (Eigentlich Ihre Höhe beträgt 100%, so spielt es keine Rolle Ihrer Position fixiert.)

1nd Lösung: Javascript-Ansatz [Beispielcode]:

//remove position:fixed from #one 
#one { 
    float: left; 
    width: 25%; 
    background: #666; 
    height: 100%; 
} 

<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script> 

<script type="text/javascript"> 
    var calWidth = $("#one").width(); //get the width 
    $("#one").css({width:calWidth+'px',position:'fixed'}); //apply to the div 
</script> 

2. Lösung: CSS Ansatz [ Beispielcode]

#wrap{ 
    position:relative; 
} 
#one{ 
    position:absolute; 
} 
+0

Ihre Antwort hat mich am meisten beeindruckt! Nur Ihr Verständnis von Javascript allein war nett! Ich habe versucht, Ihre Lösungen und sie beide haben funktioniert, aber das Javascript schien ein wenig Overkill für mein eigentliches Problem. Vielen Dank, ich schätze es sehr! –

Verwandte Themen