Startpagina » Coding » Maak een CSS-Only Image Reveal-effect met transparante randen

    Maak een CSS-Only Image Reveal-effect met transparante randen

    EEN CSS-only image reveal effect kan op verschillende manieren worden opgelost. Het is eigenlijk vrij eenvoudig om een ​​ontwerp te coderen waarin het afbeelding onderscheidt zich van (wordt overstroomd door) zijn solide achtergrond -jij gewoon plaats een afbeelding over een kleiner element met een stevige achtergrond.

    U kunt hetzelfde resultaat krijgen als u gebruikt transparante randen, waar je de grootte van het achtergrondelement hetzelfde als die van de voorgrond en voeg transparante randen toe om maak een lege ruimte voor de voorgrond om in over te lopen.

    Er zijn enkele voordelen bij het gebruik van de laatste methode. Omdat het de transparante randen zijn die de ruimte voor de voorgrond bieden om over te stromen, kunnen we dat controleer de richting van de overloop tussen de linker-, rechter-, boven- en onderrand. Ook dezelfde grootte hebben voor zowel de voorgrond als de achtergrond maakt het gemakkelijker om beide elementen tegelijk te verplaatsen over de pagina.

    In een notendop, we zullen zien hoe maak een CSS-only image reveal-effect aan met behulp van een kleinere vaste achtergrond met een voorgrondafbeelding met transparante randen. Je kunt het laatste demo beneden.

    1. Maak de eerste code

    HTML-wise, maar een

    Is benodigd:

     

    In de CSS gebruiken we twee CSS-variabelen, --BGC en --verduisteren voor de achtergrond kleur en de dimensies van de .foo container, respectievelijk. In het voorbeeld gebruikte ik de dezelfde waarde voor de breedte en hoogte om een ​​vierkantvormige doos te maken, maak afzonderlijke variabelen voor de hoogte en de breedte als u een rechthoekig wilt.

    We voegen ook de position: relative regel aan .foo, dus dat zijn pseudo-elementen, waar we voor gaan gebruiken het beeld onthullen, kan zijn absoluut gepositioneerd (zie hieronder), en dus op elkaar gestapeld.

     .foo --bgc: # FFCC03; --dim: 300 px; breedte: var (- dim); hoogte: var (- dim); achtergrondkleur: var (- bgc); positie: relatief;  

    Wij voeg een leeg toe inhoud eigendom voor beide pseudo-elementen, .foo :: vóór en .foo :: na, om ze op de juiste manier weer te geven.

     .foo :: before, .foo :: after content: "; position: absolute; left: 0; top: 0; 

    De .foo element, zijn twee pseudo-elementen, .foo :: vóór, .foo :: na, en hun : hover pseudo-classes krijg een overgang eigendom dat zal voeg een gemakkelijke overgang toe voor hen gedurende 500 milliseconden (een halve seconde).

     .foo, .foo: hover, .foo :: before, .foo :: after, .foo: hover :: before, .foo: hover :: after transition: transform 500ms ease-in;  

    2. Voeg de afbeelding toe

    We voegen de afbeelding toe aan de .foo :: vóór pseudo-element als achtergrondafbeelding, en formaat om het hele pseudo-element te dekken met de breedte en hoogte eigenschappen. Wij stapel het vlak onder de .foo element de ... gebruiken z-index: -1 regel.

     .foo :: before width: 100%; hoogte: 100%; achtergrond: url (camel.png) centrum / cover; z-index: -1;  

    De centrum trefwoord centreert het beeld, Terwijl de deksel zoekwoord schalen de afbeelding naar bedek het hele element terwijl de beeldverhouding behouden blijft.

    Op de screenshot hieronder je kunt zien wat we tot nu toe hebben (z-index is verwijderd van .foo :: vóór zodat het kan worden gezien):

    3. Voeg de slide-out achtergrond toe

    Om de. Toe te voegen kleinere (uitschuifbare) achtergrond achter de afbeelding, we zullen het andere pseudo-element gebruiken, .foo :: na.

    We maken een andere CSS-variabele, --b, voor de grensbreedte. Wij geven drie transparante randen naar de ::na pseudo-element: boven, rechts en onderaan.

     .foo :: after --b: 20px; breedte: calc (100% - var (- b)); hoogte: berekend (100% - berekend (var (- b) * 2)); rand: var (- b) vast transparant; border-left: none; box-shadow: inzet 0 var (- dim) 0 var (- bgc); filter: helderheid (.8); z-index: -2;  

    De breedte wordt berekend als calc (100% - var - b)) dat komt terug de totale breedte van .foo minus de totale breedte van de horizontale randen (alleen rechterrand, omdat er geen linkerrand is).

    De hoogte wordt berekend als calc (100% - calc (var (- b) * 2)) dat komt terug de totale hoogte van .foo minus de totale breedte van de verticale randen (boven- en ondergrenzen).

    Met de box-shadow eigendom, wij ook voeg een horizontale inzetschaduw toe van dezelfde grootte als .foo (dat is var (- dim)).

    Een CSS-filter van lichtsterkte (0,8) maakt de achtergrondkleur donkerder een klein beetje, en tot slot, de z-index: -2 regel plaatst de ::na pseudo-element eronder ::voor die de afbeelding bevat.

    Hier is de screenshot van de demo tot nu toe weergegeven (met z-index verwijderd van beide pseudo-elementen, zodat ze kunnen worden gezien):

    4. Voeg de transformatie toe

    Wij voeg het toe transformeren eigendom naar de twee pseudo-elementen, dus wanneer de gebruiker zweeft .foo, beide pseudo-elementen zijn horizontaal verplaatst.

    Zoals wij heeft al de overgang eigendom van alle elementen aan het einde van stap 1 zijn de beweging van het beeld en de achtergrond beide geanimeerd.

     .foo: hover :: before, .foo: hover :: after transformatie: translateX (100%);  

    Hieronder ziet u de laatste demo.

    Bonus: optionele marge

    Als u weergeeft .foo naast andere elementen op een pagina en wil deze andere elementen ga weg wanneer het beeld en de achtergrond eruit schuiven, dan voeg een rechtermarge van dezelfde breedte toe als die van .foo naar de .foo: hover element.

     .foo: hover margin-right: var (- dim);