Forum: PC-Programmierung Bootstrap: Tabs in Full Page Layout


von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
baut hier jemand Webseiten mit Bootstrap? Ich fange damit gerade erst an 
und bräuchte einen schnellen Tip, wie ich auf einer Seite mit Tabs den 
Tab Content so groß mache, dass er exakt die gesamte verfügbare Fläche 
einnimmt.

Meinen Versuch könnt ihr hier bewundern: https://jsfiddle.net/zqj0yfqx/

Wie ihr dort oder im angehängten Bild1 seht, wird am rechten Rand eine 
unerwünschte Scrollbar erzeugt. Denn anscheinend nimmt der Tab Content 
(auf height:100% gesetzt) nicht die verfügbare Fläche unter den 
nav-tabs ein, sondern die Fläche, die einschließlich der nav-tabs 
verfügbar wäre.

Wenn ich dagegen für den Tab Content "height: calc(100% - 50px)" setze, 
wie im Fiddle auskommentiert, ergibt sich das angehängte Bild2: Die 
Scrollbar ist zwar weg, doch die 50px sind nur ein Schätzwert für den 
Platz, der für die nav-tabs reserviert werden muss. Dieser Wert ändert 
sich je nach Schriftgröße, Browser usw., mit der Folge dass der Content 
nicht immer bis zum unteren Rand reicht, oder dass die Scrollbar doch 
wieder eingeblendet wird.

Wahrscheinlich könnte ich mit Javascript irgendwie die Höhe der nav-tabs 
abfragen und damit jeweils die gewünschte Höhe des Tab Contents 
berechnen und setzen. Ich hoffe aber auf eine reine CSS-Lösung.

Danke
Jens

von Joachim S. (oyo)


Lesenswert?

Eine Möglichkeit, das zu lösen, wäre vielleicht, dass Du zu dem
1
<ul class="nav nav-tabs">
noch die CSS-Klasse "navbar-fixed-top" hinzufügst; und dann im CSS am 
Ende des "body"-Bereiches noch "padding-top: 41px" hinzufügst.
Ist halt auch suboptimal, weil Du auch bei dieser Lösung dann wieder 
einen festen Wert wie "41px" eintragen musst - aber die 
bootstrap-Dokumentation sagt, dass man das so machen soll:

> Body padding required
>
> The fixed navbar will overlay your other content, unless you add padding
> to the top of the <body>. Try out your own values or use our snippet below.

https://getbootstrap.com/docs/3.3/components/#navbar-fixed-top

Ansonsten hättest Du auch z.B. die Möglichkeit, im CSS des 
Body-Bereiches "overflow: hidden" anzugeben, um die Scrollbar 
auszublenden.

von Jens (Gast)


Lesenswert?

Joachim S. schrieb:
> Eine Möglichkeit, das zu lösen, wäre vielleicht, dass Du zu dem<ul
> class="nav nav-tabs">
> noch die CSS-Klasse "navbar-fixed-top" hinzufügst; und dann im CSS am
> Ende des "body"-Bereiches noch "padding-top: 41px" hinzufügst.

Danke, aber diese Tabs sollen nicht am oberen Rand fixiert sein, sondern 
das Beispiel im Fiddle wird später in weiteren <div>s geschachtelt sein.

> Ist halt auch suboptimal, weil Du auch bei dieser Lösung dann wieder
> einen festen Wert wie "41px" eintragen musst

Genau, das löst leider überhaupt nichts.

> aber die
> bootstrap-Dokumentation sagt, dass man das so machen soll:
>
>> Body padding required
>>
>> The fixed navbar will overlay your other content, unless you add padding
>> to the top of the <body>. Try out your own values or use our snippet below.

Soll das heißen, Bootstrap hat keine Lösung für den Fall? Dort wird ja 
auch nur die Defaultgröße angegeben. Ich dachte, Bootstrap soll 
responsive sein. Da kann man sich nun mal nicht auf eine default 
Schriftgröße verlassen.

> Ansonsten hättest Du auch z.B. die Möglichkeit, im CSS des
> Body-Bereiches "overflow: hidden" anzugeben, um die Scrollbar
> auszublenden.

Geht auch nicht, denn der Content muss vollständig sichtbar sein, da 
darf nichts am unteren Rand versteckt sein.

Sag mal, weißt du zufällig welches der beste Weg ist, Bootstrap-Benutzer 
zu erreichen, deren täglich Brot solche Designs sind? Bootstrap nennt 
einen IRC-channel. Ich dachte das gäbs seit 1-2 Jahrtausenden schon 
nicht mehr. Ist das deren Ernst, und lohnt es sich, IRC noch 
einzurichten?

Danke
Jens

von Joachim S. (oyo)


Lesenswert?

Jens schrieb:
> Geht auch nicht, denn der Content muss vollständig sichtbar sein, da
> darf nichts am unteren Rand versteckt sein.

Aber versteckt wäre doch auch nur dann etwas am unteren Rand, wenn der 
Inhalt eh nicht komplett auf eine Seite passt - und in diesem Fall 
bleiben doch eh nur die beiden Möglichkeiten, entweder eine Scrollbar 
einzublenden oder einen Teil am Ende der Seite schlicht nicht sehen zu 
können?

Anyway, was möglicherweise noch eine Option wäre:
Im CSS im body-Bereich "display: flex; flex-direction: column;" angeben. 
Zumindest bei Deinem jsfiddle-Beispiel scheint das den gewünschten 
Effekt zu haben.

> Sag mal, weißt du zufällig welches der beste Weg ist, Bootstrap-Benutzer
> zu erreichen, deren täglich Brot solche Designs sind? Bootstrap nennt
> einen IRC-channel. Ich dachte das gäbs seit 1-2 Jahrtausenden schon
> nicht mehr. Ist das deren Ernst, und lohnt es sich, IRC noch
> einzurichten?

Ich würde mal bei stackoverflow anfragen. Da findet man ja eigentlich 
immer sehr schnell kompetente Hilfe, und letztlich ist das Ganze ja 
vermutlich eh eher ein allgemeines CSS-Problem, als speziell ein 
bootstrap-Problem.

von Jens (Gast)


Lesenswert?

Joachim S. schrieb:
> Jens schrieb:
>> Geht auch nicht, denn der Content muss vollständig sichtbar sein, da
>> darf nichts am unteren Rand versteckt sein.
>
> Aber versteckt wäre doch auch nur dann etwas am unteren Rand, wenn der
> Inhalt eh nicht komplett auf eine Seite passt - und in diesem Fall
> bleiben doch eh nur die beiden Möglichkeiten, entweder eine Scrollbar
> einzublenden oder einen Teil am Ende der Seite schlicht nicht sehen zu
> können?

Nein, im Tab Content werde ich Children hinzufügen, die sich an das 
umgebende Element (=Tab Content) anpassen, so dass dieses immer 
ausgefüllt ist. Wenn aber der Tab Content schon aus der Seite 
herausragt, merken die Children davon nichts und können sich nicht 
entsprechend richtig anpassen.
>
> Anyway, was möglicherweise noch eine Option wäre:
> Im CSS im body-Bereich "display: flex; flex-direction: column;" angeben.
> Zumindest bei Deinem jsfiddle-Beispiel scheint das den gewünschten
> Effekt zu haben.

Du meinst, deine Ergänzung in .body { ... } einfügen? Das habe ich hier 
gemacht: https://jsfiddle.net/Ls4tvupL/
Dennoch sehe ich den Scrollbalken wie vorher. Könntest du das Fiddle 
sonst einmal mit den vorgeschlagenen Änderungen forken und den Link 
posten?

> Ich würde mal bei stackoverflow anfragen. Da findet man ja eigentlich
> immer sehr schnell kompetente Hilfe, und letztlich ist das Ganze ja
> vermutlich eh eher ein allgemeines CSS-Problem, als speziell ein
> bootstrap-Problem.

Danke, das versuche ich mal. Wenn allerdings Bootstrap so gebaut ist, 
dass das Beispiel nur mit Javascript-Callbacks allgemeingültig gelöst 
werden kann, sehe ich dies eher als Problem des Boostrap-Designs, das 
evtl. generelle CSS-Lösungen ausschließt.

Danke
Jens

von Joachim S. (oyo)


Lesenswert?

Jens schrieb:
>> Anyway, was möglicherweise noch eine Option wäre:
>> Im CSS im body-Bereich "display: flex; flex-direction: column;" angeben.
>> Zumindest bei Deinem jsfiddle-Beispiel scheint das den gewünschten
>> Effekt zu haben.
>
> Du meinst, deine Ergänzung in .body { ... } einfügen? Das habe ich hier
> gemacht: https://jsfiddle.net/Ls4tvupL/
> Dennoch sehe ich den Scrollbalken wie vorher. Könntest du das Fiddle
> sonst einmal mit den vorgeschlagenen Änderungen forken und den Link
> posten?

Genau so meinte ich das, ja; und bei mir (Firefox v57) funktioniert 
dieses Fiddle ohne Änderung bereits jetzt: der Tab-Inhalt mit seinem 
rotem/blauem Hintergrund erstreckt sich bis über den gesamten 
gewünschten Bereich, ohne dass Scrollbars angezeigt werden.

Dürfte also am Browser zu liegen. Offenbar muss display: flex etc. bei 
manchen Browsern noch geprefixt werden: "display: flex; display: 
-webkit-flex; display: -ms-flexbox; flex-direction: column; 
-ms-flex-direction: column; -webkit-flex-firection: column;"
https://jsfiddle.net/vahrqk62/

von Jens (Gast)


Lesenswert?

Tatsache, mit Firefox klappt es, wie ich es mir vorstelle.
Mit Chrome bleibt die Scrollbar da.

Immerhin habe ich nun einen Anhaltspunkt, von dem aus ich weiter 
recherchieren kann. Vielen Dank!

Jens

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.