2012-04-11 5 views
2

Ich versuche, eine Bildlaufleiste innerhalb der #main div zu erstellen, so dass ich das Bild ohne Bildlauf der Seite oder des Titels scrollen kann, aber es funktioniert nicht. Was vermisse ich?Erstellen einer Bildlaufleiste in einer Seitenleiste

Mein Code ist wie folgt:

CSS

#topbar { 
    height: 40px; 
    background-color: blue; 
} 

#sidebar { 
    position: absolute; 
    top: 40px; 
    bottom: 0px; 
    width: 80px; 
    overflow: hidden; 
} 

#title { 
    height:30px; 
    background-color: red; 
} 

#main { 
    height: auto; 
    overflow: scroll; 
} 

HTML

<div id="topbar"> 
    hello 
</div> 
<div id="sidebar"> 
    <div id="title"> 
     title 
    </div> 
    <div id="main"> 
     <!-- lots and lots of text--> 
    </div> 
</div> 

Sie ein Beispiel JSFiddle finden Sie hier: http://jsfiddle.net/PTRCr/

Dank

+1

'Überlauf: scroll' in der Seitenleiste und in main. Sie haben 'overflow: hidden' – nmagerko

+0

, aber das scrollt den Titel mit dem Haupt. Ich möchte den Titel an der Spitze beheben – dan

+0

Ich verstehe; Ich habe es versäumt, das zu lesen. Ich würde tippen, was in der Antwort unten steht, aber das ist Diebstahl. – nmagerko

Antwort

0

Das Element Sie wollen scrollbaren sein, sollte

  • Haben Höhe und Breite definiert
  • Attribut haben overflow:auto

Beispiel:

.scrollArea { 
width: 275px; 
height: 100px; 
padding-left: 5px; 
padding-right: 5px; 
border-color: #6699CC; 
border-width: 1px; 
border-style: solid; 
float: left; 
overflow: auto; 
} 
+0

was ist, wenn ich die Höhe nicht kenne. Ich möchte, dass die Höhe die Browserhöhe ist - der Titel - die Topbar. Aber ich kenne die Höhe des Browsers des Titels nicht. – dan

0

In Ihrem Fall CSS ändern:

#sidebar { 
position: absolute; 
top: 40px; 
bottom: 40px; 
width: 80px; 
overflow: scroll; 
} 
+0

gibt es eine Möglichkeit, die Spitze automatisch zu berechnen, wenn ich die Höhe des Titels nicht kenne? – dan

+0

nop ich glaube nicht, dass es durch css getan wird. Aber es gibt nicht unmöglich in www Welt :). –

+0

meinst du, ich muss js verwenden, um es zu tun? – dan

0

Sie sollten die height der <div id="main" definieren, um die Bildlaufleiste darauf anzuzeigen. ob Sie es mit Javascript oder jquery berechnen.

#topbar { 
    height: 40px; 
    background-color: blue; 
} 

#sidebar { 
    position:absolute; 
    top: 40px; 
    bottom: 40px; 
    width: auto; 
    height:200px; 
    overflow: hidden; 
} 

#title { 
    height:30px; 
    background-color: red; 
} 

#main { 
    height: 100px; 
    width: 100%; 
    overflow:auto; 
} 

Überprüfen Sie diese aktualisierte jsFiddle.

+0

die jsFiddle hat die Höhe auf 200px nicht 100% gesetzt. Ich möchte, dass es bis zum Ende der Seite gefüllt wird. Wenn Sie es auf 100% ändern, wird das Teil des Bereichs nach dem Ende der Seite ausgeblendet – dan

+0

Legen Sie die Höhe nach Ihrer Anforderung und überprüfen Sie jetzt die aktualisierte JSfiddle. –

+0

Die aktualisierte js Fiddle hat den Titel Scrollen mit dem Haupt. Ich möchte nur die wichtigsten zu scrollen – dan

1

CSS sind Stylesheets, deren einziger Zweck es ist, Dokumente zu formatieren. Sie können keine bereits vorhandenen Elemente untersuchen.

Die einzigen Möglichkeiten sind, ob die Größe des Divs korrigiert werden muss oder Sie ein wenig JavaScript verwenden müssen, um die genaue Höhe herauszufinden. Die Möglichkeiten, dies mit CSS zu erreichen, wurden bereits von anderen Anwendern vorgestellt.

So, hier ist eine Möglichkeit, Sie mit jQuery tun können

$("#main").height($(document).innerHeight()-$("#title").outerHeight() - $("#topBar").outerHeight()); 

Demo

0

Sie müssen sich für #main Höhe einzustellen.Es arbeitet bei http://jsfiddle.net/PTRCr/7/

#main { 
    height: 100px; 
    overflow-y: scroll; 
} 
+0

folgen, aber ich möchte es nach unten gehen des Bildschirms – dan

0

Es ist nur möglich, wenn Sie die Höhe Ihres #title wissen, in beiden px oder als Prozentsatz des übergeordneten Containers

#title in px gesetzt jsFiddle

#main { 
    position:absolute; 
    top:30px; /* set this to whatever you have set the height of #title to*/ 
    bottom:0px; 
    overflow-y: scroll; 
} 

#title als% jsFiddle eingestellt - getestet im IE/FF/Chrome

2

Sie sind sti Ich sehe auf dieses Projekt. Es gibt auch viele Antworten, aber ich sehe, dass niemand ein funktionierendes Beispiel dafür gemacht hat, wonach ich glaube.

Here's a working Beispiel, dass (ich hoffe) tut, was ich denke, dass Sie fragen.

Ich habe Content Shifting Wrapper hinzugefügt, so dass die Höhe immer noch 100% betragen kann. Sie können mehr über diese Technik von this answer lesen. Ich habe auch diese absolute Positionierung entfernt, ich sehe keinen Grund, warum du das tun solltest.

Jeder Wrapper passt den vorherigen Inhalt an, zuerst den oberen Balken mit der Höhe 40px und dann den Titel mit 30px.

Dieses Beispiel sollte auch Ihren vorherigen Spezifikationen entsprechen, wobei die Bildlaufleisten bei der Größenanpassung auf derselben Grundlinie bleiben.

preview

Wie Sie durch den Code unten sehen können, ist es möglich, eine CSS einzige Lösung trotz was andere führen Sie zu glauben, zu tun haben. Es braucht nur ein paar Tricks aus der Tasche von CSS Holding.

Mann, ich bin so ein Depp.


Example |

Code

HTML

<div id='container'> 
    <div id="top-bar">hello</div> 
    <div class="wrapper"> 
     <div class="side-bar"> 
      <div class="title">title</div> 
      <div class="content_wrapper"> 
       <div class="content">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur gravida interdum dignissim. Aenean quis neque diam, ac vehicula turpis. Vestibulum lacinia libero sed massa fringilla tempor. Donec dictum metus ac justo congue lacinia sit amet quis nisi. Nam sed dolor vitae nisi venenatis imperdiet ut ullamcorper sem. Maecenas ut enim in massa ultricies lacinia quis nec lorem. Etiam vel lacus purus, a placerat lectus. Ut sed justo eros. Curabitur consequat nisi ut diam lacinia at posuere purus tristique. Quisque eu dapibus nunc.</div> 
      </div> 
     </div><div class="side-bar"> 
      <div class="title">title</div> 
      <div class="content_wrapper"> 
       <div class="content">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur gravida interdum dignissim. Aenean quis neque diam, ac vehicula turpis. Vestibulum lacinia libero sed massa fringilla tempor. Donec dictum metus ac justo congue lacinia sit amet quis nisi. Nam sed dolor vitae nisi venenatis imperdiet ut ullamcorper sem. Maecenas ut enim in massa ultricies lacinia quis nec lorem. Etiam vel lacus purus, a placerat lectus. Ut sed justo eros. Curabitur consequat nisi ut diam lacinia at posuere purus tristique. Quisque eu dapibus nunc.</div> 
      </div> 
     </div><div class="side-bar"> 
      <div class="title">title</div> 
      <div class="content_wrapper"> 
       <div class="content">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur gravida interdum dignissim. Aenean quis neque diam, ac vehicula turpis. Vestibulum lacinia libero sed massa fringilla tempor. Donec dictum metus ac justo congue lacinia sit amet quis nisi. Nam sed dolor vitae nisi venenatis imperdiet ut ullamcorper sem. Maecenas ut enim in massa ultricies lacinia quis nec lorem. Etiam vel lacus purus, a placerat lectus. Ut sed justo eros. Curabitur consequat nisi ut diam lacinia at posuere purus tristique. Quisque eu dapibus nunc.</div> 
      </div> 
     </div><div class="side-bar"> 
      <div class="title">title</div> 
      <div class="content_wrapper"> 
       <div class="content">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur gravida interdum dignissim. Aenean quis neque diam, ac vehicula turpis. Vestibulum lacinia libero sed massa fringilla tempor. Donec dictum metus ac justo congue lacinia sit amet quis nisi. Nam sed dolor vitae nisi venenatis imperdiet ut ullamcorper sem. Maecenas ut enim in massa ultricies lacinia quis nec lorem. Etiam vel lacus purus, a placerat lectus. Ut sed justo eros. Curabitur consequat nisi ut diam lacinia at posuere purus tristique. Quisque eu dapibus nunc.</div> 
      </div> 
     </div> 
    </div> 
</div> 

CSS

body, html{ 
    height:100%; 
    width: 100%; 
    line-height: 100%; 
    margin: 0;   /* Normalization */ 
    padding: 0;   /* Normalization */ 
} 

div{ 
    box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
} 

#container{ 
    height:100%; 
    width: 100%; 
    text-align: center; 
    overflow: auto; 
} 

#top-bar{ 
    height: 40px; 
    line-height: 40px; 
    border: 1px solid lightblue; 
    background: blue; 
    color: white; 
    text-align: center; 
} 

.side-bar { 
    width: 120px; 
    height: 100%; 
    text-align: center; 
    color: white; 
    border: 1px solid DarkOrchid; 
    display: inline-block; 
    vertical-align: top; 
} 

.title { 
    height:30px; 
    line-height: 30px; 
    border: 1px solid salmon; 
    background: red; 
} 

.wrapper{ 
    margin-top: -40px; 
    padding-top: 40px; 
    height: 100%; 
    width: 100%; 

    white-space: nowrap; 
} 

.wrapper > div{ 
    white-space: normal; 
} 

.content_wrapper{ 
    margin-top: -30px; 
    padding-top: 30px; 
    height: 100%; 
} 

.content{ 
    color: black; 
    height: 100%; 
    overflow: auto; 
} 
+0

Ich entdeckte nach der Anpassung dieser Lösung in meiner Website, dass es nicht in IE7 funktioniert. Wenn Sie in IE7 zu Ihrer Geige gehen, werden alle Seitenleisten vertikal anstatt horizontal gestapelt. :( – Barmar

+1

@Barmar Sie haben Recht. Ich mag nicht, IE7 oder irgendwelche seiner anderen Vorgänger zu unterstützen. Wenn alle Web-Entwickler weiterhin sie unterstützen, werden sie nie weggehen. Dieser CSS-Trick funktioniert nicht in IE7. – ShadowScripter

+0

At Mindestens 7% meiner Kunden nutzen IE7. Sie ist klein, aber nicht klein genug, um sie zu entmündigen. Glücklicherweise kann ich nach dem IE7 suchen und einfach das Stylesheet verwenden, das ich entwickelt habe, bevor ich Ihren Code entdeckt habe Trennen Sie die Teile, die für den Bildlauf spezifisch sind, so dass ich den Rest in einem gemeinsamen Stylesheet aufbewahren kann – Barmar