Bei Medium identifizierte Jon Moore kürzlich „nicht-rechteckige Header“ als einen kleinen Trend. Also: noch nicht verrückt populär, aber wartet nur ab, Kleiner.
Wir sprechen von Headern (oder allgemeiner von Container-Elementen), die eine nicht-rechteckige Form haben.
Wie Trapeze

Oder komplexere geometrische Formen


Oder abgerundet/elliptisch

Oder sogar Gesäßbacken-förmig

Ich wette, diese werden auch immer beliebter. Lasst uns also der Masse zuvorkommen und über ein paar Wege sprechen, diese zu codieren. Denn seien wir ehrlich: Sie sehen ziemlich großartig aus.
Bild
Vielleicht der einfachste Weg, einen der oben abgebildeten nicht-rechteckigen Header zu erstellen, ist, ein Bild über deinen Header zu legen.
Aber hier gibt es ein paar Probleme
- Responsives Verhalten? Diese Masken sind oft vollbreit und es wird mühsam, verschiedene Breiten der Form zu definieren (z. B. srcset) oder Pixelation von Rasterbildern zu riskieren.
- Es ist eine komplett separate Datei, die vom Server abgerufen werden muss – scheint verschwenderisch für einfache Formen.
- Es ist langsam, im Browser zu iterieren, wenn man eine Bilddatei(en) aus seinem Designprogramm neu exportieren muss.
Wir können all diese Probleme auf einmal lösen. Du weißt vielleicht schon, wohin das hier führt.
SVG
Im Vergleich zum Exportieren eines JPG aus Sketch ist ein Inline-SVG performanter, einfach responsiv zu gestalten und leicht im Design zu iterieren. Tatsächlich ist dies in den meisten Fällen die Methode, die ich empfehlen würde. Vielseitig, browserübergreifend, Vektor und fabelhaft.
Bei einem schrägen Hintergrund muss man eine Entscheidung treffen: Was soll bei wechselnder Bildschirmbreite konstant bleiben, der Winkel oder der Höhenunterschied zwischen den beiden Seiten?
Wenn der *Winkel* konstant bleiben soll, stelle die Höhe des SVG in vw ein

Wenn der Höhenunterschied konstant bleiben soll, stelle die Höhe des SVG in Pixel ein

Und du musst dich nicht für eine entscheiden – wir können das responsiv gestalten, da SVG-Elemente Media Queries unterliegen. Siehe diesen geometrischen Header-Stil bei Breiten unter und über 700 Pixel.
Verdammt, Mann. Was gibt es da nicht zu lieben? Oh, und wir können sogar den Gesäßbacken-Stil machen.
(Vielleicht ist das besser mit Bezier-Kurven zu machen, aber du verstehst die Idee!)
Eine weitere wichtige Anmerkung: Wenn du einen SVG-Hintergrund *komplett* in CSS machen willst, könntest du das SVG speichern und seine URL in einem Pseudo-Element referenzieren.
header::after {
content: "";
position: absolute;
bottom: 0;
width: 100%;
height: 100px;
background: url(divider.svg);
}
Und wenn du `divider.svg` als wiederkehrendes Element in verschiedenen Szenarien verwendest, kannst du es auch unterschiedlich färben, wie du es brauchst
header::after polygon {
fill: white;
}
Aber hier ist ein Problem: Was ist, wenn der Abschnitt unter dem Header einen komplizierten Hintergrund hat? In all diesen bisherigen Beispielen haben wir einfach einen schlichten weißen Hintergrund angenommen. Was, wenn es einen schicken Farbverlauf oder ein anderes Hintergrundbild gibt? Was dann?
clip-path
Diese Eigenschaft kommt zur Rettung, wenn du einen moderat komplexen Hintergrund unter dem Header hast und daher möchtest, dass die Maskierung *innerhalb* des nicht-rechteckigen Headers erfolgt, anstatt durch ein Element *danach*.
Und ähnlich wie bei der SVG-Syntax kannst du das responsive Verhalten des obigen Codes von *Winkel-bleibt-konstant* zu *Höhenunterschied-bleibt-konstant* ändern, indem du die berechnete Höhe in einen einfachen Prozentsatz änderst.
Der größte Nachteil von Clip-path? Die Browserunterstützung ist nicht gerade großartig. Je nachdem, wie wichtig dein nicht-rechteckiger Header oder deine Div ist, könnte es sich jedoch um eine progressive Verbesserung handeln. In diesem Fall kannst du Clip-path ruhig verwenden!
border-radius
Bisher haben wir nur Methoden erwähnt, die zum Erzeugen aller oben genannten Formen funktionieren. Wenn wir jedoch wissen, welche spezielle Form unser Header haben soll, haben wir möglicherweise Zugriff auf einen einfacheren Weg.
Zum Beispiel ist ein *konvexer* elliptischer Header perfekt für `border-radius` geeignet.
Und ein konkav elliptischer Header könnte einfach den border-radius auf dem Element nach dem Header haben.
section {
border-bottom-left-radius: 50% 20%;
border-bottom-right-radius: 50% 20%;
}
Ein weiterer Vorteil dieser Methode ist, dass der Hintergrund des darunterliegenden Abschnitts weiterhin Hintergrundbilder haben kann.
transform: skew
Wenn wir wissen, dass wir einen trapezförmigen Header erstellen wollen, können wir eine CSS-Transformation verwenden, um das Ganze zu verzerren.
Dies hat den Nebeneffekt, dass alle Kindelemente des verzerrten Elements ebenfalls verzerrt werden. Daher solltest du ein Kindelement im Header hinzufügen, das verzerrt wird, und alles andere kommt in Geschwisterelemente.


Stripe’s Homepage-Design nutzt diese Methode und, noch brillanter, sie beinhalten einige span-Elemente (jedes ist ein Farbblock), die mit dem Elternelement verzerrt werden, was einen komplexeren und farbenfroheren Effekt erzeugt.
Welche ist am besten?
Meiner Meinung nach ist SVG generell die beste Wahl. Wenn du jedoch einen komplexeren Hintergrund unter dem Header hast, dann hängt die beste Wahl von der Form ab. In diesem Fall würde ich untersuchen, ob `skew` oder `border-radius` die gewünschte künstlerische Richtung erfüllen kann oder ob die Browserunterstützung unwichtig genug ist, um `clip-path` zu verwenden.
| Ermöglicht komplexe Hintergründe darunter | Browser-Unterstützung | Erstellbare Formen | |
|---|---|---|---|
| Bild | Nein | Ja | Alle |
| SVG | Nein | Ja | Alle |
| Clip-path | Ja | Nein | Alle |
| Border-radius | Ja | Ja | Nur elliptisch |
| Transform: skew | Ja | Ja | Nur trapezförmig |

Erik Kennedy ist ein unabhängiger UX/UI-Designer und der Schöpfer von Learn UI Design, einem praktischen Online-Videokurs über visuelles Design für Bildschirme. Beinhaltet Farben, Typografie, Prozess und mehr. Über 16 Stunden Video in über 30 Lektionen.
Ich wünschte, du wärst spezifischer in der Kategorie Browserunterstützung. Alle Browser unterstützen clip-path außer Microsoft-Browsern, sowohl IE als auch Edge.
Im Moment hat FF Probleme mit clip-path: polygon() und %-Einheiten. Aber das wird in FF53 behoben.
Ich sehe clip-path auch auf iOS nicht funktionieren.
Wow, vielen, vielen Dank, dass du das mit uns teilst!!!
Großartiger Beitrag, Chris! Ich verfolge diesen Trend und er ist meine Visitenkarte für individuell erstellte Themes und Templates. Du hast mir gerade viel zum Arbeiten gegeben. An die „Gesäß“-Form habe ich gar nicht gedacht, lol, danke!
Ich stimme zu, es ist ein großartiger Beitrag ;)
Er ist von Erik Kennedy, der in seinem Kurs, auf den wir unten verlinkt haben, noch mehr zu lehren hat!
Wenn du versuchst, SVGs mit komplexen Hintergründen zu verwenden, könnte Clipping eine praktikable Option sein.
https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Clipping_and_masking
Hallo Erik,
Toller Beitrag! :)
Ich habe gerade diesen nicht-rechteckigen Header für einen neuen Dienst implementiert, den wir auf den Markt gebracht haben. Ich habe mich für die abgerundete/elliptische Variante entschieden und clip-path mit subtiler Animation verwendet :)
https://juststickers.in/app-icon-stickers/
Ich glaube, ich wurde von Chris' Tweet über nicht-rechteckige Header inspiriert. Hat er das gemacht oder vielleicht etwas dazu getwittert. Trotzdem bin ich wirklich zufrieden mit dem nicht-rechteckigen Ansatz. Es frischt die Art und Weise, wie eine Seite im Jahr 2017 aussieht, irgendwie auf :)
Interessantes Thema. Danke für die großartigen Ideen (wie immer). : )
Die transform: skew-Methode scheint nett, aber ich habe vor ein paar Wochen damit herumgespielt und sie hat definitiv einige Nachteile: Wenn du etwas innerhalb des verzerrten Elements animierst (CSS-Übergänge/Animationen), wird das gesamte Element schlecht gerendert (z. B. ohne Glättung oder Kantenglättung), insbesondere bei Schriftarten. In Firefox auf Windows und Linux überprüft. Nachdem die Animation stoppt, sieht alles wieder gut aus.
Was ist, wenn die Form des Headers einen Schatten haben muss?
box-shadow funktioniert perfekt mit transform: skew, siehe Beispiel → http://i.imgur.com/X5DRAEw.png
Du kannst auch Filter wie webkit-filter: drop-shadow verwenden. So folgt der Schatten der Form deines Elements. Ich hatte das gerade heute, als ich es auf einer animierten Welle verwendet habe. :)
Wenn du keine Verzerrung verwendest, kannst du entweder CSS-Filter (drop-shadow) oder SVG-Filter (komplexer) verwenden.
2Alex
Stimme zu. Box-shadow funktioniert mit geraden Kanten. Aber im Beispiel mit border-radius ist es besser, filter: drop-shadow zu verwenden.
Fantastischer Artikel! Ich habe ihn geliebt!
Einfache geometrische Formen können mit CSS linear-gradient erstellt werden: http://codepen.io/anon/pen/ygwGzg
Durch die Verwendung des transparenten Teils des Verlaufs (rgba(255, 255, 255, 0)) ist es möglich, einen Hintergrund unter dem Header anzuzeigen.
Eine weitere Möglichkeit, dies mit transform: skew zu tun, ist ohne zusätzliches Element. Wir können den Header verzerrn und dann alle Kindelemente entzerren: http://codepen.io/anon/pen/OWqrBV
Wir haben uns kürzlich für den Ansatz entschieden, ein verzerrtes Pseudo-Element zu verwenden, was am besten funktionierte, aber es funktioniert nur für einfache diagonale Header.
Hallo Leute, ihr leistet hier großartige Arbeit!
Bitte, nur eine Sache, vielleicht bin ich überarbeitet oder so, aber wie funktioniert die Farbänderung eines Hintergrund-SVG (der Füll-Trick)? Ich habe es mehrmals versucht und ein bisschen danach gesucht, und es scheint, dass es als CSS-Hintergrundbild nicht Teil des DOM ist, also sollte es nicht möglich sein, so damit zu arbeiten. Fehlt mir etwas Offensichtliches?
Vielen Dank!
Liebe das! Danke fürs Teilen!
Leider sind SVGs in Safari auf macOS auf einem Retina-Gerät nicht wirklich perfekt. Habe Chrome nicht getestet. Ich schiebe es auf den scharfen Bildschirm.
Ja, überraschend, dass der Autor das nicht angesprochen hat, da es eine einfache Lösung ist – erstelle einfach die Form so, dass sie unten „blockig“ ist (vielleicht äquivalent zu 4px und setze dann margin-bottom auf das SVG, z. B. -2px
Ich fühle mich jetzt ziemlich bestätigt in meiner Designwahl <:)
https://yourweb.expert
Ich hatte in der Vergangenheit einige Erfolge mit CSS Pseudo-Elementen, auf eine hintergrundadditive Weise.
Hier ist eine schnelle Demo einiger möglicher Techniken: http://codepen.io/ndorfin/pen/egqOLG?editors=0100
Ich habe eine Mixin mit der SVG-Methode erstellt. Sie kodiert das SVG und setzt es als Hintergrundbild in einem Pseudo-Element. Dies ermöglicht eine schnelle Verwendung in einer in sich geschlossenen Weise, die keine zusätzliche Inline-Markup erfordert.
https://github.com/josephfusco/angled-edges
Haha, ich habe gerade letzten Monat damit angefangen. Bin so froh, dass ich hierher gekommen bin, damit ich nicht kämpfen und es selbst herausfinden muss. Ich habe dieses Konzept am 01. Februar gepostet https://dribbble.com/shots/3259225-Arctic-Explorer-site