Einen Körperrand erstellen

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Dieser Artikel wurde ursprünglich am 25. Februar 2008 veröffentlicht, wird aber jetzt komplett überarbeitet, um umfassender zu sein und moderne Techniken zu zeigen.

Die Seite von Jon Hick, Hicksdesign, ist dort, wo ich das Konzept eines „Körperrandes“ zuerst gesehen habe. In diesem Fall ist es ein sehr dezenter und schöner Effekt.

Merkmale eines Körperrandes

  • Umschließt das gesamte Browserfenster, bleibt am Rand, unabhängig von der Bildschirmgröße
  • Alle Kanten bleiben beim Scrollen der Seite an Ort und Stelle
  • Der Inhalt verschwindet beim Scrollen der Seite unter den Rändern

Demo ansehen

Technik #1: Vier Divs

Der Weg, dies mit der tiefsten Browserkompatibilität zu erreichen, ist die Verwendung von vier Elementen. Hicksdesign macht es auf diese Weise, verwendet vier -Elemente und sagt dazu in einem HTML-Kommentar:

Ich verwende die b-Tag-Ränder, weil es nur visuelle Dinge ohne Bedeutung sind, also kann ich genauso gut den kleinsten Tag verwenden, den ich finden kann.

Auf jeden Fall ist dies präsentationsbasierte Markup, was nicht ideal ist. Wir werden hier einen Div verwenden.

<div id="left"></div>
<div id="right"></div>
<div id="top"></div>
<div id="bottom"></div>

Dann stylen wir mit CSS. Einige Eigenschaften werden von allen Elementen geteilt, einige nur vom oberen/unteren und linken/rechten, und einige sind einzigartig. Hier ist eine saubere Möglichkeit, das zu kodieren, ohne unnötige wiederholte Eigenschaften.

#top, #bottom, #left, #right {
	background: #a5ebff;
	position: fixed;
	}
	#left, #right {
		top: 0; bottom: 0;
		width: 15px;
		}
		#left { left: 0; }
		#right { right: 0; }
		
	#top, #bottom {
		left: 0; right: 0;
		height: 15px;
		}
		#top { top: 0; }
		#bottom { bottom: 0; }

Dies sollte in IE 7 und höher und fast jedem anderen guten Desktop-Browser einwandfrei funktionieren. Für IE 6, der keine feste Positionierung unterstützt, werden wir ihn einfach entfernen (kein Schaden, keine Foul-Abwehr), indem wir einen bedingten Kommentar im Kopf verwenden.

<!--[if lte IE 6]>
	<style>#top, #bottom, #left, #right { display: none; }</style>
<![endif]-->

Wir sollten ihn auch auf kleinen Bildschirmen (wahrscheinlich mobil) weglassen, die ebenfalls keine feste Positionierung handhaben.

@media 

/* Fairly small screens including iphones */
only screen and (max-width: 500px),

/* iPads */
only screen and (min-device-width: 768px) and (max-device-width: 1024px) 

{
	#top, #bottom, #left, #right { display: none; }
}

So bekommen wir den Effekt dort, wo wir ihn wollen, und nicht dort, wo wir ihn nicht wollen.

Technik #2: Pseudo-Elemente

Im obigen Beispiel benötigten wir vier einzigartige Elemente, um die Aufgabe zu erledigen. Aber das sind vier Elemente mehr als semantisch angemessen in unserem Dokument. Idealerweise würden wir null verwenden. Nun, weißt du was? Es gibt bereits zwei Elemente, die die Größe des Browserfensters haben: die <html>- und die <body>-Elemente. Mit den :before- und :after-Pseudo-Elementen darauf erhalten wir vier!

Wir würden die gleichen Eigenschaften und Werte wie oben verwenden, nur würden wir

html:before, html:after, body:before, body:after {
    content: "";
    position: fixed;
    background: #a5ebff;

    /* etc. */
}

Harry Roberts hatte diese Idee auch und veröffentlichte sie auf CSS Wizardry.

Während die Browserunterstützung für Pseudo-Elemente ziemlich gut ist, ist sie nicht so gut wie bei Technik #1. **Ein größeres Problem** ist, dass es einen WebKit-Bug gibt, bei dem der Hintergrund eines Pseudo-Elements auf dem html-Element über den gesamten Viewport hinausläuft. Das macht die Verwendung von Pseudo-Elementen auf dem html-Element vorerst unmöglich.

Aber es gibt eine Lösung! Während die Semantik zählt!

Wir brauchen eigentlich keine vier einzigartigen Elemente, wir brauchen eigentlich nur zwei. Oben und unten müssen einzigartig sein, damit sie eine feste Position haben und nicht scrollen. Für links und rechts können wir buchstäblich einfach einen border am <body> verwenden.

body:before, body:after {
    content: "";
    position: fixed;
    background: #900;
    left: 0;
    right: 0;
    height: 10px;
}
body:before {
    top: 0;
}
body:after {
    bottom: 0;
}
body {
    border-left: 10px solid #900;
    border-right: 10px solid #900;  
}

Der gleiche Effekt, etwas weniger Browserunterstützung, viel semantischer.

Demo ansehen

Zum Spaß: Kottke.org Körperrand

Jason Kottkes Kottke.org hat einen ziemlich coolen Körperrand-Effekt.

Jason benötigt acht verschiedene Elemente und acht verschiedene Bilder (!), um dies zu bewerkstelligen. Da dieser Randstil nicht fest am oberen und unteren Rand des Viewports verbleibt (nur am oberen und unteren Rand des Inhalts), ist dies tatsächlich sehr einfach mit CSS3 umzusetzen.

Wir werden box-shadow auf dem <body>-Element verwenden und seine nützliche Fähigkeit, mehrere Schatten durch Kommas zu trennen. Hier ist er in seiner Gesamtheit mit

body {
	padding: 40px;
	overflow-x: hidden; /* For Opera */
	-webkit-box-shadow:
		inset #19d4ff 0 0 0 5px,
		inset #18cdf7 0 0 0 1px,
		inset #53dfff 0 0 0 10px,
		inset #50d8f7 0 0 0 11px,
		inset #8ce9ff 0 0 0 16px,
		inset #88e2f7 0 0 0 17px,
		inset #c5f4ff 0 0 0 22px,
		inset #bfecf7 0 0 0 23px;
	-moz-box-shadow:
		inset #19d4ff 0 0 0 5px,
		inset #18cdf7 0 0 0 1px,
		inset #53dfff 0 0 0 10px,
		inset #50d8f7 0 0 0 11px,
		inset #8ce9ff 0 0 0 16px,
		inset #88e2f7 0 0 0 17px,
		inset #c5f4ff 0 0 0 22px,
		inset #bfecf7 0 0 0 23px;
	box-shadow:
		inset #19d4ff 0 0 0 5px,
		inset #18cdf7 0 0 0 1px,
		inset #53dfff 0 0 0 10px,
		inset #50d8f7 0 0 0 11px,
		inset #8ce9ff 0 0 0 16px,
		inset #88e2f7 0 0 0 17px,
		inset #c5f4ff 0 0 0 22px,
		inset #bfecf7 0 0 0 23px;
}

Fehlerhinweis: Opera (Mac, 11.10) hat einen seltsamen Fehler, bei dem die Größe des Elements erweitert wird, um die Schatten außen zu berücksichtigen (obwohl die Schatten innen liegen). Dies löst unerwünschte Scrollbalken aus, da wir es auf einem Vollbild-Body-Element verwenden. Horizontale Scrollbalken können durch Ausblenden von overflow-x verborgen werden. Aber leider wird es immer noch einen kleinen Abstand am unteren Bildschirmrand geben.

Obwohl dies die geringste Browserunterstützung aller behandelten Themen hat, ist sie nicht schlecht: IE 9+, Fx 3.5+, Opera 10.5+, Chrome alle, Safari 3+

Demo ansehen