Utwórz efekt ujawnienia obrazu tylko w CSS za pomocą przezroczystych granic
ZA Obraz CSS ujawnia efekt można rozwiązać na różne sposoby. W rzeczywistości dość łatwo jest zakodować projekt, w którym obraz wyróżnia się (jest przepełniony przez) jego solidne tło -ty tylko umieść obraz nad mniejszym elementem z jednolitym tłem.
Możesz uzyskać ten sam wynik, jeśli używasz przejrzyste granice, gdzie trzymasz rozmiar elementu tła taki sam jako pierwszy plan i dodaj przezroczyste obramowanie, aby stworzyć pustą przestrzeń aby przelewał się pierwszy plan.
Tam są niektóre zalety stosowania tej drugiej metody. Ponieważ jest to przezroczyste obramowanie, które zapewnia obszar do przepełnienia pierwszego planu, możemy kontrolować kierunek przelewu między lewą, prawą, górną i dolną granicą. Ma również taki sam rozmiar zarówno dla pierwszego planu, jak i tła ułatwia poruszanie obu elementów jednocześnie na stronie.
Krótko mówiąc, zobaczymy, jak to zrobić utworzyć obraz ujawniający tylko CSS używać mniejsze stałe tło z obraz na pierwszym planie, który ma przezroczyste obramowanie. Możesz sprawdzić końcowe demo poniżej.
1. Utwórz kod początkowy
HTML, tylko jeden W CSS używamy dwie zmienne CSS, Dodajemy również My dodaj pusty The Dodajemy obraz do The Na zrzut ekranu poniżej widać, co mamy do tej pory ( Aby dodać mniejsze (wysuwane) tło za obrazem, użyjemy drugiego pseudoelementu, Tworzymy kolejną zmienną CSS, The szerokość jest obliczany jako The wysokość jest obliczany jako Z Filtr CSS Tutaj jest zrzut ekranu demo wydane do tej pory (z My Dodaj Jak my już dodałem Poniżej możesz zobaczyć końcowe demo. Jeśli wyświetlasz
--bgc
i --ciemny
dla kolor tła i wymiary z .bla
odpowiednio pojemnik. W przykładzie użyłem ta sama wartość aby uzyskać szerokość i wysokość, aby uzyskać prostokątne pudełko, utwórz oddzielne zmienne dla wysokości i szerokości, jeśli chcesz prostokątny.pozycja: względna
reguła do .bla
, tak że jego pseudoelementy, do których będziemy używać ujawniając obraz, może być absolutnie ustawiony (patrz poniżej), a więc ułożone jedna na drugiej. .foo --bgc: # FFCC03; --dim: 300px; szerokość: var (- dim); wysokość: var (- dim); kolor tła: var (- bgc); pozycja: względna;
zawartość
własność do obu pseudoelementów, .foo :: wcześniej
i .foo :: after
, aby je poprawnie renderować. .foo :: before, .foo :: after content: "; position: absolute; left: 0; top: 0;
.bla
element, jego dwa pseudoelementy, .foo :: wcześniej
, .foo :: after
, i ich :wahać się
pseudoklasy Weź przejście
własność to będzie dodaj łatwość przejścia do nich przez 500 milisekund (pół sekundy). .foo, .foo: hover, .foo :: before, .foo :: after, .foo: hover :: before, .foo: hover :: after przejście: przekształć łatwość 500ms;
2. Dodaj obraz
.foo :: wcześniej
pseudoelement jako obraz tła, i Rozmiar, aby pokryć cały pseudoelement z szerokość
i wysokość
nieruchomości. My układaj go tuż pod .bla
element używając z-index: -1
reguła. .foo :: before width: 100%; wysokość: 100%; background: url (camel.png) centrum / okładka; z-index: -1;
środek
słowo kluczowe wyśrodkowuje obraz, podczas, gdy pokrywa
słowo kluczowe skaluje obraz do zakryj cały element zachowując proporcje. indeks Z
jest usunięty z .foo :: wcześniej
tak, aby można go było zobaczyć):3. Dodaj wysuwane tło
.foo :: after
.--b
, dla szerokość granicy. Dajemy trzy przezroczyste granice do ::po
pseudoelement: góra, prawo i dół. .foo :: after --b: 20px; width: calc (100% - var (- b)); wysokość: calc (100% - calc (var (- b) * 2)); border: var (- b) solid transparent; border-left: none; box-shadow: wstawka 0 var (- dim) 0 var (- bgc); filtr: jasność (.8); z-index: -2;
calc (100% - var - b))
to wraca całkowita szerokość .bla
minus całkowita szerokość jej granic poziomych (tylko prawa granica, ponieważ nie ma lewej granicy).calc (100% - calc (var (- b) * 2))
to wraca całkowita wysokość .bla
minus całkowita szerokość jej pionowych granic (górne i dolne granice).box-shadow
nieruchomości, my też dodaj poziomy cień wielkości takiej samej jak .bla
(który jest var (- dim)
).jasność (.8)
przyciemnia kolor tła trochę i na koniec indeks Z: -2
reguła umieszcza ::po
pseudoelement pod spodem ::przed
który zawiera obraz.indeks Z
usunięte z obu pseudoelementów, aby były widoczne):4. Dodaj transformację
przekształcać
własność do dwóch pseudoelementów, a więc kiedy użytkownik się nad nim unosi .bla
, oba pseudoelementy są przesunięty poziomo.przejście
własność do wszystkich elementów na końcu kroku 1 ruch obrazu i jego tła są oba animowane. .foo: hover :: before, .foo: hover :: after transform: translateX (100%);
Bonus: opcjonalny margines
.bla
obok innych elementów na stronie i chcę, aby te inne elementy były odejść kiedy obraz i jego tło wysuwają się, wtedy dodaj prawy margines o tej samej szerokości co szerokość .bla
do .foo: hover
element. .foo: hover margin-right: var (- dim);