Accordion gallery | Responsive Gallery using html css javascript

Accordion gallery | Responsive Gallery using html css javascript

Welcome🎉 to Code With Random blog. In this blog, we learn how we create an Accordion gallery. We use HTML, Css, and javascript for this Accordion gallery. Hope you enjoy our blog so let’s start with a basic HTML structure for an Accordion gallery.

HTML code

 <!DOCTYPE html>  
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Accordion gallery</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="bg"></div>
<div id="fg"></div>
<script src="https://unpkg.co/gsap@3/dist/gsap.min.js"></script>
<script src="index.js"></script>
</body>
</html>

There is all HTML code for the Accordion gallery. Now, you can see output without CSS, then we write css & javascript for the Accordion gallery.

output

Accordion gallery | Responsive Gallery using html css javascript
Simple Blank Output (we achieve output using css & js) 

CSS Code

 @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@700&display=swap');  
html, body, #fg, #bg {
width:100%;
height:100%;
color:#fff;
font-size:35px;
font-family:'Montserrat', sans-serif;
overflow:hidden;
}
div {
position:absolute;
top:0;
}
sub {
font-size:12px;
display:block;
}
p {
padding:12px;
}

Here is our updated output CSS.

output

Accordion gallery | Responsive Gallery using html css javascript
Simple Blank Output (we achieve output js)

Javascript code 

 var imgs = [  
'https://images.unsplash.com/photo-1506744038136-46273834b3fb?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1200&q=50',
'https://images.unsplash.com/photo-1511576661531-b34d7da5d0bb?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=50',
'https://images.unsplash.com/photo-1476610182048-b716b8518aae?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=50',
'https://images.unsplash.com/photo-1502657877623-f66bf489d236?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=50',
'https://images.unsplash.com/photo-1506361797048-46a149213205?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1200&q=50'
],
n = imgs.length,
current = n-1,
closedWidth = Math.floor(window.innerWidth/10)
for (var i=0; i<n; i++){
var bgImg = document.createElement('div');
bg.appendChild(bgImg);
gsap.set(bgImg, {
attr:{id:'bgImg'+i, class:'bgImg'},
width:'100%',
height:'100%',
backgroundImage:'url('+imgs[i]+')',
backgroundSize:'cover',
backgroundPosition:'center'
})
var b = document.createElement('div');
fg.appendChild(b);
gsap.fromTo(b, {
attr:{id:'b'+i, class:'box'},
innerHTML:'<p><sub>Fig.</sub> '+(i+1)+'</p>',
width:'100%',
height:'100%',
borderLeft:(i>0)?'solid 1px #eee':'',
backgroundColor:'rgba(250,250,250,0)',
left:i*closedWidth,
transformOrigin:'100% 100%',
x:'100%'
},{
duration:i*0.15,
x:0,
ease:'expo.inOut'
})
b.onmouseenter = b.onclick = (e)=>{
if (Number(e.currentTarget.id.substr(1))==current) return;
var staggerOrder = !!(current < Number(e.currentTarget.id.substr(1)));
current = Number(e.currentTarget.id.substr(1));
gsap.to('.box', {
duration:0.5,
ease:'elastic.out(0.3)',
left:(i)=>(i<=current)? i*closedWidth: window.innerWidth-((n-i)*closedWidth),
x:0,
stagger: staggerOrder? 0.05:-0.05
})
bg.appendChild( document.getElementById('bgImg'+current) )
gsap.fromTo('#bgImg'+current, {opacity:0}, {opacity:1, duration:0.3, ease:'power1.inOut'})
gsap.fromTo('#bgImg'+current, {scale:1.05, rotation:0.05}, {scale:1, rotation:0, duration:1.5, ease:'sine'})
}
}
window.onresize = (e)=>{
closedWidth = Math.floor(window.innerWidth/10)
gsap.set('.box', { x:0, left:(i)=> (i<=current)? i*closedWidth: window.innerWidth-((n-i)*closedWidth) })
}

Final output


Now we have completed our javascript section,  Here is our updated output with javascriptHope you like the Accordion gallery. you can see output video and project screenshots. See our other blogs and gain knowledge in front-end development. Thank you 🙏💕!

In this post, we learn how to create an Accordion gallery using simple HTML & CSS, and javascript. If we made a mistake or any confusion, please drop a comment to reply or help you in easy learning.

Written by – Code With Random/Anki 

Codepen by – Tom Miller

This Post Has 0 Comments

  1. Anonymous

    To bad its not working … It opens up a blank page.

  2. Anonymous

    How to start whit fig1 instead of fig5 when page loads for the 1st time?

  3. Anonymous

    Nvm … i made it work.

Leave a Reply