Adobe hat einige ziemlich coole Header-Leisten für Module auf ihrer Website. Die Header-Leiste ist in linke und rechte Abschnitte unterteilt. Der linke Teil ist ein erklärender Titel und der rechte Teil ist ein verwandter Link. Aber lassen Sie uns super kritisch darauf eingehen, wie sie es gemacht haben.

Erstens verwenden sie ein nicht sprites-basiertes Bild dafür.

Das bedeutet eine zusätzliche HTTP-Anfrage nur für die Header. Schlimmer noch, der :hover-Effekt ist ein völlig separates Bild. Das bedeutet eine weitere HTTP-Anfrage und ein „Flash of Black“, während das zweite Bild bei Ihrem ersten Hover geladen wird.
Wir können das mit null Bildern machen! Hier ist unsere Version

Das Markup für den Header ist nur ein Titel mit einem Link darin
<div class="module">
<h2>Community <a href="#">Blue</a></h2>
<!-- stuff in module -->
</div>
Hier ist die grundlegende Einrichtung des Headers, mit dem Link rechts mit grundlegenden Farben, einschließlich der geraden weißen Linie, die durch einen Rand erzeugt wird
.module h2 {
background: #ccc;
padding: 0 0 0 10px;
font-size: 16px;
/* Thickness of the bar more easily achieved with line-height
since padding would push link inward. */
line-height: 2;
}
.module h2 a {
float: right;
position: relative;
text-decoration: none;
color: #333;
padding: 0 10px;
border-left: 5px solid white;
}
Jetzt kommt der Trick, um den Pfeil innerhalb der Linie zu erhalten, indem einfach CSS-Dreiecke über die immer nützlichen Pseudo-Elemente angewendet werden.

.module h2 a:before,
.module h2 a:after {
content: "";
position: absolute;
/* Pushed down half way, will get pulled back up half height of triangle
ensures centering if font-size or line-height changes */
top: 50%;
width: 0;
height: 0;
}
.module h2 a:before {
left: -12px;
/* Triangle */
border-top: 8px solid transparent;
border-bottom: 8px solid transparent;
border-right: 8px solid white;
/* Pull-up */
margin-top: -8px;
}
.module h2 a:after {
/* Smaller and different position triangle */
left: -5px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 6px solid #a2d6eb;
margin-top: -6px;
}
Ein wesentlicher Unterschied zwischen unserer und ihrer Version ist, dass sie einen Farbverlauf haben, der direkt durch den Pfeil verläuft. Das ist mit unserer nicht möglich, da es nicht praktikabel ist, einen Farbverlauf mit der CSS-Dreieck-Technik anzuwenden. Das soll nicht heißen, dass Farbverläufe ausgeschlossen sind, Sie müssten nur sicherstellen, dass dort, wo der Pfeil an den Hauptlink angebracht ist, die Farbe einheitlich ist.

Für die Demoseite habe ich ein paar verschiedene Farben, Übergänge und Beispiele hinzugefügt, bei denen doppelte Dreiecke verwendet werden könnten, um eine abgewinkelte Linie zu simulieren.
Danke, Sir, Sie leisten großartige Arbeit. Ich habe Ihre Schulung auf Lynda.com gesehen und Sie sind ein sehr guter Lehrer. Vielen Dank...
Für neuere Browser könnten Sie die transform-Eigenschaft verwenden und ein Quadrat um 45 Grad drehen. Obwohl ich glaube, dass Sie sicherstellen müssten, dass das Quadrat oberhalb des linken Header-Panels, aber unterhalb des rechten Header-Panels mit einer Z-Index-Trickerei positioniert ist.
Ja – außerdem könnte man das mit :before machen und einen Rahmen darum anwenden (oder box-shadow mit spread) und immer noch :after für etwas anderes haben.
Stellen Sie sicher, dass Sie das in die Snippets aufnehmen!
Sehr schön – perfekt für ein paar Brotkrümel. Ich muss überprüfen, was unser Freund IE dazu sagt.
sehr cool, danke!
Zwei Worte, „kick“ und „ass“...
Danke...
Ich stimme Ihrer Begeisterung zu, Daniel, nur nicht Ihrer Ergänzung.
Mit demselben Konzept habe ich kürzlich einen Pfeil in einem Link/Button hinzugefügt. Funktioniert großartig... außer dass ich einen zweiten 1px Rand an den transparenten Seiten nicht loswerden kann. Ihre Demo hat im selben Browser einen Geisterrand. Es scheint mit FF8 und der Schriftfarbe zusammenzuhängen, glaube ich.
Leider habe ich bisher noch keine Lösung gefunden.
Versuchen Sie, den Randstil auf „inset“ an den transparenten Seiten des Elements zu ändern.
Siehe meinen Kommentar unten über
transparentund warum es der falsche Wert ist. Das Setzen des Randstils auf „inset“ ist die falsche Lösung.Man könnte ein Pseudo-Element um 45 Grad drehen und (ich glaube nur in Webkit) ihm einen diagonalen Farbverlauf zuweisen.
Sehr schön!
Zwei Kommentare
1) Ich sehe denselben Rand, den Jeremy mit FF 7 erwähnt hat.
2) Was hat die obige Antwort mit dieser Demo zu tun? Noch ein verdammter SPAMMER! (Hinweis des Herausgebers: entfernt)
Ich habe es ein wenig angepasst, damit der kleine Pfeil auch einen Farbverlauf enthält. Sagen Sie mir, was Sie denken, Chris
http://jsfiddle.net/PFWbs/
Wow, das ist sehr beeindruckend :(o)
Bitte verwenden Sie nicht
transparent! Leute, die einen überlegenen Browser (z. B. Firefox) verwenden, der Antialiasing macht, leiden, weiltransparentnicht das ist, was Sie meinten. Denken Sie daran, dasstransparentäquivalent zurgba(0,0,0,0)(transparentes Schwarz) ist. Sehen Sie sich die Demoseite in Firefox an und Sie werden sehen, warum Sietransparentnicht verwenden *müssen*, sondern stattdessen Werte wiergba(255,255,255,0)(transparentes Weiß).Ich sehe keinen Unterschied zwischen „transparent“ und rgba(255,255,255,0) in Firefox. Was meinen Sie?
Ach... Ich habe das Antialiasing-Ding endlich verstanden. Der schwarze Schatten hat mich in Firefox so lange genervt.
Vielen Dank, Chris!
@JK: Es liegt am Antialiasing. Wenn Sie von Farbe X zu keiner Farbe wechseln, benötigen Sie auf der anderen Seite transparentes X, nicht transparentes Schwarz. Nur entlang der diagonalen Kanten wird es angezeigt. In einem Bereich mit durchgehender Füllung sieht
rgba(255,255,255,0)immer gleich aus wiergba(0,0,0,0)– transparent. Eine Möglichkeit, darüber nachzudenken, ist, einen größeren Farbverlauf (das Antialiasing ist im Grunde ein Farbverlauf von bis zu 3px Länge) von#ccczutransparentzu nehmen und ihn mit einem Farbverlauf von#ccczurgba(204,204,204,0)zu vergleichen. Das Ergebnis ist sehr unterschiedlich.In der Demo, wie sie ist, sind die diagonalen Kanten in Firefox sehr hässlich, während sie in Chrome oder IE nur suboptimal sind (da sie nicht antialiased sind).
Ich habe einen ausführlichen Blogbeitrag zu diesem Thema fast fertig, ich werde versuchen, mich daran zu erinnern, hier einen Link zu posten, sobald ich mit dem Blog begonnen und ihn veröffentlicht habe.
Brillant. Das hat den Trick gemacht. Danke
So ist der Zurück-Button in SenchaTouch gestaltet. Verwirrend, aber wenn man es einmal verstanden hat, ergibt es Sinn! Toller Artikel!
Das ist großartig, aber ich frage mich nur... Welche Schriftart verwenden Sie für den Teil, in dem die Pseudo-Elemente before und after stehen?
Toller Artikel, Chris. Ich mag all die zusätzlichen Dinge, die man durch das Lesen der Kommentare lernen kann, wie die FF-Antialiasing-Sache.
Enrique, die Schriftart sieht aus wie Light up the World.
Toller Artikel… Für mich immer noch verwirrend… aber ich werde ihn noch ein paar Mal lesen, um die Funktionalität von before und after zu verstehen…
Danke!
Ja, ich arbeite immer noch daran, :before und :after zu verstehen. Ich denke, ich muss einfach mit einigen Pseudo-Elementen üben, anstatt nur Artikel darüber zu lesen.
Das hier liebe ich einfach! Tolle Arbeit!
Könnte man nicht einfach einen 45-Grad-Linearverlauf hinzufügen, um jeden Farbverlauf zu imitieren, der im mittleren Abschnitt des Links auftreten würde, und ihn dann drehen? Es würde etwas Mathematik erfordern, aber ansonsten scheint es eine triviale Lösung für dieses Problem zu sein.
Benutze ein Bild, viel einfacher, und du musst nicht so viele Browser-Unterstützungen machen.
Aber das ist eine großartige Technik
Die Browser-Unterstützung für Pseudo-Elemente ist ausgezeichnet. IE6 & IE7 sehen den Pfeil nicht, haben aber einen ausreichenden Fallback.
Die Verwendung von Bildern bedeutet mehr HTTP-Anfragen und längere Ladezeiten (ja, es sind winzige Unterschiede, aber trotzdem).
Es kommt also darauf an, was wichtiger und für das aktuelle Projekt geeigneter ist: Geschwindigkeit und Ressourcen oder Rückwärtskompatibilität.
Dieser Unterschied wird bei einer Internetverbindung wie meiner mit 0,6 Mbps viel größer.
@Ludwig: Die Demoseite wird in IE6 überhaupt nicht gut degradiert, die Links enden unter den Bannern und im Allgemeinen sehen die Dinge nicht gut aus. Aber wenn Sie für IE6 designen, wissen Sie, dass Sie vor einigen Herausforderungen stehen. :-) Glücklicherweise müssen die meisten Leute nicht mehr für IE<8 designen, und selbst große Unternehmen und Regierungsbehörden führen endlich IE8 ein, sodass auch diese Nische bald von den Fesseln von IE6/7 befreit sein wird. Designer für Seiten, die sich an China richten, scheinen jedoch noch eine Weile damit gefangen zu sein. Aber wir sind fast da!
Das ist wirklich ein schönes Tutorial, danke. Kann mir jemand etwas über das beste JavaScript-Buch oder Tutorials-Website erzählen…… Danke im Voraus
Wow! Fantastische Arbeit. Ich fühle mich sehr glücklich, heute zufällig auf Ihre Website gestoßen zu sein. Das wird definitiv nicht das letzte Mal sein.
Grüße aus Deutschland :)
Diese sind großartig, danke für das Tutorial!
So ein erstaunlicher Beitrag. Danke!
Netter Touch. Habe Ihre Seite zu meiner Morgenkaffee-Liste hinzugefügt :)
Was Farbverläufe angeht, könnte man nicht den Pfeil transparent und die nicht-Pfeil-Elemente weiß machen und es dann in einen Div mit einem Hintergrundverlauf legen? Ich schaue mir das gerade an und mochte Ihr Beispiel wirklich. Danke
Das Folgende ist vielleicht nicht so elegant, bietet aber einen Farbverlaufspfeil. Ist das für irgendjemanden von Nutzen?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>untitled</title> <meta name="generator" content="TextMate http://macromates.com/"> <meta name="author" content="Web Developer"> <!-- Date: 2011-12-22 --> <style> * {margin:0; border:0; padding:0} .left-arrow-bottom { border-color: transparent transparent #cacaca #cacaca; border-style: solid; border-width:5px; width:0; height:0; } .left-arrow-top { border-color: #cacaca transparent transparent #cacaca; border-style: solid; border-width:5px; width:0; height:0; } .link-left{ float:left; width:8px; margin-left:2px; } .link{ float:left; color:white; margin-top:8px; background-color:transparent; background-image:url("images/vgradient.gif"); background-position:2px; background-repeat: y-repeat; width:120px; } .link-right{ float:right; width:8px; } .button { background-color:transparent; margin-left:2px; padding-left:2px; padding-right:4px; } </style> </head> <body bgcolor="#cacaca"> <div class="link"> <div class="link-left"> <div class="left-arrow-top"> </div> <div class="left-arrow-bottom"> </div> </div> <span class="button">Home</span> </div> </div> <div class="link"> <div class="link-left"> <div class="left-arrow-top"> </div> <div class="left-arrow-bottom"> </div> </div> <span class="button">About Us</span> </div> </div> <div class="link"> <div class="link-left"> <div class="left-arrow-top"> </div> <div class="left-arrow-bottom"> </div> </div> <span class="button">Contact</span> </div> </div> </body> </html>ZUR INFO
Die Demo funktioniert in IE8 nicht
(es ist traurig, aber wahr)
Ich muss sagen, ich liebe diese Art von Dingen. @Paul, fällt es in IE8 anständig zurück? Ich müsste eine VM starten, um das sicher zu überprüfen, aber ich bin sicher, dass das durch bedingte Anweisungen oder vielleicht sogar mit Modernizr gehandhabt werden könnte?
@Chris Morgan
Sie sind mein Held! Ich hatte das Firefox-Antialiasing-Problem, als ich eine CSS-Sprechblase erstellt habe. Ich konnte einfach nicht verstehen, warum Firefox zusätzliche Linien hinzufügte. Die Verwendung von rgba(255,255,255,0) hat den Trick gemacht!