Estou procurando fazer um carrossel de imagens, onde um usuário possa alternar entre imagens, clicando nas setas. Por exemplo:
No entanto, só posso usar HTML e CSS - sem JavaScript (e, portanto, jQuery). Eu só preciso da configuração básica; transições suaves e similares não são necessárias.
Como posso realizar isso?
javascript
jquery
html
css
royhowie
fonte
fonte
:hover
; finalmente composto utilizando um fragmento declick
,css
; embora o uso de apenas duas setas para controles não seja particularmente trivial, aqui. Se "muitas soluções possíveis" forem precisas, é possível criar, publicar uma solução alternativa para a resposta abaixo, atendendo ao requisito específico "onde um usuário pode alternar entre imagens, clicando nas setas" ?Respostas:
Isso é fácil! Basta usar botões de opção e rótulos direcionados.
Os botões de opção têm o comportamento (necessário) de permitir que apenas um seja selecionado a qualquer momento - exatamente como uma imagem em nosso carrossel.
Demo
Mostrar snippet de código
TLDR: notas importantes
input(type="radio")
estejachecked
por padrão ou o carrossel inteiro ficará oculto.labels
direcionar corretamente a entrada de rádio anterior / seguinte (consulte a seção de etiquetas no final sobre como fazer a segmentação):checked
Explicação
Aqui está a aparência da estrutura HTML básica:
div#holder
manterá todo o nosso conteúdo no lugar. Em seguida, agruparemos nossos botões de opção, rótulos e imagens sob adiv.group
. Isso garante que nossas entradas de rádio não sofram interferências destrutivas (trocadilhos).A chave está nos seletores (e nos rótulos - leia essa seção)
Primeiro, esconderemos nossos botões de opção - eles são feios de qualquer maneira:
Nós nunca precisaremos clicar nos botões de opção. Em vez disso, modelaremos nossos rótulos e adicionaremos destinos (
for
propriedades), para que eles redirecionem o clique para o bloco de entrada de rádio apropriado.A maioria dos nossos rótulos deve estar oculta:
(Omitirei todo o estilo estético, para facilitar o entendimento. Você pode ver a versão com melhor aparência no snippet da pilha.)
Exceto aqueles próximos a uma entrada de rádio ativada ou
:checked
Além disso, a
div.content
seguinte entrada marcada também deve ser exibida:No entanto, quando o botão de opção não estiver marcado,
div.content
deve estar oculto:Bazinga! Agora, nosso carrossel deve estar
totalmentefuncional, embora um pouco feio. Vamos mover nossos rótulos para a posição correta:E centralize nossas imagens em seus respectivos divs:
A última etapa é como você configura seus rótulos:
Note como, dada uma entrada de rádio com um
id
dosn
, olabel.previous
terá umfor
atributo(n - 1) % M
elabel.next
terá umfor
atributo(n + 1) % M
, ondeM
é o número de imagens no carrossel.Extra
Se você estiver usando o Jade (ou algum outro mecanismo de modelo), poderá configurá-lo com um loop for simples como este:
fonte
Observe que
css
abaixo não atende aos requisitos específicos da perguntaUtiliza pseudo classe , miniaturas como controles para alternar entre imagens; modelado no padrão descrito em Como acionar transições CSS3 ao clicar usando: target
:target
fonte
Inspirado por royhowie, acabei com uma solução muito mais simples se se tratasse da sintaxe HTML. Além disso, com boa animação e totalmente personalizável!
A idéia principal era criar as setas, não colocando-as em HTML uma a uma, mas criando e posicionando cuidadosamente pseudoelementos.
JSFiddle
Você pode ler mais sobre personalizações e algumas limitações técnicas no meu violino.
fonte
Por favor, verifique este link para ver apenas o carrossel CSS com a opção Auto Play no início, os botões de navegação à esquerda, os pontos de navegação e retomar a reprodução quando clicados no botão ...
Link de demonstração - http://blog.puneets.in/2016/02/pure-responsive-css3-slider-with.html
fonte
Estendendo a incrível solução de royhowie, adicionando uma propriedade de animação em
img
:fonte
Por que não torná-lo suave e bonito com apenas CSS?
Isso faz parte de uma biblioteca que eu criei, Picnic CSS . No entanto, esse jsfiddle inclui a biblioteca e todos os plugins da próxima versão (o 4.0 está sendo finalizado agora ). Você pode ver a versão 3.x atual do mesmo plugin aqui, que também atende a todos os seus requisitos, mas não é tão suave quanto eu gostaria:
No momento, você pode ver apenas o código-fonte do scss no ramo dev, mas está programado para ser lançado nos dias seguintes, por isso atualizarei minha resposta.
Algum código, por favor! Este é o HTML que você precisa para a versão 4.0, como outros comentaram, basicamente você brinca
<input type='radio'>
e<label>
obtém o efeito desejado:fonte