In meinem vorherigen Tutorial habe ich Ihnen gezeigt, wie Sie mit CSS 3D-Transformationen ein isometrisches Rasterlayout erstellen. Es war ziemlich herausfordernd, da einige Browser wie Firefox etwas unterschiedliche Ansätze haben, wie sie Elemente auf einer dreidimensionalen Ebene rendern.
In diesem Lernprogramm werden 3D-Transformationen weiter erforscht, indem ein 3D-Parallax-Rollover-Effekt erstellt wird, der von der Benutzeroberfläche von Apple TV inspiriert ist. Wir werden Envato Elements weiterhin als Inspiration für unsere Inhalte verwenden. Hier arbeiten wir an:
Bewegen Sie den Mauszeiger über das Miniaturbild und bewegen Sie den Mauszeiger. Die Miniaturansicht lehnt sich an die Cursorposition und die Bewegungsrichtung an.
Als Menschen ist unsere Sicht bis zum verschwindenden Horizont begrenzt, und unser binokulares Sehen schafft das, was wir als wahrnehmen Perspektive. Die Perspektive hilft uns, ein Objekt als weiter entfernt zu interpretieren, anstatt es einfach zu verkleinern.
Das isometrische Raster aus dem vorherigen Tutorial berücksichtigt nicht die "Perspektive". Die Rastergröße (Höhe und Breite) wird tatsächlich beibehalten. In Wirklichkeit sollten wir sehen, dass die äußerste Seite des Gitters aufgrund der Perspektive schrumpft.
In CSS können Sie der 3D-Transformation eine Perspektive hinzufügen Perspektive()
Funktion. Das ist es wert, darauf hingewiesen zu werden Perspektive()
muss vor anderen Transformationsfunktionen wie z drehen()
und Übersetzen()
damit es wirksam wird. Es erfordert auch einen Wert, der den Sichtabstand relativ zum Element definiert. ob das Element aus der Ferne oder aus der Nähe betrachtet werden soll.
#perspective transform: perspektive (600px) drehenX (60 Grad) drehenY (0 Grad) drehenZ (-45 Grad);
So rendern wir eine 3D-Ebene mit CSS. Nun wollen wir sehen, wie wir dies anwenden können, um eine Parallaxe-Effekt. Wir fangen mit dem HTML an:
Wenn Sie unserem vorherigen Tutorial genau gefolgt sind, werden Sie feststellen, dass das HTML-Markup sehr ähnlich ist. Hier haben wir eine div
mit einer Klasse von ItemCard
Umbenennung des Namens, des Bildes und des Links, der auf eines der Elemente in Envato Elements zeigt.
SchriftartenHerbert Lemuel
August10
Fügen Sie das obige HTML-Markup von oben nach unten hinzu.
Wir beginnen mit dem Hinzufügen einiger Reset-Stile, die in diesem Fall die Größenanpassung des Elements auf setzen Border-Box
, entferne das Zahl
Elementrand und machen das Bild flüssig.
html Box-Sizing: Border-Box; *, *: before, *: after Box-Sizing: erben; Zahl Marge: 0; img max-width: 100%; Höhe: Auto;
Nachdem dies erledigt ist, fügen wir der Version einige Stile hinzu ItemCard
. Jenseits der ästhetischen Regeln wie Grenzradius
und Box Schatten
, Wir definieren das Element Übergang und Transformation einschließlich der Perspektive()
Funktion.
.ItemCard position: relativ; Anzeige: Flex; Überlauf versteckt; Flex-Richtung: Spalte; Cursor: Zeiger; Grenzradius: 6px; Box-Schatten: 0 2px 10px rgba (0,0,0, .3); Ausrichten-Elemente: Mitte; Max-Breite: 510px; Höhe: Auto; Übergang: Transformieren von 0,5s Cubic Bezier (0,215, 0,61, 0,355, 1), Box-Shadow 0,5s Cubic Bezier (0,215, 0,61, 0,355, 1); transform: perspektive (600px) translate3d (0, 0, 0);
Für weitere Informationen zu was Kubik-Bezier ()
Hier ist der Kurs von Guy Routledge:
Als nächstes fügen wir Stile hinzu ItemCard
untergeordnete Elemente; den Artikelnamen, den Namen des Artikelautors und den Elementtyp. In ähnlicher Weise definieren die Stile Sichtbarkeit, Position, Größe, Übergänge und Transformationen dieser Elemente.
.ItemCard .cover Position: absolut; oben: 0; links: 0; Breite: 100%; Höhe: 100%; .ItemCard__dest z-index: 30; Bildschirmsperre; .ItemCard__thumb position: relativ; z-Index: 3; Polsterung: 0; Übergang: transform .2s; .ItemCard__thumb img display: block; Übergang: Box-Schatten 0.2s; .ItemCard__layer z-index: 10; Übergang: Opazität 1s Kubikbenzier (0,215, 0,61, 0,355, 1); Deckkraft: 0; Hintergrund: linearer Gradient (120 Grad, # 9d50bb 0%, # 4096ee 100%); .ItemCard__summary z-index: 20; Polsterung: 25px; Anzeige: Flex; Flex-Richtung: Spalte; transform: perspektive (600px) translate3d (0, 100%, 0); Text ausrichten: Mitte; Farbe: #fff; Inhalt rechtfertigen: Mitte; .ItemCard__title margin: 8px 0; Schriftgewicht: 900; transform: translate3d (0, 150px, 50px); Text-Transformation: Großbuchstaben; Farbe: #fff; Schriftgröße: 19px; Zeilenhöhe: 1,48;
Fügen Sie die folgenden Stile hinzu, um die untergeordneten Elemente von zu erstellen ItemCard
und das .ItemCard__summary
entspricht der dreidimensionalen Darstellung.
/ ** * 3D-Elemente für die Nachkommen erhalten * / .ItemCard, .ItemCard__summary transform-style: preserve-3d; Sicht nach hinten: versteckt;
Das ItemCard
Hover-Statusstile definieren die Box Schatten
auch die Z
Achse einiger untergeordneter Elemente:
/ ** * Hover-Status * / .ItemCard: Hover Box-Schatten: 0 15px 30px rgba (0, 0, 0, 0,3); .ItemCard: hover .ItemCard__layer Deckkraft: .9; .ItemCard: hover .ItemCard__title transform: translate3d (0, 0, 50px); .ItemCard: hover .ItemCard__meta.category transform: translate3d (0, 0, 40px); .ItemCard: hover .ItemCard__meta.designer Übergangsverzögerung: .05s; transform: translate3d (0, 0, 20px);
An diesem Punkt haben Sie etwas, das dem folgenden ähnelt:
Anfangsstile und Hover-StatusstileWir werden hier etwas jQuery nutzen, stellen Sie also sicher, dass Sie irgendwo in Ihrem Dokument auf jQuery verweisen. Fügen Sie in CodePen https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js als externen JavaScript-Pfad hinzu.
Der Parallax-Effekt wird durch zwei jQuery-Events angewendet mousemove
und Mouseout
. Das mousemove
Das Ereignis wird ausgelöst, wenn sich der Cursor über dem Zielelement befindet. in diesem Fall,.ItemCard
. Das Mouseout
Wird ausgelöst, wenn sich der Mauszeiger bereits außerhalb des Zielelements befindet.
$ (document) .on ("mousemove", ".ItemCard", function (Ereignis) ) .on ("mouseout", ".ItemCard", function () );
Während der mousemove
In diesem Fall rufen wir die Koordinaten des Mauszeigers ab, bestimmen die ItemCard
Rotation, und wenden Sie diese Zahlen an, indem Sie Inline-Stile hinzufügen. Während der Mouseout
Bei diesem Event entfernen wir den Inline-Stil, so dass die ItemCard
kehrt in seine Ausgangsposition zurück.
$ (document) .on ("mousemove", ".ItemCard", Funktion (Ereignis) / ** * Die Hälfte der 'ItemCard'-Breite * @type integer * / var halfW = (this.clientWidth / 2) ; / ** * Hälfte der 'ItemCard'-Höhe * @type Ganzzahl * / var halfH = (this.clientHeight / 2); / ** * Mauszeiger X-Koordinate * @type Ganzzahl * / var coorX = (halfW - (event.pageX - this.offsetLeft)); / ** * Y-Koordinate des Mauszeigers * @type integer * / var coorY = (halfH - (event.pageY - this.offsetTop)); / ** * X Rotationsgrad von 'ItemCard' * @type integer * / var degX = ((coorY / halfH) * 10) + 'deg'; // maximaler Grad = 10 / ** * Y Rotationsgrad von 'ItemCard '* @type integer * / var degY = ((coorX / halfW) * -10) +' deg '; // maximaler Grad = 10 / ** * Fügen Sie die Inline-Styles * / $ (this) .css hinzu ('transform', function () return 'perspektive (600px) translate3d (0, -2px, 0) Maßstab (1.1) rotateX (' + degX + ') rotateY (' + degY + ')';) .children ('.ItemCard__summary') .css ('transform', function () return 'Perspektive (600px) translate3d (0, 0, 0) drehenX ('+ degX +') drehenY ('+ degY +') '; ); ) .on ("mouseout", ".ItemCard", function () / ** * Entfernen Sie die Inline-Styles * / $ (this) .removeAttr ('style') .children ('.ItemCard__summary') .removeAttr ( 'style'););
Und das ist ein Wrap.
In diesem Tutorial haben wir gelernt, wie Sie mit 3D-Transformationen einen von Apple TV inspirierten 3D-Parallaxe-Effekt erstellen können.
Denken Sie daran, dass dieser Effekt auf berührungsfähigen Geräten nicht gut funktioniert. Daher müssen Sie eine Art Rückfall in Betracht ziehen, möglicherweise mit Touch-Ereignissen, um den Parallaxe-Effekt zu replizieren. Ich werde das auf den Tisch legen, damit Sie es in Angriff nehmen können!