Estoy buscando hacer un carrusel de imágenes, donde un usuario puede alternar entre imágenes, haciendo clic en las flechas. Por ejemplo:
Sin embargo, solo puedo usar HTML y CSS, no JavaScript (y, por lo tanto, jQuery). Solo necesito la configuración básica; no son necesarias transiciones suaves y similares.
¿Cómo puedo lograr esto?
javascript
jquery
html
css
Royhowie
fuente
fuente
:hover
; Por último compuesto un fragmento de la utilizaciónclick
,css
; aunque usar solo dos flechas para los controles no fue particularmente trivial, aquí. Si "demasiadas soluciones posibles" son precisas, ¿se puede crear, publicar una solución alternativa a la siguiente respuesta que cumpla con el requisito específico "donde un usuario puede alternar entre imágenes, haciendo clic en las flechas" ?Respuestas:
¡Eso es fácil! Simplemente use botones de opción y etiquetas específicas.
Los botones de radio tienen el comportamiento (necesario) de permitir que solo se seleccione uno a la vez, como una imagen en nuestro carrusel.
Manifestación
Mostrar fragmento de código
TLDR: notas importantes
input(type="radio")
sea elchecked
predeterminado o se ocultará todo el carrusel.labels
orientar correctamente la entrada de radio anterior / siguiente (consulte la sección de etiquetas al final sobre cómo realizar la orientación):checked
Explicación
Así es como debería verse la estructura HTML básica:
div#holder
mantendrá todo nuestro contenido en su lugar. Luego, agruparemos nuestros botones de opción, etiquetas e imágenes, todo bajo undiv.group
. Esto asegura que nuestras entradas de radio no sufran interferencias destructivas (juego de palabras).La clave está en los selectores (y las etiquetas; asegúrese de leer esa sección)
Primero, ocultaremos nuestros botones de opción; de todos modos, son feos:
Nunca tendremos que hacer clic en los botones de opción. En su lugar, aplicaremos estilo a nuestras etiquetas y agregaremos objetivos (
for
propiedades), para que redireccionen el clic al bloque de entrada de radio apropiado.La mayoría de nuestras etiquetas deberían estar ocultas:
(Omitiré todo el estilo estético para que sea más fácil de entender. Puede ver la versión más atractiva en el fragmento de la pila).
Excepto aquellos junto a una entrada de radio que está activada, o
:checked
Además,
div.content
también se debe mostrar la siguiente entrada marcada:Sin embargo, cuando el botón de opción no está marcado,
div.content
debe ocultarse:¡Bazinga! Ahora nuestro carrusel debería ser
completamentefuncional, aunque un poco feo. Muevamos nuestras etiquetas a la posición correcta:Y centra nuestras imágenes dentro de sus respectivos divs:
El último paso es cómo configura sus etiquetas:
Observe cómo, dada una entrada de radio con una
id
den
,label.previous
tendrá unfor
atributo de(n - 1) % M
ylabel.next
tendrá unfor
atributo de(n + 1) % M
, dondeM
está el número de imágenes en el carrusel.Extra
Si está utilizando Jade (o algún otro motor de plantilla), puede configurarlo con un bucle for simple como este:
fuente
Tenga en cuenta que a
css
continuación no cumple con el requisito específico en la preguntaUtiliza pseudo clase , como los controles de miniaturas para alternar entre las imágenes; modelado en el patrón descrito en Cómo activar transiciones CSS3 al hacer clic usando: target
:target
fuente
Inspirado por Royhowie, terminé con una solución mucho más simple si se trata de sintaxis HTML. Además, ¡con una bonita animación y totalmente personalizable!
La idea principal era crear las flechas no colocándolas en HTML una por una, sino creando y luego colocando cuidadosamente los pseudoelementos.
JSFiddle
Puede leer más sobre personalizaciones y algunas limitaciones técnicas en mi violín.
fuente
Por favor, consulte este enlace para el carrusel de CSS solo con la opción de reproducción automática al principio, botones de navegación de izquierda a derecha, puntos de navegación y reanuda la reproducción cuando se hace clic en el botón ...
Enlace de demostración - http://blog.puneets.in/2016/02/pure-responsive-css3-slider-with.html
fuente
Extendiendo la increíble solución de Royhowie agregando una propiedad de animación en
img
:fuente
¿Por qué no hacerlo suave y agradable con solo CSS?
Esto es parte de una biblioteca que creé, Picnic CSS . Sin embargo, ese jsfiddle incluye la biblioteca y todos los complementos para la próxima versión (4.0 se está terminando ahora ). Puede ver la versión 3.x actual del mismo complemento aquí, que también cumple con todos sus requisitos, pero no es tan sencillo como me gustaría:
En este momento, solo puede ver el código fuente de scss en la rama de desarrollo pero está programado para ser lanzado en los próximos días, así que actualizaré mi respuesta.
¡Algún código por favor! Este es el HTML que necesitas para la versión 4.0, como comentaron otros, básicamente juegas
<input type='radio'>
y<label>
para lograr el efecto deseado:fuente