Gunnar Bittersmann: Speisekarte mit Punkte zwischen Speisen und..........Preis

Beitrag lesen

@@Ralf Baumann

ich möchte eine Speisekarte erstellen, in der Form, dass zwischen Speisen und Preis Punkte sind. Etwa so:

Fisch.....................12,50 €

Überbackene Nudeln.........3,50 €

Fleisch...................23,50 €

Wenn möglich mit CSS.

Geht das?

Nicht so ganz trivial.

Als Markup bietet sich eine Beschreibungsliste (description list dl) an:

<dl>
	<div>
		<dt>Pizza Margherita</dt>
		<dd>5,50 €</dd>
	</div>
	<div>
		<dt>Pizza Salame</dt>
		<dd>6,50 €</dd>
	</div>
</dl>

Die div sind Flexboxen mit Abstand zwischen dt und dd:

dl > div
{
	display: flex;
	justify-content: space-between;
}

Pizza 1

Fehlen nur noch die Punkte … Die ließen sich als Rahmenlinie eines Pseudoelements div::after realisieren. Damit die visuelle Reihenfolge dtdiv::afterdd ist, wird letzters mit order: 1 ans Ende plaziert.

Pizza 2 (was so ziemlich genau dem entspricht, was ’sup als Lösung präsentierte)

Fehlen immer noch Punkte, wenn das Gericht mehrere Gänge Zeilen beansprucht, weil sich die dt-Box über die Breite bis zur dd-Box ausdehnt und div::after nichts von der Breite abbekommt.

Versuche, die Rahmenlinie mit Pseudoelementen dt::after oder dd::before umzusetzen, schlagen ebenso fehl.

Beibt noch, die Rahmenlinie für das div anzugeben; dt und dd einen weißen Hintergrund zu verpassen und nach untern aus dem div herausragen zu lassen, also die Rahmenlinie überdecken zu lassen.

Pizza 3

Aber auch hier ist die dt-Box ja rechteckig (Flex-Item), nimmt die Breite bis zur dd-Box ein und lässt von der Rahmenlinie nichts mehr zu sehen.

Eine Lösung wäre, nicht dt weißen Hintergrund zu geben, sondern einem darin befindlichen span-Element (welches keine Block-Box, sondern eine Inline-Box ist). Das zusätzliche Markup wäre aber ein kleiner Makel.

Pizza 4

LLAP 🖖

--
„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann