Mam problem z animacją CSS3.
.child {
opacity: 0;
display: none;
-webkit-transition: opacity 0.5s ease-in-out;
-moz-transition: opacity 0.5s ease-in-out;
transition: opacity 0.5s ease-in-out;
}
.parent:hover .child {
opacity: 0.9;
display: block;
}
Ten kod działa tylko wtedy, gdy usunę zmianę display
.
Chcę zmienić sposób wyświetlania tuż po najechaniu kursorem, ale krycie należy zmienić za pomocą przejścia.
Odpowiedzi:
Na podstawie odpowiedzi Michaelsa jest to rzeczywisty kod CSS, którego należy użyć
źródło
Możesz zrobić z animacjami CSS:
źródło
Jeśli to możliwe - użyj
visibility
zamiastdisplay
Na przykład:
źródło
To obejście działa:
zdefiniuj „klatkę kluczową”:
Użyj tej „klatki kluczowej” po „najechaniu”:
źródło
Wykorzystałem to, aby to osiągnąć. Blakną po zawisie, ale nie zajmują miejsca, gdy są ukryte, idealne!
źródło
Trochę się zmieniłem, ale efekt jest piękny.
Dziękuję wszystkim.
źródło
visibility: hidden;
do .child / do dymka,visibility:visible;
co powinno rozwiązać problem z czytnikiem ekranuJest jeszcze jedna dobra metoda, aby to zrobić, używając zdarzeń pointer:
Niestety nie jest to obsługiwane w IE10 i starszych.
źródło
Miałem ten sam problem. Próbowałem używać animacji zamiast przejść - jak sugerują @MichaelMullany i @Chris - ale działało to tylko w przeglądarkach webkit, nawet jeśli kopiowałem i wklejałem z prefiksami „-moz” i „-o”.
Udało mi się obejść problem, używając
visibility
zamiastdisplay
. To działa dla mnie, ponieważ mój element podrzędny jestposition: absolute
taki, więc nie ma to wpływu na przepływ dokumentów. Może zadziałać również dla innych.Tak wyglądałby oryginalny kod przy użyciu mojego rozwiązania:
źródło
Jeśli wyzwalasz zmianę za pomocą JS, powiedzmy po kliknięciu, istnieje fajne obejście.
Widzisz, że problem występuje, ponieważ animacja jest ignorowana podczas wyświetlania: żaden element, ale przeglądarka nie stosuje wszystkich zmian naraz, a element nigdy nie jest wyświetlany: blok, gdy nie jest animowany w tym samym czasie.
Sztuczka polega na poproszeniu przeglądarki o wyrenderowanie ramki po zmianie widoczności, ale przed uruchomieniem animacji.
Oto przykład JQuery:
źródło
W przypadku elementów bezwzględnych lub stałych możesz również użyć indeksu z:
Inne elementy powinny teraz mieć indeks z między -100 a 100.
źródło
type=password
polach. To nie jest widoczne.Wiem, że to naprawdę nie jest rozwiązanie na twoje pytanie, ponieważ o to prosisz
Moje podejście rozwiązuje bardziej ogólne pytanie, ale być może był to problem tła, który należy rozwiązać, używając
display
w połączeniu zopacity
.Moim pragnieniem było usunięcie elementu z drogi, gdy nie jest widoczny. To rozwiązanie robi dokładnie to: przenosi element z daleka i można go użyć do przejścia:
Ten kod nie zawiera żadnych przedrostków przeglądarek ani hacków dotyczących wstecznej zgodności. Po prostu ilustruje koncepcję, w jaki sposób element jest odsunięty, ponieważ nie jest już potrzebny.
Ciekawą częścią są dwie różne definicje przejść. Gdy wskaźnik myszy najedzie na
.parent
element,.child
element należy natychmiast umieścić na miejscu, a wtedy krycie zostanie zmienione:Gdy nie ma najechania kursorem lub wskaźnik myszy został odsunięty od elementu, należy poczekać, aż zakończy się zmiana krycia, zanim element będzie można przenieść poza ekran:
Przeniesienie obiektu będzie realną alternatywą w przypadku, gdy ustawienie
display:none
nie zakłóci układu.Mam nadzieję, że trafiłem w sedno za to pytanie, chociaż nie odpowiedziałem.
źródło
Jedną z rzeczy, które zrobiłem, było ustawienie marginesu stanu początkowego na coś w rodzaju „margin-left: -9999px”, aby nie pojawiał się na ekranie, a następnie zresetowanie „margin-left: 0” w stanie najechania. W takim przypadku zachowaj „display: block”. Zrobił mi sztuczkę :)
Edycja: zapisać stan i nie wracać do poprzedniego stanu najechania? OK, potrzebujemy JS:
źródło
Aby mieć animację w obie strony w trybie HoverIn / Out, zrobiłem to rozwiązanie. Mam nadzieję, że komuś to pomoże
źródło
JAK ANIMOWAĆ NIEPRZEZROCZYSTOŚĆ ZA POMOCĄ CSS:
to jest mój kod:
kod CSS
lub sprawdź ten plik demonstracyjny
źródło
display
właściwość została po prostu usunięta.display:
nie podlega zmianie. Prawdopodobnie będziesz musiał użyć jQuery, aby zrobić to, co chcesz.źródło