Florence Maurice

Webthemen

padding bei table-header-group und table-footer-group

Geschrieben am:

Mit display: table und Konsorten kann man bei bis zu vier Elementen die Reihenfolge der Darstellung auf dem Bildschirm beeinflussen. Nehmen wir einmal folgende Situation: Wir haben vier Elemente, die bei großen Bildschirmen nebeneinander dargestellt werden sollen und bei kleinen Bildschirmen untereinander.

Anordnung große Screens

Anordnung kleiner Screen

Das Besondere dabei: Die Reihenfolge auf kleinen Screens soll anders sein als die Reihenfolge auf dem großen Screen (Eins, Zwei, Drei, Vier auf großen Screens, Vier, Drei, Zwei, Eins auf kleinen Screens).

Wie an verschiedenen Stellen (hier und hier) gezeigt, lässt sich das über display mit besonderen Werte realisieren:

Im Beispiel habe ich ein umfassendes Element mit vier Absätzen:

<div> 
  <p>Eins</p> 
  <p>Zwei</p> 
  <p>Drei</p> 
  <p>Vier</p> 
</div>

Im CSS-Code stehen zuerst die Angaben für große Bildschirme - die Tabellendarstellung wird aktiviert und die einzelnen Absätze zu Tabellenzellen gemacht:

.container { 
  display: table; 
  width: 100%; 
} 
.container p { 
  display: table-cell; 
}

Für kleine Bildschirme wird dann über die oben beschriebenen Angaben die Reihenfolge verändert:

@media screen and (max-width: 28em) { 
  p:nth-child(4) { 
    display: table-caption; 
    width: 100%; 
  } 
  p:nth-child(1) { 
    display: table-footer-group; 
  } 
  p:nth-child(3) { 
     display: table-header-group; 
  } 
}

Als ich damit rumspielte, stieß ich auf folgendes Phänomen: Ich hatte für alle Elemente ein padding definiert, das sich jedoch bei display: table-header-group und display: table-footer-group nicht auswirkte.

problem_padding

Das ist allerdings kein Bug, sondern ein Feature. In der CSS 2.1-Spezifikation heißt es deutlich: Man kann padding auf alle Elemente anwenden bis auf table-row-group, table-header-group, table-footer-group, table-row, table-column-group und table-column (http://www.w3.org/TR/CSS2/box.html#padding-properties).

Die Lösung ist einfach: Benötigt man im Beispiellayout padding, so kann man dies an ein Kindelement zuweisen. Im Beispiel ist einfach ein span-Element innerhalb des p-Elemente ergänzt, und dieses erhält die folgenden Angaben:

p span { 
  display: block; 
  padding: 2em; 
}

Das Beispiel gibt es online zum Ausprobieren bei: http://jsfiddle.net/fmaurice/uhW3S/

Vielleicht auch interessant: Man kann transform nutzen, um die Reihenfolge von Elementen umzukehren.