<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>figure Archive - dahlen.org</title>
	<atom:link href="https://www.dahlen.org/tag/figure/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dahlen.org/tag/figure/</link>
	<description>Private Webseite der Familie Dahlen</description>
	<lastBuildDate>Wed, 24 Jan 2024 10:01:04 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>image caption fly-out: Animierte Bildbeschriftungen nur mit HTML &#038; CSS</title>
		<link>https://www.dahlen.org/2015/02/18/css-image-caption-flyout/</link>
					<comments>https://www.dahlen.org/2015/02/18/css-image-caption-flyout/#comments</comments>
		
		<dc:creator><![CDATA[christoph]]></dc:creator>
		<pubDate>Wed, 18 Feb 2015 14:18:44 +0000</pubDate>
				<category><![CDATA[Hobby]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[figcaption]]></category>
		<category><![CDATA[figure]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[transition]]></category>
		<guid isPermaLink="false">https://www.dahlen.org/?p=1815</guid>

					<description><![CDATA[<p>Im World Wide Web stösst man immer wieder auf Bild- und Text-Komponenten (z.B. Teaser), die in spezifischer Weise mit dem Besucher interagieren: Im unteren Bereich wird das Bild von einer Text-Zeile überlagert, die beim Überfahren mit der Maus hochrollt und weiteren Text freigibt. Oftmals kommen dabei schwergewichtige Javascript-Lösungen und aberwitzige Berechnungen zum Einsatz, doch ist [&#8230;]</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/18/css-image-caption-flyout/">image caption fly-out: Animierte Bildbeschriftungen nur mit HTML &#038; CSS</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Im World Wide Web stösst man immer wieder auf Bild- und Text-Komponenten (z.B. <em>Teaser</em>), die in spezifischer Weise mit dem Besucher interagieren: Im unteren Bereich wird das Bild von einer Text-Zeile überlagert, die beim Überfahren mit der Maus hochrollt und weiteren Text freigibt.</p>
<p>Oftmals kommen dabei schwergewichtige Javascript-Lösungen und aberwitzige Berechnungen zum Einsatz, doch ist eine Umsetzung ausschließlich mit HTML und CSS ebenfalls möglich.<br />
<span id="more-1815"></span></p>
<h2>Das Ziel</h2>
<p>Ich bin mir nicht sicher, ob <q>fly-out</q> die korrekte Bezeichnung ist (und nehme entsprechende Hinweise aus <a href="https://www.dahlen.org/2015/02/18/css-image-caption-flyout/#response">Kommentaren</a> gerne zur Kenntnis), aber den Effekt dürften viele schon gesehen haben:</p>
<ul>
<li>ein Bild wird im unteren Bereich von einem (einzeiligen) Text nebst Hintergrund überlagert. Die Bild<b>unter</b>schrift liegt also <b>auf</b> dem Bild.</li>
<li>wird der Mauszeiger über das Bild bewegt, so rollt der überlagernde Text-Bereich nach oben und gibt weitere Text-Passagen frei.</li>
<li>wird der Mauszeiger aus dem Bild bewegt, fällt der Text wieder auf seine ursprüngliche Höhe zusammen.</li>
</ul>
<p>Ein Bild sagt mehr als tausend Worte, daher hier ein Beispiel für das zu erreichende Ziel (bitte Mauszeiger über das Bild bewegen).</p>
<figure class="strict overlay"><a href="https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1.jpg"><img fetchpriority="high" decoding="async" class="alignnone wp-image-1880 size-full" src="https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1.jpg" alt="Scan einer Postkarte mit historischer Ansicht der Dahlen-Mühle" width="1257" height="769" srcset="https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1.jpg 1257w, https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1-300x184.jpg 300w, https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1-1024x626.jpg 1024w, https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1-768x470.jpg 768w" sizes="(max-width: 1257px) 100vw, 1257px" /></a><figcaption>
<h1>Historische Ansichtskarte aus Sevelen</h1>
<p>Die Aufnahme zeigt die Dahlen-Mühle aus Sicht des heutigen, neuen Sevelener Friedhofs. Es wurde ca. 1930 für eine Postkarte aus Sevelen verwendet.</p>
</figcaption></figure>
<h2>Der Weg</h2>
<p>Die Lösung basiert &#8211; wie bereits angekündigt &#8211; auf reinem HTML-Markup und Styling über CSS-Regeln. Zur semantischen Abbildung des Konstrukts bietet sich das mit HTML 5 neu eingeführte <span class="code"><a title="Erläuterung des figure-Elements (engl.)" href="http://www.w3.org/wiki/HTML/Elements/figure" target="_blank" rel="noopener">figure</a></span>-Element nebst seines Kind-Elements <span class="code"><a title="Erläuterung des figcaption-Elements (engl.)" href="http://www.w3.org/wiki/HTML/Elements/figcaption" target="_blank" rel="noopener">figcaption</a></span> an. Notwendig ist dies allerdings nicht, auch andere Lösungen mit <span class="code">&lt;div&gt;</span> oder <span class="code">&lt;dl&gt;</span>, <span class="code">&lt;dt&gt;</span> und <span class="code">&lt;dd&gt;</span> sind möglich.</p>
<h3>HTML Mark-Up</h3>
<p><code><br />
&lt;figure&gt;<br />
&lt;img src="https://placehold.it/600x300" alt="placeholder"&gt;<br />
&lt;figcaption&gt;<br />
&lt;h1&gt;Bildunterschrift&lt;/h1&gt;<br />
&lt;p&gt;Weiterführender Text zum Bild<br />
(kann auch mehrere Paragraphen enthalten)&lt;/p&gt;<br />
&lt;/figcaption&gt;<br />
&lt;/figure&gt;<br />
</code></p>
<p>Das reine HTML führt zu dem unten abgebildeten Ergebnis. Da noch spezifisches Styling fehlt, kommen die Standardwerte des jweiligen Browsers zum Einsatz.</p>
<p><a href="https://www.dahlen.org/wp-content/uploads/2015/02/flyout-clean2.png"><img decoding="async" class="aligncenter wp-image-1855 size-full" src="https://www.dahlen.org/wp-content/uploads/2015/02/flyout-clean2.png" alt="" /></a></p>
<h3>Cascading Stylesheets</h3>
<p>Um unserem Ziel näher zu kommen, wird mit dem grund­sätz­lichen Styling begonnen:</p>
<p><code><br />
figure {<br />
position: relative;<br />
width: 600px;<br />
overflow: hidden;<br />
line-height: 0;<br />
}<br />
figure img {<br />
max-width: 100%;<br />
}<br />
figure figcaption {<br />
position: absolute;<br />
bottom: 0;<br />
width: 90%;<br />
padding: 0 5%;<br />
background-color: rgba(0,0,0,0.8);<br />
color: white;<br />
}<br />
</code></p>
<ul>
<li>das <span class="code">figure</span>-Element bekommt eine definierte Breite, an der sich die Inhalte (also Bild und Text) orientieren. Außerdem wird die Zeilenhöhe (<em>line-height</em>) auf 0 gesetzt, um unerwünschten Abständen durch Umbrüche im HTML entgegenzuwirken.</li>
<li>das <span class="code">figcaption</span>-Element bekommt 5% Innenabstand (<em>padding</em>) zu beiden Seiten, damit der enthaltene Text nicht an die Ränder stösst. Es wird außerdem am unteren Rand ausgerichtet (<em>bottom</em>).</li>
<li>Vorder- und Hintergrund-Farbe des <q>Overlays</q> werden definiert.</li>
</ul>
<p><a href="https://www.dahlen.org/wp-content/uploads/2015/02/flyout-styled3.png"><img decoding="async" class="aligncenter wp-image-1858 size-full" src="https://www.dahlen.org/wp-content/uploads/2015/02/flyout-styled3.png" alt="" /></a></p>
<p>Optisch ist das erreichte Zwischenergebnis schon recht nahe am geplanten Ziel, aber noch bewegt sich nichts. Ändern soll dies Verwendung der <em>transition</em>-Vorschrift auf dem <em>max-height</em>-Attribut des <span class="code">figcaption</span>-Elements. Ziel ist es, daß im Ursprungszustand <em>max-height</em> für die Darstellung der Überschrift (<span class="code">&lt;h1&gt;</span>) ausreicht und diese Beschränkung im <q>hover</q>-Zustand aufgehoben wird.</p>
<p>Es gilt nun also die notwendige (Achtung: Kein Widerspruch) minimale Maximal-Höhe zu finden, welche sich aus der Höhe (<em>height</em>) des <span class="code">h1</span>-Elementes zzgl. seiner Abstände und Rahmen ermitteln lässt. Damit das Ganze nicht in einer Pixel-Orgie ausartet und auch im Rahmen eines Responsive Design funktioniert, empfehle ich die Verwendung von <em>em</em>, also der relativen Zeichengröße:</p>
<p><code><br />
figure figcaption h1 {<br />
font-size: 2em;<br />
line-height: 1em;<br />
padding: 0.25em 0;<br />
margin: 0;<br />
}<br />
</code></p>
<p>Zur Erklärung:</p>
<ul>
<li>zunächst wird die Schriftgröße auf <em>2em</em> gesetzt, was einer Verdoppelung zur umgebenden Schriftgröße entspricht</li>
<li>desweiteren wird die Zeilenhöhe auf die aktuelle Schriftgröße gesetzt. Der Wert <em>1em</em> bezieht sich auf die aktuell gültige Schriftgröße, welche durch die vorherige Zeile auf das Doppelte der <q>normalen</q> Schriftgröße gesetzt wurde.</li>
<li>außerdem bekommt die Überschrift oberhalb und unterhalb etwas Innenabstand, um <q>atmen</q> zu können. Auch für <em>padding</em> gilt, daß <em>em</em> in Relation zur aktuellen Schriftgröße gesehen werden muß.</li>
<li>das explizite Setzen des Außenabstands (<em>margin</em>) auf 0 soll die Anwendung von Browers-Vorgaben unterdrücken. Andernfalls würde z.B. Mozilla Firefox hier einen Standardwert von 0,67em anwenden.</li>
</ul>
<p>Damit hat das <span class="code">h1</span>-Element jetzt &#8211; von außen betrachtet &#8211; eine Höhe von <strong>3em</strong> (2em + 2 × 0,25 × 2em). Dies ist der initiale Wert für das <em>max-height</em>-Attribut des <span class="code">figcaption</span>-Elements. Er wird dafür sorgen, daß im Ursprungszustand nur die einzeilige Überschrift sichtbar sein wird. Gleichzeitig wird diese Beschränkung aufgehoben, sobald der Mauszeiger das <span class="code">figure</span>-Element betritt.</p>
<p>Damit das Ganze nicht schlagartig, sondern schön <q>smooth &#8217;n easy</q> passiert, wenden wir die CSS-Eigenschaft <em>transition</em> auf das <em>max-height</em>-Attribut an. Es ergibt sich folgende CSS-Ergänzung:</p>
<p><code><br />
figure figcaption {<br />
max-height: 3em;<br />
transition: max-height 1s ease-in-out;<br />
}<br />
figure:hover figcaption {<br />
max-height: 100%;<br />
}<br />
</code></p>
<p>Erläuterung:</p>
<ul>
<li><span class="code">max-height: 3em</span> ist wie oben erläutert der initiale Wert für die maximale Höhe des Text-Overlays.</li>
<li><span class="code">transition: max-height</span> sorgt dafür, daß bei Veränderung des <em>max-height</em>-Wertes zwischen Soll- und Ist-Wert interpoliert wird. Die Dauer bis zum Erreichen des Soll-Wertes wird auf 1 Sekunde (<span class="code">1s</span>) gesetzt. Die Veränderung soll dabei nicht linear, sondern mit Beschleunigung und Verzögerung erfolgen (<span class="code">ease-in-out</span>)</li>
<li><span class="code">figure:hover figcaption</span> definiert das Verhalten des <span class="code">figcaption</span>-Elementes, sobald der Mauszeiger sich über dem umgebenden <span class="code">figure</span>-Element befindet. Abgebildet wird dies durch die CSS-Pseudoklasse <em>:hover</em> am entsprechenden Element.</li>
</ul>
<p>Damit haben wir unser Ziel erreicht: Animierte Bildbeschriftungen nur mit HTML und CSS.</p>
<figure class="strict overlay"><img decoding="async" src="https://www.dahlen.org/wp-content/uploads/2016/10/placeholder-1200x600-1.png" alt="placeholder" /><figcaption>
<h1>Bildunterschrift</h1>
<p>Weiterführender Text zum Bild<br />
(kann auch mehrere Paragraphen enthalten)</p>
</figcaption></figure>
<h2>Das Fazit</h2>
<p>Die hier vorgestellte Lösung stellt eine Alternative zu Ansätzen mit Javascript dar und erlaubt ein Auskommen ohne zusätzliche Bibliotheken wie jQuery. Durch den Fokus auf Standards wie HTML(5) und CSS(3) werden Inkompatibilitäten vermieden und gleichzeitig das Potential moderner Browser ausgenutzt.</p>
<p>Gleichwohl ist sie nicht frei von Nachteilen, die hier kurz aufgeführt sind:</p>
<ul>
<li>Geräte ohne Mauszeiger, wie Mobiltelefone und Tablet-PCs, werden den ergänzenden Text nicht zu sehen bekommen. Bei der Formulierung ist also darauf zu achten, daß bereits die Überschrift ausreichend Informationen bereitstellt und sich die weiterführenden Angaben auf anderem Wege ermitteln lassen.<br />
Dies gilt allerdings auch für Javascript-Lösungen gleichermaßen.</li>
<li>Versionen des Internet Explorers bis einschließlich Version 9 unterstützen die CSS-Eigenschaft <em>transition</em> nicht. Bei diesen Versionen wird das <q>fly-out</q> also schlagartig erscheinen (s.a. <a title="http://caniuse.com/" href="http://caniuse.com/#search=transition" target="_blank" rel="noopener">http://caniuse.com</a>).</li>
<li>das Einfahren des Overlays beim Verlassen des <span class="code">figure</span>-Elementes geschieht mit einer gewissen Verzögerung. Grund hierfür ist, daß die Transition für <em>max-height</em> bei 100% startet, das Overlay aber i.d.R. nicht die volle Höhe des <span class="code">figure</span>-Elementes einnimmt. Die ersten Momente der Höhenreduktion sind daher nicht sichtbar.</li>
</ul>
<p>Bzgl. des letzten Punktes haben Experimente mit <em>height</em> statt <em>max-height</em> nicht zum Erfolg geführt. Ein Wechsel von einer definierten Höhe (z.B. <em>height: 3em</em>) auf den automatisch ermittelten Wert (<em>height: auto</em>) wurde nicht via <em>transition</em> interpoliert und erfolgte sprunghaft.</p>
<p>Abschließend noch ein Hinweis zur Hintergrund-Farbe des Overlays: CSS3-Farben mit <em>rgba</em> (also Farbe + Transparenz) werden noch nicht von allen Browsern <a title="caniuse.com: Browser und unterstützte Features" href="http://caniuse.com/#search=rgba" target="_blank" rel="noopener">unterstützt</a>. Alternativ kann <span class="code">figcaption</span> darum ein transparentes Bild (PNG) als Hintergrund (<em>background-image</em>) zugewiesen werden. Vermeiden sollte man allerdings <em>opacity</em>, da dies sich auch auf die Schrift auswirkt.</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/18/css-image-caption-flyout/">image caption fly-out: Animierte Bildbeschriftungen nur mit HTML &#038; CSS</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dahlen.org/2015/02/18/css-image-caption-flyout/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
