Obecnie projektuję „mega rozwijane menu” CSS - w zasadzie zwykłe menu rozwijane tylko w CSS, ale takie, które zawiera różne rodzaje treści.
W tej chwili wydaje się, że przejścia CSS 3 nie mają zastosowania do właściwości „display” , tzn. Nie można wykonać żadnego rodzaju przejścia z display: none
do display: block
(lub dowolnej kombinacji).
Czy istnieje sposób, aby menu drugiego poziomu z powyższego przykładu „zanikało”, gdy ktoś najedzie myszką na jeden z elementów menu najwyższego poziomu?
Wiem, że możesz korzystać z przejść na visibility:
nieruchomości, ale nie mogę wymyślić sposobu na efektywne wykorzystanie tego.
Próbowałem też użyć wysokości, ale to niestety zawiodło.
Zdaję sobie również sprawę, że osiągnięcie tego za pomocą JavaScript jest banalne, ale chciałem rzucić sobie wyzwanie, by użyć tylko CSS, i myślę, że trochę się zbliżam.
źródło
z-index:0
.visibility: hidden
chyba że chcesz , aby czytniki ekranu go czytały (podczas gdy typowe przeglądarki tego nie zrobią). Określa tylko widoczność elementu (jak powiedzenieopacity: 0
), i nadal można go wybierać, klikać i czymkolwiek był; to po prostu nie jest widoczne.pointer-events
IE 8,9,10, więc nie zawsze jest okOdpowiedzi:
Możesz połączyć dwa przejścia lub więcej i
visibility
tym razem przyda się to.(Nie zapomnij o prefiksach dostawcy dotyczących
transition
nieruchomości).Więcej szczegółów znajduje się w tym artykule .
źródło
Musisz ukryć element w inny sposób, aby to zadziałało.
Osiągnąłem efekt, ustawiając
<div>
absolutnie oba s i ustawiając ukryty naopacity: 0
.Jeśli nawet przełączysz
display
właściwość znone
nablock
, przejście na inne elementy nie nastąpi.Aby obejść ten problem, zawsze zezwalaj na istnienie elementu
display: block
, ale ukryj element, dostosowując dowolny z następujących sposobów:height
na0
.opacity
na0
.overflow: hidden
.Prawdopodobnie jest więcej rozwiązań, ale nie możesz wykonać przejścia, jeśli przełączysz element na
display: none
. Na przykład możesz spróbować czegoś takiego:Ale to nie zadziała. Z mojego doświadczenia wynika, że nic z tego nie zrobiłem.
Z tego powodu zawsze będziesz musiał zachować element
display: block
- ale możesz obejść go, wykonując coś takiego:źródło
visibility:hidden; opacity:0; -webkit-transition: all .2s ease-in-out;
nie tylko to nie przechodzi poprawnie, ale element docelowy nigdy się nie pojawi. Kontrola jakości zawiedzie ciebie, mnie i twoją mamę.height: 0;
i nie zmienisz go, przejście nie będzie działać. Próbowałem tego po prostu próbując zmienić przezroczystość. Musiałem usunąćheight: 0;
overflow: hidden
dziękuję!W momencie pisania tego postu wszystkie główne przeglądarki wyłączają przejścia CSS, jeśli spróbujesz zmienić
display
właściwość, ale animacje CSS nadal działają dobrze, więc możemy je wykorzystać jako obejście.Przykładowy kod (możesz odpowiednio zastosować go do swojego menu) Demo :
Dodaj następujący CSS do swojego arkusza stylów:
Następnie zastosuj
fadeIn
animację do dziecka po najechaniu rodzicem (i oczywiście ustawionymdisplay: block
):Aktualizacja 2019 - metoda obsługująca również wygaszanie:
(Wymagany jest kod JavaScript)
źródło
height: 0
Trik (na przemian) wspomniano powyżej, nie wydaje się działać, ponieważ wysokość zostanie ustawiona na 0 w sprawie przejścia na blaknięcie-out, ale ta sztuczka wydaje się działać dobrze.display
właściwości - naprawdę nie ma powodu. A nawet jeśli tak , to dlaczego animacje miałyby działać? Nie można również użyć tejdisplay
właściwości w animacjach CSS.Podejrzewam, że powodem , dla którego przejścia są wyłączone, jeśli
display
zostaną zmienione, jest to, co faktycznie robi wyświetlacz. To nie nie wszystko, co mogłaby być płynnie animowany zmieni.display: none;
ivisibility: hidden;
są dwiema zupełnie różnymi rzeczami.Oba powodują, że element jest niewidoczny, ale
visibility: hidden;
nadal jest renderowany w układzie, ale po prostu nie jest widoczny .Ukryty element nadal zajmuje miejsce i nadal jest renderowany w linii lub jako blok, blok w linii lub w tabeli, lub cokolwiek
display
element każe mu renderować jako, i odpowiednio zajmuje miejsce.Inne elementy nie poruszają się automatycznie, aby zajmować to miejsce. Ukryty element po prostu nie renderuje rzeczywistych pikseli na wyjściu.
display: none
z drugiej strony faktycznie uniemożliwia całkowite renderowanie elementu .To nie zajmuje żadnego miejsca układu.
Inne elementy, które zajmowałyby część lub całość miejsca zajmowanego przez ten element, teraz dostosowują się do zajmowania tego miejsca, tak jakby element po prostu w ogóle nie istniał .
display
to nie tylko kolejny atrybut wizualny.Ustanawia ona cały tryb renderowania elementu, takie jak to, czy jest to
block
,inline
,inline-block
,table
,table-row
,table-cell
,list-item
, lub cokolwiek!Każdy z nich ma bardzo różne konsekwencje układ, a nie byłoby rozsądnym sposobem do ożywionej lub płynnie przechodzić je (spróbuj sobie wyobrazić sprawne przejście od
block
celuinline
lub odwrotnie, na przykład!).Właśnie dlatego przejścia są wyłączone, jeśli zmiany w wyświetlaniu (nawet jeśli zmiana dotyczy lub z
none
-none
nie jest po prostu niewidoczna, jest to własny tryb renderowania elementów, który oznacza brak renderowania!).źródło
display
nie można płynnie przenosić tak jak innych właściwości, ale to nie znaczy, że czas nie jest ważny. Bardzo ważna jest możliwość kontrolowania, kiedy nastąpi przejście oddisply:block
dodisplay:none
. Tak jak to opisał @CurtisYallop. Jeśli chcę, aby przejście odopacity:1
celuopacity:0
, a następnie zmianadisplay:block
nadisplay:none
I powinny być w stanie to zrobić.Zamiast wywołań zwrotnych, które nie istnieją w CSS, możemy użyć
transition-delay
właściwości.Co się tu dzieje?
Gdy
visible
grupa jest dodawany zarównoheight
iopacity
rozpocząć niezwłocznie animacji (0 MS), chociażheight
bierze 0 ms do całkowitego animacji (równowartośćdisplay: block
) iopacity
trwa 600 ms.Po
visible
usunięciu klasyopacity
rozpoczyna się animacja (opóźnienie 0 ms, czas trwania 400 ms), a wysokość czeka 400 ms, a dopiero potem natychmiast (0 ms) przywraca wartość początkową (odpowiednikdisplay: none
w wywołaniu zwrotnym animacji).Zauważ, że to podejście jest lepsze niż te, które używają
visibility
. W takich przypadkach element nadal zajmuje miejsce na stronie i nie zawsze jest odpowiedni.Więcej przykładów można znaleźć w tym artykule .
źródło
height:100%
tym, że w niektórych przypadkach może zniszczyć układ. Świetne rozwiązanie, jeśli to nie problem. Jeden z niewielu działających dwukierunkowo.transition: height 0ms 0ms, opacity 600ms 0ms
, po prostu użyłemtransition-delay: 0s
.display
nie jest jedną z właściwości, na których działa przejście.Zobacz Właściwości animowanego CSS, aby uzyskać listę właściwości CSS, do których można zastosować przejścia. Zobacz CSS Moduł wartości i jednostek poziom 4, Łączenie wartości: interpolacja, dodawanie i akumulacja, aby dowiedzieć się, jak są interpolowane.
Do wersji CSS 3 wymieniono w 9.1. Właściwości z CSS (wystarczy zamknąć okienko ostrzegawcze)
Ostatnim razem, gdy musiałem to zrobić, użyłem
max-height
zamiast tego, która jest animowalną właściwością (chociaż było to trochę włamanie, zadziałało), ale uwaga, że może być bardzo rozgoryczona w przypadku złożonych stron lub użytkowników z niskiej klasy telefonem komórkowym urządzenia.źródło
Możesz teraz dodać niestandardową animację do właściwości bloku.
Próbny
W tym demo podmenu zmienia się z
display:none
nadisplay:block
i nadal udaje się zanikać.źródło
myfirst
byćshowNav
? A co z Firefoxem? Niestety nie mogę znaleźć czegoś związanego na stronie demo, o której wspominasz.Według W3C Working Draft 19 listopada 2013 r.
display
Nie jest własnością animowaną . Na szczęścievisibility
jest animowany. Możesz połączyć jego przejście z przejściem krycia ( JSFiddle ):HTML:
CSS:
JavaScript do testowania:
Pamiętaj, że jeśli ustawisz przezroczysty link, bez ustawiania
visibility: hidden
, pozostanie klikalny.źródło
0
na0s
. Najwyraźniej w przeszłości przeglądarka, której używałem do testowania, obsługiwała zero jednostek bez jednostki. Czasy bez jednostek nie są jednak objęte Rekomendacją W3C dla kandydatów z 29 września 2016 r .Edycja: wyświetl żadna nie jest stosowana w tym przykładzie.
To, co dzieje się powyżej, polega na tym, że przez 99% wyświetlania animacji blokuje się, a nieprzezroczystość zanika. W ostatniej chwili właściwość display jest ustawiona na none.
Najważniejsze jest zachowanie ostatniej klatki po zakończeniu animacji za pomocą trybu animacji-wypełnienia: do przodu
Oto dwa przykłady: https://jsfiddle.net/qwnz9tqg/3/
źródło
display: none
nie działa?display: none
, tak naprawdę nigdy nie jest zaimplementowany. jsfiddle.net/3e6sduqhMoją zgrabną sztuczką JavaScript jest podzielenie całego scenariusza na dwie różne funkcje !
Aby przygotować, zadeklarowano jedną zmienną globalną i zdefiniowano jedną procedurę obsługi zdarzeń:
Następnie, ukrywając element, używam czegoś takiego:
Aby ponownie wyświetlić element, robię coś takiego:
Jak dotąd działa!
źródło
Natknąłem się na to dzisiaj z
position: fixed
modalem, którego użyłem ponownie. Nie mogłem go zatrzymać,display: none
a następnie ożywić, ponieważ po prostu wyskoczył iz-index
(wartości ujemne itp.) Również zrobił dziwne rzeczy.Używałem też
height: 0
doheight: 100%
, ale działało to tylko wtedy, gdy pojawił się modal. To jest tak samo, jakbyś używałleft: -100%
lub coś.Wtedy uderzyło mnie, że istnieje prosta odpowiedź. Zrobione:
Po pierwsze, twój ukryty modal. Zauważ, że
height
jest0
i sprawdźheight
deklarację w przejściach ... ma ona500ms
, która jest dłuższa niż mojeopacity
przejście . Pamiętaj, że wpływa to na wychodzące przejście wyciszania: przywrócenie modalu do stanu domyślnego.Po drugie, twój widoczny modal. Powiedzmy, że ustawiasz
.modal-active
nabody
. Terazheight
jest100%
i moje przejście również się zmieniło. Chcę, żeby toheight
się natychmiast zmieniło iopacity
zabrało300ms
.To wszystko, działa jak urok.
źródło
Biorąc pod uwagę kilka z tych odpowiedzi i sugestii w innym miejscu, poniższe świetnie sprawdzają się w menu najechania kursorem (szczególnie używam tego z Bootstrap 3):
Możesz również użyć
height
zamiast,max-height
jeśli określisz obie wartości, ponieważheight:auto
nie jest to dozwolone ztransition
s. Wartość wskaźnikamax-height
musi być większa niżheight
w menu.źródło
Znalazłem lepszy sposób na rozwiązanie tego problemu, możesz użyć animacji CSS i zrobić swój niesamowity efekt podczas wyświetlania przedmiotów.
źródło
Znalazłem ten problem wiele razy, a teraz po prostu poszedłem z:
Dodając klasę, nie
block--invisible
wszystkie elementy będą klikalne, ale wszystkie elementy za nimi będą, ponieważpointer-events:none
są obsługiwane przez wszystkie główne przeglądarki (brak IE <11).źródło
pointer-events
Zmień
overflow:hidden
naoverflow:visible
. Działa lepiej. Używam w ten sposób:visible
jest lepszy, ponieważoverflow:hidden
zachowuj się dokładnie jakdisplay:none
.źródło
JavaScript nie jest wymagany i nie jest wymagana żadna skandalicznie duża maksymalna wysokość. Zamiast tego ustaw swoje
max-height
elementy tekstowe i użyj jednostki względnej czcionki, takiej jakrem
lubem
. W ten sposób możesz ustawić maksymalną wysokość większą niż pojemnik, unikając opóźnienia lub „wyskakiwania” po zamknięciu menu:HTML
CSS
Zobacz przykład tutaj: http://codepen.io/mindfullsilence/pen/DtzjE
źródło
Po napisaniu zaakceptowanej odpowiedzi Guillermo specyfikacja przejścia CSS z 2012-04-03 zmieniła zachowanie przejścia widoczności i teraz możliwe jest rozwiązanie tego problemu w krótszy sposób , bez użycia opóźnienia przejścia:
Czas działania określony dla obu przejść powinien zwykle być identyczny (chociaż nieco dłuższy czas widoczności nie stanowi problemu).
Aby uzyskać uruchomioną wersję, zobacz mój wpis na blogu Widoczność przejścia CSS .
Wpisz tytuł pytania „Przejścia na wyświetlaczu: właściwość” oraz w odpowiedzi na komentarze Rui Marquesa i Josha na przyjętą odpowiedź:
To rozwiązanie działa w przypadkach, w których nie ma znaczenia, czy użyto właściwości display lub visibility (jak to prawdopodobnie miało miejsce w tym pytaniu).
Nie usunie całkowicie elementu, ponieważ
display:none
po prostu uczyni go niewidocznym, ale nadal pozostanie w obiegu dokumentu i wpłynie na pozycję następujących elementów.Przejścia, które całkowicie usuwają podobny element,
display:none
można wykonać przy użyciu wysokości (jak wskazują inne odpowiedzi i komentarze), maksymalnej wysokości lub marginesu góra / dół, ale także zobacz Jak mogę przejść wysokość: 0; do wysokości: auto; używasz CSS? oraz mój post na blogu Obejścia dotyczące przejść CSS we właściwościach wyświetlania i wysokości .W odpowiedzi na komentarz GeorgeMillo: Potrzebne są zarówno właściwości, jak i oba przejścia: Właściwość krycie służy do tworzenia animacji pojawiania się i zanikania oraz właściwości widoczności, aby uniknąć reagowania elementu na zdarzenia myszy. Przejścia są potrzebne dla krycia dla efektu wizualnego i dla widoczności, aby opóźnić ukrywanie się, aż do zakończenia wygaszania.
źródło
W końcu znalazłem rozwiązanie dla mnie, łącząc się
opacity
zposition absolute
(aby nie zajmować miejsca, gdy jest ukryty).źródło
Podejrzewam, że ktokolwiek dopiero rozpoczynający przejścia CSS szybko odkrywa, że nie działa, jeśli modyfikujesz właściwość display (blok / none) w tym samym czasie. Jednym z obejść, o którym jeszcze nie wspomniano, jest to, że możesz nadal używać
display:block/none
do ukrywania / pokazywania elementu, ale ustaw jego krycie na 0, aby nawet gdy jestdisplay:block
on niewidoczny.Następnie, aby go wprowadzić, dodaj kolejną klasę CSS, taką jak „on”, która ustawia krycie na 1 i definiuje przejście dla krycia. Jak możesz sobie wyobrazić, będziesz musiał użyć JavaScript, aby dodać klasę „on” do elementu, ale przynajmniej nadal używasz CSS do faktycznego przejścia.
PS Jeśli znajdziesz się w sytuacji, w której musisz zrobić obie rzeczy
display:block
i jednocześnie dodać klasę „on”, odłóż tę ostatnią za pomocą setTimeout. W przeciwnym razie przeglądarka po prostu widzi obie rzeczy jako natychmiastowe i wyłącza przejście.źródło
display:none
.To jest tak proste jak poniżej :)
Spraw, by zniknęło, a następnie to
height 0;
. Upewnij się również, że używasz forwardowania, aby pozostało w końcowym stanie.źródło
To rozwiązanie ma doskonałą kompatybilność i jeszcze go nie widziałem:
Objaśnienie : wykorzystuje
visibility: hidden
lewę (która jest zgodna z „pokaż i animuj” w jednym kroku), ale używa kombinacji,position: absolute; z-index: -1; pointer-events: none;
aby upewnić się, że ukryty pojemnik nie zajmuje miejsca i nie odpowiada na interakcje użytkownika .źródło
position
nadal spowoduje, że element zacznie szarpać, prawda?position: absolute
oznacza, że element nie zajmuje miejsca, jak opisano w wyjaśnieniu. Kiedy przełączy się naposition: static
i pojawi się, zajmie miejsce jak zwykły element, co jest sednem tego pytania. Proponuję spróbować!Możesz sprawić, by działało to w naturalny sposób, jak się spodziewałeś - używając wyświetlacza - ale musisz dusić przeglądarkę, aby uruchomić, używając Javascript lub jak inni sugerowali wymyślną sztuczkę z jednym tagiem wewnątrz drugiego. Nie dbam o wewnętrzny tag, ponieważ dodatkowo komplikuje CSS i wymiary, więc oto rozwiązanie JavaScript:
https://jsfiddle.net/b9chris/hweyecu4/17/
Począwszy od pola takiego jak:
Ukryte pudełko.
Użyjemy sztuczki znalezionej w pokrewnym kw / d, sprawdzając offsetHeight, aby natychmiast dusić przeglądarkę:
https://stackoverflow.com/a/16575811/176877
Po pierwsze, biblioteka formalizująca powyższą sztuczkę:
Następnie użyjemy go, aby odsłonić pudełko i wprowadzić go:
To powoduje zanikanie pola. Więc
.noTrnsn()
wyłącza przejściami, a następnie usuwamyhidden
klasy, który trzepiedisplay
znone
jego domyślnieblock
. Następnie ustawiamy krycie na 0, aby przygotować się do przejścia. Teraz, gdy ustawiliśmy scenę, ponownie włączamy przejścia za pomocą.resumeTrnsn()
. Na koniec rozpocznij przejście, ustawiając krycie na 1.Bez biblioteki zarówno zmiana sposobu wyświetlania, jak i zmiana krycia przyniosłaby nam niepożądane efekty. Gdybyśmy po prostu usunęli wywołania biblioteki, nie uzyskalibyśmy żadnych przejść.
Zauważ, że powyższe nie ustawia ponownie wyświetlania na none na końcu animacji zanikania. Możemy jednak stać się bardziej wyszukani. Zróbmy to z takim, który zanika i rośnie na wysokości od 0.
Fantazyjny!
https://jsfiddle.net/b9chris/hweyecu4/22/
Teraz zmieniamy wysokość i krycie. Należy pamiętać, że nie jesteśmy ustawiania wysokości, co oznacza, że jest to domyślne
auto
. Konwencjonalnie nie można tego zmienić - przejście z auto na wartość piksela (np. 0) nie spowoduje przejścia. Omówimy to przy użyciu biblioteki i jeszcze jednej metody bibliotecznej:Jest to wygodna metoda, która pozwala nam uczestniczyć w istniejącej kolejce efektów / animacji jQuery, bez konieczności korzystania z jakichkolwiek ram animacji, które są teraz wykluczone w jQuery 3.x. Nie zamierzam wyjaśniać, jak działa jQuery, ale wystarczy powiedzieć, że
.queue()
i.stop()
hydraulika, którą zapewnia jQuery, pomaga nam uniknąć sytuacji, w której nasze animacje będą na siebie naciskać.Animujmy efekt przesuwania w dół.
Kod zaczyna się od sprawdzenia,
#box
czy jest obecnie ukryty, od sprawdzenia jego klasy. Ale osiąga więcej przy użyciuwait()
wywołania biblioteki, dodająchidden
klasę na końcu animacji wysuwania / zanikania, której można się spodziewać, jeśli jest ona faktycznie ukryta - coś, czego powyższy prostszy przykład nie mógł zrobić. Zdarza się to również włączać wyświetlanie / ukrywanie elementu w kółko, co było błędem w poprzednim przykładzie, ponieważ ukryta klasa nigdy nie została przywrócona.Możesz także zobaczyć zmiany CSS i klas wywoływane po tym,
.noTrnsn()
aby ogólnie ustawić scenę dla animacji, w tym wykonywanie pomiarów, takich jak pomiar ostatecznej wysokości#box
bez pokazywania tego użytkownikowi, przed wywołaniem.resumeTrnsn()
i animowanie go z tego pełnego zestawu osiągnąć swój cel wartości CSS.Stara odpowiedź
https://jsfiddle.net/b9chris/hweyecu4/1/
Możesz przejść z kliknięciem za pomocą:
CSS jest tym, co zgadniesz:
Kluczem jest dławienie właściwości wyświetlania. Usuwając ukrytą klasę, a następnie czekając 50 ms, a następnie rozpoczynając przejście przez klasę dodaną, wyświetlamy ją, a następnie rozwijamy tak, jak chcieliśmy, zamiast po prostu wślizgnąć się na ekran bez animacji. Podobnie dzieje się w drugą stronę, z tą różnicą, że czekamy na zakończenie animacji, zanim zastosujemy ukryte.
Uwaga: Nadużywam
.animate(maxWidth)
tutaj, aby uniknąćsetTimeout
warunków wyścigu.setTimeout
szybko wprowadza ukryte błędy, gdy ty lub ktoś inny nie rozumie tego kodu..animate()
można łatwo zabić.stop()
. Po prostu używam go do umieszczenia opóźnienia 50 ms lub 2000 ms w standardowej kolejce fx, gdzie łatwo jest znaleźć / rozwiązać przez inne kodery budujące na tym.źródło
Miałem podobny problem, na który nie mogłem znaleźć odpowiedzi. Kilka wyszukiwań Google później doprowadziło mnie tutaj. Ponieważ nie znalazłem prostej odpowiedzi, na którą liczyłem, natknąłem się na rozwiązanie, które jest zarówno eleganckie, jak i skuteczne.
Okazuje się, że
visibility
właściwość CSS ma wartość,collapse
która jest generalnie używana dla elementów tabeli. Jeśli jednak zostanie użyty w jakimkolwiek innym elemencie, skutecznie renderuje je jako ukryte , prawie tak samo jak,display: hidden
ale z dodatkową możliwością, że element nie zajmuje miejsca i nadal można animować dany element.Poniżej znajduje się prosty przykład tego działania.
źródło
Najprostszym uniwersalnym rozwiązaniem tego problemu jest: możesz podać
display:none
w CSS, jednak zmienisz go nablock
(lub cokolwiek innego) za pomocą JavaScript, a następnie będziesz musiał dodać klasę do swojego elementu, który faktycznie wykonuje przejście za pomocą setTimeout () . To wszystko.To znaczy:
Zostało to przetestowane w najnowszych rozsądnych przeglądarkach. Oczywiście nie powinno to działać w przeglądarce Internet Explorer 9 lub wcześniejszej.
źródło
Myślę, że SalmanPK ma najbliższą odpowiedź. Powoduje to zanikanie lub zmniejszanie elementu za pomocą następujących animacji CSS. Jednak właściwość display nie animuje płynnie, a jedynie krycie.
Jeśli chcesz animować element przemieszczający się z bloku wyświetlacza do wyświetlenia żadnego, nie widzę, że jest to obecnie możliwe tylko z CSS. Musisz uzyskać wysokość i użyć animacji CSS, aby zmniejszyć wysokość. Jest to możliwe dzięki CSS, jak pokazano w poniższym przykładzie, ale trudno byłoby znać dokładne wartości wysokości, które należy animować dla elementu.
Przykład jsFiddle
CSS
JavaScript
źródło
Możesz to zrobić ze zdarzeniami przejścia, dzięki czemu zbudujesz dwie klasy CSS dla przejścia, jedna z animacją drugą, bez wyświetlania stanu „brak”. I zamieniasz je po zakończeniu animacji? W moim przypadku mogę ponownie wyświetlić div po naciśnięciu przycisku i usunięciu obu klas.
Wypróbuj poniższy fragment kodu ...
źródło
Jeśli używasz jQuery do ustawiania swoich klas, zadziała to w 100%:
Oczywiście możesz po prostu użyć jQuery
.fadeIn()
i.fadeOut()
funkcji, ale zaletą ustawienia klas jest zamiast tego, na wypadek, gdybyś chciał przejść do wartości wyświetlanej innej niżblock
(jak to domyślnie za pomocą.fadeIn()
i.fadeOut()
).Przejdę teraz do wyświetlania
flex
z ładnym efektem zanikania.źródło
Zamiast używać,
display
możesz przechowywać element „poza ekranem”, dopóki go nie potrzebujesz, a następnie ustawić jego położenie w żądanym miejscu i jednocześnie przekształcić. Wiąże się to jednak z wieloma innymi problemami projektowymi, więc przebieg może się różnić.Prawdopodobnie i tak nie chciałbyś używać
display
, ponieważ chciałbyś, aby treść była dostępna dla czytników ekranu, które w większości starają się przestrzegać zasad widoczności - tzn. Jeśli nie powinny być widoczne dla oka, nie pojawi się jako treść dla agenta.źródło
Możesz po prostu użyć widoczności CSS : ukryty / widoczny zamiast display : none / block
źródło
Rozpocząłem projekt szkieletowy open source o nazwie Toggle Display Animate .
Ten szkieletowy pomocnik pozwoli ci łatwo naśladować pokazywanie / ukrywanie jQuery, ale dzięki animacjom przejścia CSS 3.
Używa przełączników klas, dzięki czemu można używać dowolnych metod CSS na elementach oprócz display: none | block | table | inline itp., A także innych alternatywnych zastosowań, które można wymyślić.
Jego głównym celem jest tworzenie stanów przełączania elementów i obsługuje stan przywracania, w którym ukrywanie obiektu pozwala na uruchomienie klatki kluczowej w odwrotnej kolejności lub odtworzenie alternatywnej animacji w celu ukrycia elementu.
Większość znaczników dla koncepcji, nad którą pracuję, to CSS, a JavaScript jest bardzo mało używana.
Tutaj jest demo: http://marcnewton.co.uk/projects/toggle-display-animate/
źródło