Ich habe eine Webapp, mit der ich Flexbox für das Layout verwende.
Ich versuche, sowohl den Bildschirm zu füllen (es ist eine App, kein Dokument) als auch möglichst keine festen Breiten oder Höhen anzugeben, da der Inhalt alles Mögliche sein könnte (Vollflüssiges Layout! Der Traum!)
Ich brauche also eine fließende Höhe, Kopf- und Fußzeilen in voller Breite und dann ein Hauptfeld in der Mitte, das den verbleibenden vertikalen Raum ausfüllt, unterteilt in Spalten, von denen jede scrollt, wenn sie zu hoch ist, und wo die Breite jeder nicht primären Spalte schrumpfen sollte passend zu seinem Inhalt und eine primäre Spalte, die den verbleibenden Platz verbraucht.
Ich bin so nah dran, musste aber darauf zurückgreifen, die Nicht-Hauptspalten explizit zu dimensionieren – das glaube ich flex-basis: content;
soll dies tun, wird aber noch nicht von Browsern unterstützt.
Hier ist ein minimale Demo Anzeigen von Spalten mit fester Größe:
var list = document.querySelector('ul')
for (var i = 0; i < 100; i++) {
var li = document.createElement('li')
li.textContent = i
list.appendChild(li)
}
html,
body {
height: 100%;
width: 100%;
margin: 0;
}
body {
display: flex;
flex-direction: column;
}
main {
display: flex;
flex-direction: row;
overflow: hidden;
}
main > section {
overflow-y: auto;
flex-basis: 10em;
/* Would be better if it were fluid width/shrink to fit, unsupported: */
/* flex-basis: content; */
}
main > section:last-child {
display: flex;
flex: auto;
flex-direction: column;
}
main > section:last-child > textarea {
flex: auto;
}
<header>
<h1>Heading</h1>
</header>
<main>
<section>
<h1>One</h1>
<ul>
</ul>
</section>
<section>
<h1>Two</h1>
</section>
<section>
<header>
<h1>Three</h1>
</header>
<textarea></textarea>
<footer>
<p>Footer</p>
</footer>
</section>
</main>
<footer>
<p>Footer</p>
</footer>
Was so aussieht – ich möchte Spalten Einer und Zwei zu schrumpfen / wachsen, um zu passen, anstatt fixiert zu werden:
Meine Frage ist, gibt es eine Nur-CSS-Problemumgehung für flex-basis: content
oder eine alternative Möglichkeit, dieses Ziel zu erreichen?
Ich kann möglicherweise damit leben, die Spaltengrößen wie oben zu korrigieren oder Javascript zu verwenden, aber ich habe einen verdammten Traum.