Buero-Szene fuellt den sichtbaren Bereich statt Full-Screen zu erwarten
Die Szene war auf volle Fensterbreite ausgelegt und lief im normalen Fenstermodus unten aus dem Bild (bei 1440x700 z.B. um 232px). - body als Flex-Spalte ueber die Viewport-Hoehe. Bewusst height statt min-height: nur eine definite Hoehe laesst die prozentualen max-height-Angaben der Szene aufloesen. - #office-scene nimmt die Resthoehe (flex: 1, min-height: 0) und zentriert das SVG. - Das SVG richtet sich an der jeweils knapperen Achse aus - zwei Media-Queries auf 16/9 schalten zwischen hoehen- und breitenbegrenzt um, max-width/max-height sind das Sicherheitsnetz fuer den Grenzbereich (die Header-Hoehe geht in das Verhaeltnis der Szenenflaeche ein, in die Media-Query aber nicht). - Bei knappem Platz weicht der erklaerende Fliesstext im Header. Gemessen in Chromium ueber 1920x1080 bis 500x900: kein Overflow, Seitenverhaeltnis durchgehend exakt 16:9. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
daef7a2926
commit
cfe82b6a4d
1 changed files with 69 additions and 7 deletions
|
|
@ -24,15 +24,32 @@
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Die Szene soll immer vollstaendig sichtbar sein - auch im normalen Fenstermodus,
|
||||||
|
ohne Scrollen. Dazu spannt der body eine Flex-Spalte ueber die Viewport-Hoehe auf:
|
||||||
|
Header nimmt seine natuerliche Hoehe, #office-scene bekommt den Rest, und das SVG
|
||||||
|
skaliert sich per aspect-ratio in diesen Rest hinein (siehe unten). */
|
||||||
|
html {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: "Segoe UI", Verdana, Arial, sans-serif;
|
font-family: "Segoe UI", Verdana, Arial, sans-serif;
|
||||||
background: #dbe7f3;
|
background: #dbe7f3;
|
||||||
color: var(--color-text);
|
color: var(--color-text);
|
||||||
|
/* height (nicht min-height): Nur eine definite Hoehe laesst die prozentualen
|
||||||
|
max-height-Angaben weiter unten aufloesen. dvh rechnet mobile Browserleisten
|
||||||
|
mit, vh ist der Fallback fuer aeltere Engines. */
|
||||||
|
height: 100vh;
|
||||||
|
height: 100dvh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
header.office-header {
|
header.office-header {
|
||||||
padding: 16px 24px;
|
flex: 0 0 auto;
|
||||||
|
padding: 12px 24px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
gap: 16px;
|
gap: 16px;
|
||||||
|
|
@ -50,20 +67,65 @@ header.office-header p {
|
||||||
}
|
}
|
||||||
|
|
||||||
#office-scene {
|
#office-scene {
|
||||||
width: 100%;
|
flex: 1 1 auto;
|
||||||
max-width: 1920px;
|
/* min-height: 0 hebt die Flex-Default-Mindesthoehe (min-content) auf - sonst kann
|
||||||
margin: 0 auto;
|
das Kind den Container nicht unterschreiten und die Szene laeuft aus dem Bild. */
|
||||||
padding: 0 16px 32px;
|
min-height: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 0 16px 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Das SVG soll sich an der jeweils knapperen Achse ausrichten. Welche das ist, haengt
|
||||||
|
vom Seitenverhaeltnis des Fensters ab - daher die beiden Media-Queries unten. Die
|
||||||
|
max-*-Grenzen sind das Sicherheitsnetz fuer den Grenzbereich (die Header-Hoehe geht
|
||||||
|
in das Verhaeltnis der Szenenflaeche ein, in die Media-Query aber nicht): Dort wird
|
||||||
|
die Elementbox notfalls leicht gestaucht - der Szeneninhalt bleibt dank
|
||||||
|
preserveAspectRatio unverzerrt und vollstaendig sichtbar. */
|
||||||
.office-svg {
|
.office-svg {
|
||||||
width: 100%;
|
max-width: 100%;
|
||||||
height: auto;
|
max-height: 100%;
|
||||||
|
aspect-ratio: 1920 / 1080;
|
||||||
display: block;
|
display: block;
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
box-shadow: 0 10px 30px rgba(15, 23, 42, 0.25);
|
box-shadow: 0 10px 30px rgba(15, 23, 42, 0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fenster breiter als 16:9 -> die Hoehe ist der Engpass. */
|
||||||
|
@media (min-aspect-ratio: 16 / 9) {
|
||||||
|
.office-svg {
|
||||||
|
height: 100%;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fenster schmaler als 16:9 -> die Breite ist der Engpass. */
|
||||||
|
@media (max-aspect-ratio: 16 / 9) {
|
||||||
|
.office-svg {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Bei knappem Platz weicht zuerst der erklaerende Fliesstext - er kostet in flachen
|
||||||
|
oder schmalen Fenstern mehrere Zeilen Hoehe, die der Szene fehlen. */
|
||||||
|
@media (max-height: 640px), (max-width: 760px) {
|
||||||
|
header.office-header p {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-height: 640px) {
|
||||||
|
header.office-header {
|
||||||
|
padding: 8px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header.office-header h1 {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.floor {
|
.floor {
|
||||||
fill: var(--color-floor);
|
fill: var(--color-floor);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue