Postanowiłem użyć (właściwie, to dopiero zaczynam winksmiley.jpg) do budowania layoutu pseudoklas :before i :after.

No i załóżmy taką podstawową strukturę:

  1. <div id="header"></div>
  2. <div id="content"></div>
  3. <div id="footer"></div>


content ma coś w rodzaju zaokrąglonych rogów (stałej szerokości). W związku z tym wyprodukowałem obrazek, który zawiera te detale.

CSS wygląda w - mniej więcej - ten sposób:
  1. #content
  2. { clear: both; background: url('../gfx/content.png'); overflow: hidden; /*height: 400px; - to tylko dla testów bez zawartości*/ }
  3.  
  4. #content:before
  5. { content: " "; display: block; height: 26px; background: url('../gfx/contentWrapper.png') no-repeat; }
  6.  
  7. #content:after
  8. { content: " "; display: block; height: 35px; background: url('../gfx/contentWrapper.png') no-repeat bottom; }


No i dla pseudoklasy :before rogi są wyświetlone tak, jak być powinny - nie ma zastrzeżeń. Jednak :after jest wyświetlany zaraz po :before, a nie za #content, w taki sposób, że wygląda to tak:



Co ciekawe, gdy zamiast selektora #content:after użyję #footer:before, to wszystko jest jak trzeba.

Niech mnie ktoś oświeci, co ja robię źle, bo już kombinowałem clearami/floatami/displayem/etc i nie mam do tej pory pomysłu...

EDIT: udało mi się dojść, co było nie tak.

Elementy :before/:after są przed/za dla zawartości wewnątrz warstwy. Stąd już ostatnia prosta:
  1. #content
  2. { /**/ position: relative }
  3.  
  4. #content:after
  5. { /*...*/ position: absolute; bottom: 0; left: 0; }