Ich habe jetzt eine Lösung.
Zuerst werden Bildgrößen angelegt
Code:
Image 1/1 904x (100%) - CSS-Klasse img_1_1
Image 1/2 452x (100%) - CSS-Klasse img_1_2
Image 1/3 302x (100%) - CSS-Klasse img_1_3
Image 1/4 226x (100%) - CSS-Klasse img_1_4
Dann erstellt man ein paar Variablen
PHP-Code:
:root {
--main-padding-x: 3rem;
--main-padding-y: 3rem;
--max-width : 1000px;
--inner-width : calc( var(--max-width) - 2 * var(--main-padding-x) );
}
Dann das CSS für Textelemente mit Bild
PHP-Code:
.ce_text figure {
width: min-content;
}
img[class^=img_1_] {
--dividend: 1;
min-width: min( calc( var(--inner-width) / var(--dividend) ), calc( (100vw - 2 * var(--main-padding-x)) / var(--dividend) ) );
}
img.img_1_2 {
--dividend: 2;
}
img.img_1_3 {
--dividend: 3;
}
img.img_1_4 {
--dividend: 4;
}
Der Knackpunkt war width: min-content; für figure und min-width: [ein Pixelwert]; für das img.
Das Elternelement brauch dabei keine extra Klasse mehr.
Das min(...) wird benötigt, damit bei großer Viewportbreite die Breite aus der im .inside zur Verfügung stehenden Breite errechnet wird. Wird der Viewport dann kleiner als die max-width, wird die Breite aus dem Viewport errechnet. Prozentuale Werte haben dabei nicht funktioniert, es mussten entweder Pixelwerte oder Viewportbreite vw benutzt werden.
Ein 1/3 Image behält also beim Zusammenschieben des Viewports die Breite eines Drittels.
Mit Media-Queries kann man die Breite dann anpassen, wenn der Viewport kleiner wird.
PHP-Code:
/* ... less than 485px ...
-----------------------------------------------*/
@media (max-width: 484px) {
main .inside { /* optional */
--main-padding-x: 1.5rem;
--main-padding-y: 1.5rem;
}
img.img_1_2 {
--dividend: 1;
}
img.img_1_3,
img.img_1_4 {
--dividend: 2;
}
}
/* ... less than 485px ... END
-----------------------------------------------*/
Die Umsetzung war mit Floats. Ich werde auch nochmal mit Flex und Grid testen.
Weiteres CSS, was dort noch im Einsatz ist und eventuell eine Rolle spielen könnte
PHP-Code:
#wrapper {
margin-inline: auto;
width: var(--max-width);
max-width: 100vw;
min-height: 100vh;
box-sizing: border-box;
display: grid;
grid-template-rows: auto 1fr auto; /* header, container, footer */
}
main .inside {
padding: var(--main-padding-y) var(--main-padding-x);
}
figure {
margin: 0;
}
.image_container a,
.image_container img {
display: block;
}
img {
max-width: 100%;
height: auto;
}
.float_left {
float: left;
margin-right: 1em;
margin-bottom: .5em;
}
.float_right {
float: right;
margin-left: 1em;
margin-bottom: .5em;
}
.float_above {
margin-bottom: 1em;
}
.float_below {
margin-top: 1em;
}
Die Floats werden dann irgendwann aufgehoben
PHP-Code:
/* ... less than 485px ...
-----------------------------------------------*/
@media (max-width: 484px) {
.float_left,
.float_right,
.float_above,
.float_below {
float: none;
margin: 1em 0;
}
}
/* ... less than 485px ... END
-----------------------------------------------*/