Chcę utworzyć karuzelę obrazów, w której użytkownik może przełączać się między obrazami, klikając strzałki. Na przykład:
Jednak mogę używać tylko HTML i CSS - bez JavaScript (a zatem jQuery). Potrzebuję tylko podstawowej konfiguracji; płynne przejścia i tym podobne nie są konieczne.
Jak mogę to osiągnąć?
javascript
jquery
html
css
royhowie
źródło
źródło
:hover
; Na koniec fragment składa się z wykorzystaniemclick
,css
; chociaż użycie tylko dwóch strzałek do sterowania nie było tutaj szczególnie trywialne. Jeśli „zbyt wiele możliwych rozwiązań” jest trafnych, można utworzyć, opublikować alternatywne rozwiązanie odpowiadające poniższej odpowiedzi spełniającej określone wymaganie, „w którym użytkownik może przełączać się między obrazami, klikając strzałki” ?Odpowiedzi:
To łatwe! Po prostu użyj przycisków opcji i etykiet docelowych.
Przyciski radiowe zachowują się (koniecznie), pozwalając na wybranie tylko jednego w dowolnym momencie - tak jak obraz w naszej karuzeli.
Próbny
Pokaż fragment kodu
TLDR: Ważne uwagi
input(type="radio")
jestchecked
domyślnie, w przeciwnym razie cała karuzela zostanie ukryta.labels
poprawnie kierujesz na poprzednie / następne wejście radiowe (zobacz sekcję etykiet na końcu, aby dowiedzieć się, jak kierować):checked
Wyjaśnienie
Oto jak powinna wyglądać podstawowa struktura HTML:
div#holder
utrzyma wszystkie nasze treści na miejscu. Następnie zgrupujemy nasze przyciski radiowe, etykiety i obrazy pod adiv.group
. Dzięki temu nasze wejścia radiowe nie są narażone na destrukcyjne zakłócenia (kalambur).Klucz znajduje się w selektorach (i etykietach - koniecznie przeczytaj tę sekcję)
Najpierw ukryjemy nasze przyciski opcji - i tak są brzydkie:
Nigdy nie będziemy musieli klikać przycisków opcji. Zamiast tego nadamy styl naszym etykietom i dodamy cele (
for
właściwości), tak aby przekierowały kliknięcie do odpowiedniego bloku wejścia radiowego.Większość naszych etykiet powinna być ukryta:
(Pominię wszystkie estetyczne stylizacje, aby ułatwić zrozumienie stylizacji. Lepszą wersję można zobaczyć we fragmencie stosu).
Z wyjątkiem tych obok wejścia radiowego, które jest włączone, lub
:checked
Dodatkowo
div.content
powinny zostać wyświetlone następujące zaznaczone dane wejściowe:Jednak gdy przycisk opcji nie jest zaznaczony,
div.content
powinien być ukryty:Bazinga! Teraz nasza karuzela powinna być w
pełnifunkcjonalna, choć trochę brzydka. Przenieśmy nasze etykiety na właściwą pozycję:I wyśrodkuj nasze obrazy w odpowiednich elementach div:
Ostatnim krokiem jest konfiguracja etykiet:
Zwróć uwagę, że biorąc pod uwagę wejście radiowe z wartością
id
ofn
, tolabel.previous
będzie miałofor
atrybut of,(n - 1) % M
alabel.next
will będzie miałofor
atrybut of(n + 1) % M
, gdzieM
jest liczbą obrazów w karuzeli.Dodatkowy
Jeśli używasz Jade (lub innego silnika szablonów), możesz go skonfigurować za pomocą prostej pętli for, takiej jak ta:
źródło
Uwaga,
css
poniżej nie spełnia określonego wymagania w pytaniuWykorzystuje pseudoklasy , miniatury jako kontrolki do przełączania między obrazami; wzorowany na wzorcu opisanym w Jak wyzwalać przejścia CSS3 po kliknięciu przy użyciu: target
:target
źródło
Zainspirowany royhowie, otrzymałem znacznie prostsze rozwiązanie, jeśli chodzi o składnię HTML. Ponadto z ładną animacją iw pełni konfigurowalny!
Głównym zamysłem było stworzenie strzałek nie poprzez umieszczanie ich w HTML jeden po drugim, ale poprzez tworzenie, a następnie ostrożne pozycjonowanie pseudoelementów.
JSFiddle
Możesz przeczytać więcej o dostosowaniach i niektórych ograniczeniach technicznych moich skrzypiec.
źródło
Sprawdź ten link, aby zobaczyć karuzelę tylko dla CSS z opcją Auto Play na początku, przyciskami nawigacyjnymi w lewo i w prawo, kropkami nawigacyjnymi i wznawianiem odtwarzania po kliknięciu przycisku ...
Link do wersji demonstracyjnej - http://blog.puneets.in/2016/02/pure-responsive-css3-slider-with.html
źródło
Rozszerzenie niesamowitego rozwiązania royhowie poprzez dodanie właściwości animacji do
img
:źródło
Dlaczego nie uczynić tego płynnym i ładnym za pomocą samego CSS?
To jest część mojej biblioteki, Picnic CSS . Jednak to jsfiddle zawiera bibliotekę i wszystkie wtyczki dla następnej wersji (4.0 jest teraz kończona ). Możesz zobaczyć aktualną wersję 3.x tej samej wtyczki, która również spełnia wszystkie Twoje wymagania, ale nie jest tak płynna, jak bym chciał:
W tej chwili możesz zobaczyć tylko kod źródłowy scss w gałęzi dev ale jest zaplanowane na następne dni, więc zaktualizuję moją odpowiedź.
Poproszę jakiś kod! To jest HTML, którego potrzebujesz do wersji 4.0, jak komentowali inni, w zasadzie grasz
<input type='radio'>
i<label>
aby osiągnąć pożądany efekt:źródło