Opprett en CSS-Only Image Reveal Effect med gjennomsiktige grenser
EN CSS-only image reveal effect kan løses på forskjellige måter. Det er faktisk ganske enkelt å kode et design der bildet skiller seg ut av (er overfylt av) dens solide bakgrunn -du bare plasser et bilde over et mindre element med en solid bakgrunn.
Du kan få det samme resultatet hvis du bruker gjennomsiktige grenser, hvor du holder Størrelsen på bakgrunnselementet er det samme som forgrunnen og legge til gjennomsiktige grenser for å kunne opprett et tomt rom for forgrunnen å overflyte inn i.
Det er Noen fordeler ved å bruke sistnevnte metode. Siden det er de gjennomsiktige grensene som gir området til forgrunnen å overflyte inn, kan vi kontroller overløpsretningen mellom venstre, høyre, topp og nederste kant. Også, har samme størrelse for både forgrunnen og bakgrunnen gjør det lettere å flytte begge elementene samtidig over hele siden.
I et nøtteskall, skal vi se hvordan opprett en CSS-only image reveal effekt bruker en mindre solid bakgrunn med en Forgrunnsbilde som har gjennomsiktige grenser. Du kan sjekke ut siste demonstrasjon under.
1. Lag opprinnelig kode
HTML-messig, bare en I CSS bruker vi to CSS-variabler, Vi legger også til Vi legg til en tom De Vi legger til bildet i De På skjermbilde nedenfor du kan se hva vi har så langt ( For å legge til mindre (lysbilde) bakgrunn bak bildet, Vi bruker det andre pseudoelementet, Vi oppretter en annen CSS-variabel, De bredde er beregnet som De høyde er beregnet som Med Et CSS filter av Her er skjermbilde av demoen gjengitt så langt (med Vi Legg til Som vi allerede lagt til Nedenfor kan du se siste demonstrasjon. Hvis du viser
--BGC
og --dim
for bakgrunnsfarge og dimensjoner av .foo
beholder, henholdsvis. I eksemplet brukte jeg samme verdi for bredde og høyde for å få en firkantet boks, opprett separate variabler for høyde og bredde hvis du vil ha en rektangulær.stilling: relativ
regere til .foo
, slik at dens pseudo-elementer, som vi skal bruke til avslører bildet, kan være helt posisjonert (se nedenfor), og dermed stablet på hverandre. .foo --bgc: # FFCC03; - dim: 300px; bredde: var (- dim); høyde: var (- dim); bakgrunnsfarge: var (- bgc); posisjon: relativ;
innhold
eiendom til begge pseudo-elementene, .foo :: før
og .foo :: etter
, for å få dem riktig gjengitt. .foo :: før, .foo :: etter innhold: "; posisjon: absolutt; venstre: 0; topp: 0;
.foo
element, dets to pseudo-elementer, .foo :: før
, .foo :: etter
, og deres :sveve
pseudo-klasser få en overgang
eiendom det vil legg til en enkel overgang til dem i 500 millisekunder (et halvt sekund). .foo, .foo: hover, .foo :: før, .foo :: after, .foo: hover :: før, .foo: hover :: etter overgang: transform 500ms ease-in;
2. Legg til bildet
.foo :: før
pseudo-element som bakgrunnsbilde, og størrelse den til å dekke hele pseudo-elementet med bredde
og høyde
eiendommer. Vi stable den rett under .foo
element bruker z-indeks: -1
regel. .foo :: før bredde: 100%; høyde: 100%; bakgrunn: url (camel.png) senter / deksel; z-indeks: -1;
senter
søkeord sentrerer bildet, mens dekke
Søkeordet skalerer bildet til dekke hele elementet samtidig som aspektforholdet opprettholdes. z-indeks
er fjernet fra .foo :: før
slik at den kan sees):3. Legg til uttrekksbakgrunnen
.foo :: etter
.--b
, for kantbredde. Vi gir tre gjennomsiktige grenser til ::etter
pseudo-element: topp, høyre og bunn. .foo :: etter - b: 20px; bredde: kalk (100% - var (- b)); høyde: kalk (100% - kalk (var (- b) * 2)); grense: var (- b) solid gjennomsiktig; border-left: none; boksskygge: innsett 0 var (- dim) 0 var (- bgc); filter: lysstyrke (.8); z-indeks: -2;
calc (100% - var - b))
som returnerer den totale bredden på .foo
minus den totale bredden av sine horisontale grenser (kun høyre kant, siden det ikke er igjen grensen).kalk (100% - kalk (var (- b) * 2))
som returnerer den totale høyden på .foo
minus den totale bredden av sine vertikale grenser (øverste og nederste grenser).box-shadow
eiendom, vi også legg til en horisontal innskuddskygge av størrelsen samme som .foo
(som er var (- dim)
).lyshet (0,8)
mørk bakgrunnsfargen litt, og til slutt, den z-indeks: -2
regel plasserer ::etter
pseudo-element under ::før
som inneholder bildet.z-indeks
fjernet fra begge pseudoelementene slik at de kan ses):4. Legg til transformasjonen
forvandle
eiendom til de to pseudo-elementene, så når brukeren svinger over .foo
, begge pseudo-elementene er flyttet horisontalt.overgang
eiendom til alle elementer på slutten av trinn 1 er bevegelsen av bildet og dets bakgrunn både animert. .foo: svever :: før, .foo: svever :: etter transform: translateX (100%);
Bonus: Valgfritt margin
.foo
ved siden av andre elementer på en side og ønsker disse andre elementene til Flytt deg når bildet og dets bakgrunn glir ut, da legg til en høyre margin med samme bredde som den for .foo
til .foo: hover
element. .foo: svever margin-right: var (- dim);