Hur man skapar en isometrisk layout med CSS 3D-omvandlingar

Vi drar inspiration till denna handledning från Envatos senaste initiativ; Envato Elements. Elements hemsida har en rad kreativa produkter (teckensnitt, ikoner, grafiska mallar och så vidare) som visar dem tillsammans på en snygg isometrisk rutnätlayout.

Elements hemsida

Vi kommer att återskapa detta isometriska landskap med hjälp av CSS 3D Transforms.

Isometrisk projicering

"Isometrisk projicering" är en metod (vanligtvis används inom teknik och spel på 80-talet och 90-talet där 3D-bearbetningskraften var mycket begränsad) för att presentera en design i tydliga tre dimensioner. 

Några objekt betraktas med isometrisk projektion. Bild på Wikipedia.

Det här är inte tre dimensioner när vi upplever dem i verkligheten - planet som de visas på saknar perspektiv.

Z-axeln

Under många år har webben varit en tvådimensionell miljö och vi är vana vid att placera element längs två axlar eller riktningar: x-axeln (horisontal) och y-axeln (vertikal). 

Notera: y-axeln på webben är omvänd i strid med den ursprungliga kartesiska koordinatprincipen, eftersom webben läses uppifrån och ned.

Den tredje axeln, nämligen z-axeln, är nödvändig för att projicera en 3D-vy. Denna axel representerar djup, och rörelseriktningen för ett objekt längs z-axeln är i förhållande till vår synvinkel; Det kan flytta uppifrån, nedåt eller nära långt.

De tre axlarna x, y och z i 3D-planet. Bild av W3C.

Dessa tre axlar kan appliceras på CSS Transform-funktionen för att skapa en 3D-projektion. I följande demo använder vi rotateX ()rotateY (), och rotateZ () funktion för att skapa en isometrisk projicering av en rektangel:

Nu när vi har den grundläggande principen som ligger till grund för en isometrisk projicering, kan vi sätta den i praktiken. Och vi börjar med HTML.

html

På samma sätt som Envato Elements hemsida har vi en rutnätlayout. Vårt nät omfattar en rad med nio kolumner. Varje kolumn innehåller en produktbild, länken som pekar på produktsidan och som du kan se nedan, a spänna element som vi kommer att använda för att modellera bildskuggan.

CSS

Vi börjar med de stilar som återställer standardstilar för vissa element.

html box-size: border-box;  *, *: före, *: efter box-size: arv;  img maxbredd: 100%; höjd: auto; display: block;  siffra marginal: 0;  

Dessa stilar ställer in alla delar med box-dimensionering, vilket kommer att göra bestämningen av elementets totala storlek lättare förutsägbar. Vi ställer också in bildavbildningen till blockera för att ta bort den lilla blankbilden längst ner på bilden. Och äntligen tar vi bort figur elementmarginal som sveper bilden.

Sedan fortsätter vi med raden och kolumnerna.

.rad bredd: 960px; display: flex; flex-wrap: wrap; motivera-halt: flex-ände; transformera: rotateX (60deg) roteraY (0deg) rotateZ (-45deg);  .kolumn vaddering: 20px; Bredd: 50%; max bredd: 50%; flex: 1 1 50%;  

Ovanstående stilar anger raden till display: flex, sätt transformationsstilarna till 3D så att webbläsarna klarar sig korrekt på z-axeln, rotera raden för att skapa en isometrisk vy och slutligen dela kolumnerna i raden i hälften.

Därefter måste vi lägga till de stilar som placerar barnelementen i raden och kolumnen i 3D-vy. Den här stilen är väsentlig. De transform-stil: bevara-3d måste deklareras på varje element som är inslaget under .rad, så de kommer att bli korrekt gjorda i 3D-utrymme - speciellt i Firefox - och Z-axeln kommer att träda i kraft.

.rad, kolumn, .ItemCard, .ItemCard__dest, .ItemCard__thumb position: relative; backface-visibility: hidden; transform-stil: bevara-3d;  

Därefter lägger vi till stilar till .omslag klass, som vi har lagt till produktlänkanker, och spänna element (snart vara skuggan).

.täcka display: block; position: absolut; topp: 0; vänster: 0; bredd: 100%; höjd: 100%;  

Har du lagt till den här stilen, produktlänken samt spänna element sträcker sig hela vägen över behållaren. Vi kan också ändra elementstackposition senare.

Bildstilar

Följande stilar styr bildpositionspositionen, vadderingen och några 3D-saker. De backface-synlighet är inställd så att vi inte ser igenom stapeln under det översatta eller roterade elementet och inte ser det inverterade ansiktet på bilden.

Vi tillämpar övergången till bilden och rör sig genom z-axeln för att göra det "levitate" ovanför "skuggan av  15px. På samma sätt lägger vi till några 3D-saker: backface-synlighet och omvandla stil, så det kommer att göra 3D-vyn ordentligt.

.ItemCard__thumb img position: relative; z-index: 1; övergång: transformera 0,3s kubisk-bezier (0,165, 0,84, 0,44, 1); transformera: translate3d (0, 0, 20px);  

Skuggstilar

Följande ger oss våra skuggstilar. Skuggans spridning bör vara smal och skuggan skuggas mörkare eftersom bilden, vid denna punkt, är närmare (vid 15px) till "golvet" där skuggan återspeglas.

.skugga display: block; övergång: alla 0,3 kubisk-bezier (0,165, 0,84, 0,44, 1); opacitet: .9; bakgrundsfärg: rgba (0, 0, 0, 0,1); boxskugga: 0 0 5px 1px rgba (0, 0, 0, 0,1); 

Vi har gjort ganska många framsteg:

Lägg märke till det avrundade hörnet och skuggan sprid sig under bilden.

Hover Effect

Huver-effekten gör varje bildminnebild mer engagerande.

.kolumn: svävar.ItemCard__dest z-index: 10;  .column: hover .ItemCard__dest, .column: sväva .ItemCard__thumb img transform: translate3d (0, 0, 50px) rotateX (-5deg); transformations-ursprung: centrum botten;  .column: hover .ItemCard__thumb .shadow opacity: .6; bakgrundsfärg: rgba (0, 0, 0, 0,1); boxskugga: 0 0 10px 6px rgba (0, 0, 0, 0,1); 

I hover-tillståndet, som visas i ovanstående kodbit, flyttar vi först elementstapeln högre, så bilden (och länken) kommer att visas över resten av objekten i rutnätet.

Vi lyfter också bilden något; flytta den bort från "golvet" och lite närmare "ljuskällan". Det sägs att skuggan borde förlora viss klarhet, så vi minskar skuggens opacitet.

Huvud-staten objektet levitated högre än resten och tippade något

Avslutar

I denna handledning har vi använt 3D-transformer i CSS för att bygga en replik av Envato Elements isometriska nät. Vi lärde oss också att lägga till realism när det gäller skuggor och ljuskällor. Ta en titt på demo, ta tag i källfilerna och låt oss veta vad du gör med dem!

3D Transforms är ett kraftfullt CSS-verktyg. Men betrakta dem inte bara en gimmick eller en leksak för att lägga till ett fint lager på nätet. Om det tillämpas eftertänksamt kan 3D-element också lösa några notoriska designproblem. 

Ytterligare resurser

  • CSS3-övergångar och omvandlingar från grunden

    Det finns några fantastiska exempel på CSS-omvandlingar och övergångar, och även om du kanske blåses bort av dem finns det en bra chans att du också är ...
    Thoriq Firdaus
    CSS
  • Vad du kanske inte vet om Z-Index Property

    Z-indexegenskapen i CSS verkar enkelt nog, men det finns mycket att upptäcka under ytan om du verkligen vill förstå hur det fungerar. I denna…
    Steven Bradley
    CSS
  • Äventyr i den tredje dimensionen: CSS 3D-omvandlingar