Ergebnis 1 bis 16 von 16

Thema: Breite der figcaption bei responsiven Bildern

  1. #1
    Contao-Fan Avatar von ph!L
    Registriert seit
    04.11.2009.
    Ort
    Internet
    Beiträge
    439

    Standard Breite der figcaption bei responsiven Bildern

    Hallo zusammen,

    ich stehe gerade vor der Problematik, bei responsiven Bildern die Bildunterschrift zu stylen.
    Das Hauptproblem dabei (und das war es auch schon früher bei nicht-responsiven Bildern) ist, dass die figcaption standardmäßig die volle Breite des Umgebenden Containers nutzt.
    Früher hatte ich daher im Template die Breite des Bildes ausgelesen und der Bildunterschrift als Inline-Stylesheet vergeben. Bei responsiven Bildern ist das aber nicht so einfach möglich, da es ja nicht "die eine" Breite gibt.

    Wie habt Ihr das so gelöst?

    Viele Grüße,

    Philipp

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.553
    Partner-ID
    10107

    Standard

    Ich löse das mittlerweile per JavaScript, da pure CSS Lösungen oft unzureichend sind, je nach dem was man braucht. zB:
    PHP-Code:
    // fix figcaption width
    $('figure').each( function()
    {
        var 
    $figure = $(this);
        var 
    $caption $figure.find('figcaption');
        var 
    $img $figure.find('img');
        
    $caption.css('max-width',$img.width());
    }); 
    Pure CSS Lösungen findest du auch hier im Forum.

  3. #3
    Contao-Fan Avatar von ph!L
    Registriert seit
    04.11.2009.
    Ort
    Internet
    Beiträge
    439

    Standard

    Ich bin eigentlich kein Fan von JS-only Lösungen, aber in diesem Fall scheint das wirklich das beste zu sein.

    Besten Dank, funktioniert 1A.

  4. #4
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    PHP-Code:
    /* CSS */
    figure {
      
    widthmin-content;

    https://caniuse.com/mdn-css_properti...th_min-content
    Geändert von Andreas (08.01.2023 um 22:47 Uhr) Grund: Sorry, min- statt max-content
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  5. #5
    Contao-Fan
    Registriert seit
    10.08.2011.
    Ort
    Berlin
    Beiträge
    846

    Standard

    Gibt es dazu neuere Ansätze als die bisherigen, evtl mit css grid ?

    @Andreas
    Deine Lösung funktioniert wie genau? Dem figure width: min-content;zu geben alleine reicht nicht und ich hab irgendwie keinen Weg gefunden das sinnvoll einzusetzen ohne dass das Bild auf ein Minimum schrumpft
    Geändert von Bennie (30.05.2023 um 13:20 Uhr)

  6. #6
    Contao-Fan
    Registriert seit
    03.01.2012.
    Beiträge
    847

    Standard

    Falls ich das Problem richtig verstehe:

    Code:
    figure {
       display: table;
    }
    
    figcaption {
      display: table-caption;
      caption-side: bottom;
    }

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.553
    Partner-ID
    10107

    Standard

    Ich würde da eher mit flex oder grid arbeiten.
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Fan
    Registriert seit
    10.08.2011.
    Ort
    Berlin
    Beiträge
    846

    Standard

    @dazzle89
    ja diese "alte" Lösung kenne ich, aber soweit ich mich erinnere hatte das auch irgendwelche Nebeneffekte, oder?
    Eine Lösung mit flex oder grid hab ich bisher nicht gefunden (außer mit festen Breitenangaben)

  9. #9
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Bennie Beitrag anzeigen
    @Andreas
    Deine Lösung funktioniert wie genau? Dem figure width: min-content;zu geben alleine reicht nicht und ich hab irgendwie keinen Weg gefunden das sinnvoll einzusetzen ohne dass das Bild auf ein Minimum schrumpft
    Ja, ich renne da auch immer wieder in Probleme. Bei mir hatte es damals mit min-content funktioniert, dann muss aber auch das andere CSS entsprechend sein, weiß jetzt auch nicht mehr, warum das funktioniert hatte.

    Grad gestern hatte ich es auch mit Grid gelöst, war in ner Galerie. In ner Galerie ist es einfach, da man eine Galerie sowieso am besten mit Grid aufbaut.

    Bei Inhaltselementen habe ich gerade die Möglichkeit geschaffen zwischen 4 Bildbreiten auswählen zu können. 1/1, 1/2, 1/3 und 1/4. Bildgröße wird über das Select ausgewählt. Den Bildgrößen habe ich auch eine Klasse gegeben - img_1_2, img_1_3 ....

    Leider wird der :has() Selektor noch nicht voll unterstützt, sonst könnte jetzt ich sagen.

    PHP-Code:
    figure:has(.img_1_2) {
      
    max-width50%;
    }

    figure:has(.img_1_3) {
      
    max-width33.3333%;

    Also entweder mit JS die Klasse beim Bild entnehmen und auf das Elternteil legen. Oder so wie ich es gerade gemacht habe (weiß nicht ob das so bleibt) mit der Erweiterung Komponenten StyleManager Klassen anlegen, die der Kunde dann zuschalten muss - "Bildbreite auf 1/3 beschränken".

    Kommt auch drauf an, ob der Kunde den Text um das Bild herum fließen lassen möchte, was ich persönlich nicht so schön finde, oder ob er klar definierte Spalten haben möchte für Text und Bild. Ist alles umsetzbar mit block, float, flex oder grid. Der Knackpunkt ist wohl, dass man sich für bestimmte Breiten entscheiden muss (nicht Pixelwerte, sondern prozentuale Breiten), was man ja aber auch macht, wenn man ein Design erstellt.

    Hier für Grid die beste Lösung für z.B. Galerien, wenn man den Bildern bestimmte Mindest- und Maxbreiten zuordnen möchte.
    https://www.youtube.com/watch?v=qjJR3qYCd54
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    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-x3rem;
      --
    main-padding-y3rem;
      --
    max-width     1000px;
      --
    inner-width   calc( var(--max-width) - * var(--main-padding-x) );

    Dann das CSS für Textelemente mit Bild
    PHP-Code:
    .ce_text figure {
      
    widthmin-content;
    }
    img[class^=img_1_] {
      --
    dividend1;
      
    min-widthmincalc( var(--inner-width) / var(--dividend) ), calc( (100vw * var(--main-padding-x)) / var(--dividend) ) );
    }
    img.img_1_2 {
      --
    dividend2;
    }
    img.img_1_3 {
      --
    dividend3;
    }
    img.img_1_4 {
      --
    dividend4;

    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-width484px) {
      
    main .inside /* optional */
        
    --main-padding-x1.5rem;
        --
    main-padding-y1.5rem;
      }
      
    img.img_1_2 {
        --
    dividend1;
      }
      
    img.img_1_3,
      
    img.img_1_4 {
        --
    dividend2;
      }
    }
    /* ... 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-inlineauto;
      
    width: var(--max-width);
      
    max-width100vw;
      
    min-height100vh;
      
    box-sizingborder-box;
      
    displaygrid;
      
    grid-template-rowsauto 1fr auto/* header, container, footer */
    }
    main .inside {
      
    padding: var(--main-padding-y) var(--main-padding-x);
    }
    figure {
      
    margin0;
    }
    .
    image_container a,
    .
    image_container img {
      
    displayblock;
    }
    img {
      
    max-width100%;
      
    heightauto;
    }
    .
    float_left {
      
    floatleft;
      
    margin-right1em;
      
    margin-bottom.5em;
    }
    .
    float_right {
      
    floatright;
      
    margin-left1em;
      
    margin-bottom.5em;
    }
    .
    float_above {
      
    margin-bottom1em;
    }
    .
    float_below {
      
    margin-top1em;

    Die Floats werden dann irgendwann aufgehoben
    PHP-Code:
    /* ... less than 485px ...
    -----------------------------------------------*/
    @media (max-width484px) {
      .
    float_left,
      .
    float_right,
      .
    float_above,
      .
    float_below {
        
    floatnone;
        
    margin1em 0;
      }
    }
    /* ... less than 485px ... END
    -----------------------------------------------*/ 
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Fan
    Registriert seit
    10.08.2011.
    Ort
    Berlin
    Beiträge
    846

    Standard

    @Andreas
    Danke für deine Lösung

    Wobei ich mich frage ob das für ein anscheinend "kleines" Problem nicht etwas über's Ziel ist - nicht falsch verstehen, aber das Ganze nur um eine Bildunterschrift nicht breiter als das Bild werden zu lassen?

  12. #12
    Contao-Fan
    Registriert seit
    03.01.2012.
    Beiträge
    847

    Standard

    Ich wüsste jetzt nicht, was gegen die Lösung mit display: inline-table spricht, sofern man den IE 6 und 7 nicht unbedingt unterstützen will lasse mich aber gerne korrigieren

  13. #13
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Bennie Beitrag anzeigen
    @Andreas
    Danke für deine Lösung

    Wobei ich mich frage ob das für ein anscheinend "kleines" Problem nicht etwas über's Ziel ist - nicht falsch verstehen, aber das Ganze nur um eine Bildunterschrift nicht breiter als das Bild werden zu lassen?
    Nun ja, mein Post ist ziemlich lang, aber eigentlich ist es nicht viel CSS. Das meiste davon hat man ja sowieso in seinem CSS. Und man sollte dem Kunden sowieso auch nur fertige Bildgrößen anbieten. Kommt auch darauf an, was der Kunde möchte. Möchte er die Bildunterschrift nicht breiter als das Bild, muss du mit einer Lösung kommen. Du kannst dem Kunden auch eine Standardlösung bieten, indem du sagst, Bilder in Textelementen sind immer 50% breit, das ist auch sehr einfach, aber nicht sehr flexibel.

    Zeige mir dein letztes Projekt und deine Lösung. Wenn sie mir gefällt bin ich nicht abgeneigt diese zu benutzen.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  14. #14
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von dazzle89 Beitrag anzeigen
    Ich wüsste jetzt nicht, was gegen die Lösung mit display: inline-table spricht, sofern man den IE 6 und 7 nicht unbedingt unterstützen will lasse mich aber gerne korrigieren
    Mmh, irgendetwas sträubt sich da bei mir. Tabellen haben ja ein paar Eigenarten, die man nicht unbedingt möchte. Eigenarten bei overflow, width, max-width, positioning ... Fühlt sich irgendwie falsch an. Sieht aus wie ein Hack. Aber wenn das für dich kein Problem ist und alle Anforderungen für verschiedene Viewportbreiten, Flexibilität usw. unterstützt, why not.

    BTW - Who cares about IE? Selbst Microsoft sagt, man solle den IE nicht benutzen.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  15. #15
    Contao-Fan
    Registriert seit
    10.08.2011.
    Ort
    Berlin
    Beiträge
    846

    Standard

    Zeige mir dein letztes Projekt und deine Lösung. Wenn sie mir gefällt bin ich nicht abgeneigt diese zu benutzen.
    Hätte ich die, dann hätte ich diesen Post ja nicht wieder hervorgeholt.
    Mir war eben bis dato auch nur die JS Lösung und die von @dazzle89 gepostete bekannt.

    Was ich jetzt noch probiert hatte, aufgrund Deines Hinweises war so etwas (am Bsp des Textelements)
    HTML-Code:
    .ce_text figure {width:min-content;}
    .ce_text img{ max-width:100vw;}
    Das hat bei mir funktioniert auch in Verbindung mit dem Floating, aber ob das nun besser ist als die display:table; Variante?
    Geändert von Bennie (01.06.2023 um 13:55 Uhr)

  16. #16
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Bennie Beitrag anzeigen
    ...aber ob das nun besser ist als die display:table; Variante?
    Siehe oben.
    Zitat Zitat von Bennie Beitrag anzeigen
    Mir war eben bis dato auch nur die JS Lösung und ...
    JS hat den Nachteil, dass du bei jeder Änderung des Viewports oder Ausrichtung des Tablets|Phones nachrechnen musst.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •