Hemsida » Kodning » Skapa en CSS-Only Image Reveal Effect med transparenta gränser

    Skapa en CSS-Only Image Reveal Effect med transparenta gränser

    en CSS-only image reveal effect kan lösas på olika sätt. Det är faktiskt ganska enkelt att koda en design där bilden står ur (överflödas av) dess solida bakgrund -du bara placera en bild över ett mindre element med en solid bakgrund.

    Du kan få samma resultat om du använder genomskinliga gränser, där du behåller storleken på bakgrundselementet är desamma som förgrunden och lägga till transparenta gränser för att skapa ett tomt utrymme för förgrunden att överfalla i.

    Det finns några fördelar med att använda den senare metoden. Eftersom det är de transparenta gränserna som ger området förgrunden att överfalla in, kan vi kontrollera överflödets riktning mellan vänstra, högra, övre och nedre gränsen. Har också samma storlek för både förgrunden och bakgrunden gör det lättare att flytta båda elementen samtidigt tvärs över sidan.

    I ett nötskal ska vi se hur vi ska skapa en CSS-only image reveal effekt använder en mindre solid bakgrund med en förgrundsbild som har genomskinliga gränser. Du kan kolla in slutgiltig demo Nedan.

    1. Skapa den ursprungliga koden

    HTML-wise, bara en

    krävs:

     

    I CSS använder vi två CSS-variabler, --BGC och --dämpa för bakgrundsfärg och den mått av .foo behållare. I exemplet använde jag samma värde för bredd och höjd att få en fyrkantig låda, skapa separata variabler för höjd och bredd om du vill ha en rektangulär.

    Vi lägger också till positioner: relativ härska till .foo, så att dess pseudoelement, som vi ska använda för avslöjar bilden, kan vara absolut positionerad (se nedan) och således staplade på varandra.

     .foo --bgc: # FFCC03; - dim: 300px; bredd: var (- dim); höjd: var (- dim); bakgrundsfärg: var (- bgc); position: relativ;  

    Vi lägg till en tom innehåll fast egendom till båda pseudoelementen, .foo :: innan och .foo :: efter, för att få dem ordentligt gjorda.

     .foo :: före, .foo :: efter innehåll: "; position: absolut; vänster: 0; topp: 0; 

    De .foo element, dess två pseudo-element, .foo :: innan, .foo :: efter, och deras :sväva pseudo-klasser få en övergång fast egendom det kommer det Lägg till en enkel övergång till dem i 500 millisekunder (en halv sekund).

     .foo, .foo: sväva, .foo :: före, .foo :: efter, .foo: sväva :: före, .foo: sväva :: efter övergång: omvandla 500mms inlåsning;  

    2. Lägg till bilden

    Vi lägger till bilden i .foo :: innan pseudo-elementet som en bakgrundsbild, och storlek det för att täcka hela pseudo-elementet med bredd och höjd egenskaper. Vi stapla den rätt under .foo element använda z-index: -1 regel.

     .foo :: före bredd: 100%; höjd: 100%; bakgrund: url (camel.png) center / cover; z-index: -1;  

    De Centrum nyckelord centrerar bilden, medan omslag sökordet skallar bilden till täcka hela elementet samtidigt som dess bildförhållande upprätthålls.

    skärmdump nedan du kan se vad vi har hittills (z-index avlägsnas från .foo :: innan så att den kan ses):

    3. Lägg till bildrutan

    För att lägga till mindre (utskjutande) bakgrund bakom bilden, Vi använder det andra pseudoelementet, .foo :: efter.

    Vi skapar en annan CSS-variabel, --b, för gränsbredd. Vi ger tre transparenta gränser till ::efter pseudo-elementet: topp, höger och botten.

     .foo :: efter - b: 20px; bredd: calc (100% - var (- b)); höjd: calc (100% - calc (var (- b) * 2)); gränsen: var (- b) solid transparent; border-left: none; boxskugga: inset 0 var (- dim) 0 var (- bgc); filter: ljusstyrka (.8); z-index: -2;  

    De bredd beräknas som calc (100% - var-b)) som återvänder den totala bredden av .foo minus den totala bredden av dess horisontella gränser (endast högra gränsen, eftersom det inte finns kvar gränsen).

    De höjd beräknas som calc (100% - calc (var (- b) * 2)) som återvänder den totala höjden på .foo minus den totala bredden av dess vertikala gränser (övre och nedre gränsen).

    Med box-shadow egendom, vi också lägg till en horisontell insatsskugga av samma storlek som .foo (vilket är var (- dim)).

    Ett CSS-filter av ljusstyrka (0,8) mörkar bakgrundsfärgen lite, och slutligen, z-index: -2 regel placerar ::efter pseudo-element nedanför ::innan som innehåller bilden.

    Här är skärmdump av demo gjord hittills (med z-index avlägsnas från båda pseudoelementen så att de kan ses):

    4. Lägg till transformationen

    Vi Lägg till omvandla fast egendom till de två pseudoelementen, så när användaren svänger över .foo, båda pseudoelementen är flyttas horisontellt.

    Som vi har redan lagt till övergång egendom till alla delar i slutet av steg 1 är bildens rörelse och dess bakgrund båda animerade.

     .foo: sväva :: före, .foo: sväva :: efter transform: translateX (100%);  

    Nedan ser du slutgiltig demo.

    Bonus: Valfri marginal

    Om du visar .foo bredvid andra element på en sida och vill ha dessa andra element till flytta på dig när bilden och dess bakgrund glider ut, då lägg till en rätt marginal med samma bredd som den för .foo till .foo: hover element.

     .foo: svep marginal-höger: var (- dim);