572 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			572 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: How to Create a Lightbox | ||
|  | --- | ||
|  | 
 | ||
|  | ## How to Create a Lightbox
 | ||
|  | 
 | ||
|  | ### Introduction
 | ||
|  | A lightbox is a combination of two components, a <a href='https://en.wikipedia.org/wiki/Modal_window' target='_blank' rel='nofollow'>modal</a> and a slide show. Here you will construct a simple lightbox using `HTML`, `CSS` and `JavaScript`.  | ||
|  | 
 | ||
|  | The lightbox will be contained in the modal, which will be triggered by some `JavaScript`, from <a href='https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Event_handlers' target='_blank' rel='nofollow'>event handlers</a> in the `HTML` markup. | ||
|  | You will build styles which will provide state with `CSS` and behavior with `JavaScript`. You will also find a reference list of the methods you use and other useful tid-bits that are related to this tutorial, at the bottom. | ||
|  | 
 | ||
|  | #### Our Images
 | ||
|  | The images we will be using are being supplied by <a href='https://www.pexels.com/' target='_blank' rel='nofollow'>Pexels</a>,  | ||
|  | a free stock photo gallery that allows you to provide high quality images to their projects fast, free and usually with no attributions needed. | ||
|  | 
 | ||
|  | #### Just Show Me The Code!
 | ||
|  | A live example can be found <a href='https://codepen.io/rdev-rocks/pen/KXNzvo' target='_blank' rel='nofollow'>here - CodePen/Lightbox</a> and a full draft of the code is near the bottom. | ||
|  | 
 | ||
|  | ### Step 1. The Markup
 | ||
|  | 
 | ||
|  | The markup, or `HTML`, provides the structure for the lightbox. | ||
|  | 
 | ||
|  | ```html | ||
|  | 
 | ||
|  | <!-- Here is your access point for your user, a preview of the images you wish to display. 
 | ||
|  |      You use the onclick="" event handler to execute the methods you will define in the | ||
|  |      JavaScript near the bottom --> | ||
|  | 
 | ||
|  | <div class="row"> | ||
|  |   <div class="col"> | ||
|  |      <img src="https://static.pexels.com/photos/385997/pexels-photo-385997.jpeg" onclick="openLightbox();toSlide(1)" class="hover-shadow preview" alt="Toy car on the road." /> | ||
|  |   </div> | ||
|  |   <div class="col"> | ||
|  |      <img src="https://static.pexels.com/photos/574521/pexels-photo-574521.jpeg" onclick="openLightbox();toSlide(2)" class="hover-shadow preview" alt="Toy car exploring offroad." /> | ||
|  |   </div> | ||
|  |   <div class="col"> | ||
|  |      <img src="https://static.pexels.com/photos/386009/pexels-photo-386009.jpeg" onclick="openLightbox();toSlide(3)" class="hover-shadow preview" alt="Toy car in the city." /> | ||
|  |   </div> | ||
|  | </div> | ||
|  | 
 | ||
|  | <!-- This is your lightbox, it is contained in a modal. Here you provide all the images,
 | ||
|  |      controls, and another set of preview images as the dots. Dots show your user which | ||
|  |      image is currently active. Note that you use entities (e.g. ×), more info on | ||
|  |      them at the bottom. --> | ||
|  |       | ||
|  | <div id="Lightbox" class="modal"> | ||
|  |   <span class="close pointer" onclick="closeLightbox()">×</span> | ||
|  |   <div class="modal-content"> | ||
|  |     <div class="slide"> | ||
|  |         <img src="https://static.pexels.com/photos/385997/pexels-photo-385997.jpeg" class="image-slide" alt="Toy car on the road." /> | ||
|  |     </div> | ||
|  |     <div class="slide"> | ||
|  |         <img src="https://static.pexels.com/photos/574521/pexels-photo-574521.jpeg" class="image-slide" alt="Toy car exploring offroad." /> | ||
|  |     </div>     | ||
|  |     <div class="slide"> | ||
|  |         <img src="https://static.pexels.com/photos/386009/pexels-photo-386009.jpeg" class="image-slide" alt="Toy car in the city." /> | ||
|  |     </div> | ||
|  |    | ||
|  |     <a class="previous" onclick="changeSlide(-1)">❮</a> | ||
|  |     <a class="next" onclick="changeSlide(1)">❯</a> | ||
|  |    | ||
|  |     <div class="dots"> | ||
|  |       <div class="col"> | ||
|  |         <img src="https://static.pexels.com/photos/385997/pexels-photo-385997.jpeg" class="modal-preview hover-shadow" onclick="toSlide(1)" alt="Toy car on the road" /> | ||
|  |       </div> | ||
|  |       <div class="col"> | ||
|  |         <img src="https://static.pexels.com/photos/574521/pexels-photo-574521.jpeg" class="modal-preview hover-shadow" onclick="toSlide(2)" alt="Toy car exploring offroad." /> | ||
|  |       </div> | ||
|  |       <div class="col"> | ||
|  |         <img src="https://static.pexels.com/photos/386009/pexels-photo-386009.jpeg" class="modal-preview hover-shadow" onclick="toSlide(3)" alt="Toy car in the city." /> | ||
|  |       </div> | ||
|  |     </div> | ||
|  |   </div> | ||
|  | </div> | ||
|  | 
 | ||
|  | ``` | ||
|  | ### Step 2. Style with CSS
 | ||
|  | 
 | ||
|  | The `CSS` provides you with different states for your lightbox. Things like visibility, positioning, and hover effects. | ||
|  | 
 | ||
|  | Your style sheet should look like this:  | ||
|  | 
 | ||
|  | ```css | ||
|  | 
 | ||
|  | /* Here you provide a best practice's "reset", read more about it at the bottom! :) */ | ||
|  | 
 | ||
|  | html { | ||
|  |   box-sizing: border-box; | ||
|  | } | ||
|  | 
 | ||
|  | *, *:before, *:after { | ||
|  |   box-sizing: inherit; | ||
|  | } | ||
|  | 
 | ||
|  | body { | ||
|  |   margin: 0; | ||
|  | } | ||
|  | 
 | ||
|  | /* You define the style of our previews here, you are using flex to display the images  | ||
|  |    "responsively". */ | ||
|  | 
 | ||
|  | .preview { | ||
|  |   width: 100%; | ||
|  | } | ||
|  | 
 | ||
|  | .row { | ||
|  |   display: flex; | ||
|  |   flex-direction: row; | ||
|  |   justify-content: space-between; | ||
|  | } | ||
|  | 
 | ||
|  | .row > .col { | ||
|  |   padding: 0 8px; | ||
|  | } | ||
|  | 
 | ||
|  | .col { | ||
|  |   float: left; | ||
|  |   width: 25%; | ||
|  | } | ||
|  | 
 | ||
|  | /* Now you want to define what the lightbox will look like. Note that you have the display | ||
|  |    as none. You don't want it to show until the user clicks on one of the previews.  | ||
|  |    You will change this display property with JavaScript below. */ | ||
|  |     | ||
|  | .modal { | ||
|  |   display: none; | ||
|  |   position: fixed; | ||
|  |   z-index: 1; | ||
|  |   padding: 10px 62px 0px 62px; | ||
|  |   left: 0; | ||
|  |   top: 0; | ||
|  |   width: 100%; | ||
|  |   height: 100%; | ||
|  |   overflow: auto; | ||
|  |   background-color: black; | ||
|  | } | ||
|  | 
 | ||
|  | .modal-content { | ||
|  |   position: relative; | ||
|  |   display: flex; | ||
|  |   flex-direction: column; | ||
|  |   justify-content: center; | ||
|  |   margin: auto; | ||
|  |   padding: 0 0 0 0; | ||
|  |   width: 80%; | ||
|  |   max-width: 1200px; | ||
|  | } | ||
|  | 
 | ||
|  | /* Same with your slides, you set the display to none, because you want to choose which  | ||
|  |    one is shown at a time. */ | ||
|  | 
 | ||
|  | .slide { | ||
|  |   display: none; | ||
|  | } | ||
|  | 
 | ||
|  | .image-slide { | ||
|  |   width: 100%; | ||
|  | } | ||
|  | 
 | ||
|  | .modal-preview { | ||
|  |   width: 100%; | ||
|  | } | ||
|  | 
 | ||
|  | .dots { | ||
|  |   display: flex; | ||
|  |   flex-direction: row; | ||
|  |   justify-content: space-between; | ||
|  | } | ||
|  | 
 | ||
|  | /* You want the previews a little transparent to show that they are "inactive".  | ||
|  |    You then add an .active or :hover class to animate the selections for your user when | ||
|  |    they interact with your controls and clickable content. | ||
|  |  */ | ||
|  | 
 | ||
|  | img.preview, img.modal-preview { | ||
|  |   opacity: 0.6; | ||
|  | } | ||
|  | 
 | ||
|  | img.active, | ||
|  | .preview:hover, | ||
|  | .modal-preview:hover { | ||
|  |   opacity: 1; | ||
|  | } | ||
|  | 
 | ||
|  | img.hover-shadow { | ||
|  |   transition: 0.3s; | ||
|  | } | ||
|  | 
 | ||
|  | .hover-shadow:hover { | ||
|  |   box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); | ||
|  | }  | ||
|  | 
 | ||
|  | .close { | ||
|  |   color: white; | ||
|  |   position: absolute; | ||
|  |   top: 10px; | ||
|  |   right: 25px; | ||
|  |   font-size: 35px; | ||
|  |   font-weight: bold; | ||
|  | } | ||
|  | 
 | ||
|  | .close:hover, | ||
|  | .close:focus { | ||
|  |   color: #999; | ||
|  |   text-decoration: none; | ||
|  |   cursor: pointer; | ||
|  | } | ||
|  | 
 | ||
|  | .previous, | ||
|  | .next { | ||
|  |   cursor: pointer; | ||
|  |   position: absolute; | ||
|  |   top: 50%; | ||
|  |   width: auto; | ||
|  |   padding: 16px; | ||
|  |   margin-top: -50px; | ||
|  |   color: white; | ||
|  |   font-weight: bold; | ||
|  |   font-size: 20px; | ||
|  |   transition: 0.6s ease; | ||
|  |   border-radius: 0 3px 3px 0; | ||
|  |   user-select: none; | ||
|  |   -webkit-user-select: none; | ||
|  | } | ||
|  | 
 | ||
|  | .next { | ||
|  |   right: 0; | ||
|  |   border-radius: 3px 0 0 3px; | ||
|  | } | ||
|  | 
 | ||
|  | .previous:hover, | ||
|  | .next:hover { | ||
|  |   background-color: rgba(0, 0, 0, 0.8); | ||
|  | } | ||
|  | 
 | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Step 3. JavaScript
 | ||
|  | 
 | ||
|  | Now to business! Your JavaScript should look like this: | ||
|  | 
 | ||
|  | ```javascript | ||
|  | 
 | ||
|  | // Initialize here and run showSlide() to give your lightbox a default state. | ||
|  | 
 | ||
|  | let slideIndex = 1; | ||
|  | showSlide(slideIndex); | ||
|  | 
 | ||
|  | // You are providing the functionality for your clickable content, which is  | ||
|  | // your previews, dots, controls and the close button. | ||
|  | 
 | ||
|  | function openLightbox() { | ||
|  |   document.getElementById('Lightbox').style.display = 'block'; | ||
|  | } | ||
|  | 
 | ||
|  | function closeLightbox() { | ||
|  |   document.getElementById('Lightbox').style.display = 'none'; | ||
|  | }; | ||
|  | 
 | ||
|  | // Note that you are assigning new values here to our slidIndex. | ||
|  | 
 | ||
|  | function changeSlide(n) { | ||
|  |   showSlide(slideIndex += n); | ||
|  | }; | ||
|  | 
 | ||
|  | function toSlide(n) { | ||
|  |   showSlide(slideIndex = n); | ||
|  | }; | ||
|  | 
 | ||
|  | // This is your logic for the light box. It will decide which slide to show  | ||
|  | // and which dot is active. | ||
|  | 
 | ||
|  | function showSlide(n) { | ||
|  |   const slides = document.getElementsByClassName('slide'); | ||
|  |   let modalPreviews = document.getElementsByClassName('modal-preview'); | ||
|  | 
 | ||
|  |   if (n > slides.length) { | ||
|  |     slideIndex = 1;	 | ||
|  |   }; | ||
|  |    | ||
|  |   if (n < 1) { | ||
|  |     slideIndex = slides.length; | ||
|  |   }; | ||
|  | 
 | ||
|  |   for (let i = 0; i < slides.length; i++) { | ||
|  |     slides[i].style.display = "none"; | ||
|  |   }; | ||
|  |    | ||
|  |   for (let i = 0; i < modalPreviews.length; i++) { | ||
|  |     modalPreviews[i].className = modalPreviews[i].className.replace(' active', ''); | ||
|  |   }; | ||
|  |    | ||
|  |   slides[slideIndex - 1].style.display = 'block'; | ||
|  |   modalPreviews[slideIndex - 1].className += ' active'; | ||
|  | }; | ||
|  | 
 | ||
|  | ``` | ||
|  | And thats it! Now put all the code together. You should now have a functional lightbox.  | ||
|  | 
 | ||
|  | ### All The Code
 | ||
|  | 
 | ||
|  | ```html | ||
|  | <body> | ||
|  |   <style> | ||
|  |     html { | ||
|  |       box-sizing: border-box; | ||
|  |     } | ||
|  |      | ||
|  |     *, *:before, *:after { | ||
|  |       box-sizing: inherit; | ||
|  |     } | ||
|  |      | ||
|  |     body { | ||
|  |       margin: 0; | ||
|  |     } | ||
|  |      | ||
|  |     .preview { | ||
|  |       width: 100%; | ||
|  |     } | ||
|  |      | ||
|  |     .row { | ||
|  |       display: flex; | ||
|  |       flex-direction: row; | ||
|  |       justify-content: space-between; | ||
|  |     } | ||
|  |      | ||
|  |     .row > .col { | ||
|  |       padding: 0 8px; | ||
|  |     } | ||
|  |      | ||
|  |     .col { | ||
|  |       float: left; | ||
|  |       width: 25%; | ||
|  |     } | ||
|  |      | ||
|  |     .modal { | ||
|  |       display: none; | ||
|  |       position: fixed; | ||
|  |       z-index: 1; | ||
|  |       padding: 10px 62px 0px 62px; | ||
|  |       left: 0; | ||
|  |       top: 0; | ||
|  |       width: 100%; | ||
|  |       height: 100%; | ||
|  |       overflow: auto; | ||
|  |       background-color: black; | ||
|  |     } | ||
|  |      | ||
|  |     .modal-content { | ||
|  |       position: relative; | ||
|  |       display: flex; | ||
|  |       flex-direction: column; | ||
|  |       justify-content: center; | ||
|  |       margin: auto; | ||
|  |       padding: 0 0 0 0; | ||
|  |       width: 80%; | ||
|  |       max-width: 1200px; | ||
|  |     } | ||
|  |      | ||
|  |     .slide { | ||
|  |       display: none; | ||
|  |     } | ||
|  |      | ||
|  |     .image-slide { | ||
|  |     	width: 100%; | ||
|  |     } | ||
|  |      | ||
|  |     .modal-preview { | ||
|  |     	width: 100%; | ||
|  |     } | ||
|  |      | ||
|  |     .dots { | ||
|  |     	display: flex; | ||
|  |     	flex-direction: row; | ||
|  |     	justify-content: space-between; | ||
|  |     } | ||
|  |      | ||
|  |     img.preview, img.modal-preview { | ||
|  |       opacity: 0.6; | ||
|  |     } | ||
|  |      | ||
|  |     img.active, | ||
|  |     .preview:hover, | ||
|  |     .modal-preview:hover { | ||
|  |       opacity: 1; | ||
|  |     } | ||
|  |      | ||
|  |     img.hover-shadow { | ||
|  |       transition: 0.3s; | ||
|  |     } | ||
|  |      | ||
|  |     .hover-shadow:hover { | ||
|  |       box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); | ||
|  |     }  | ||
|  |      | ||
|  |     .close { | ||
|  |       color: white; | ||
|  |       position: absolute; | ||
|  |       top: 10px; | ||
|  |       right: 25px; | ||
|  |       font-size: 35px; | ||
|  |       font-weight: bold; | ||
|  |     } | ||
|  |      | ||
|  |     .close:hover, | ||
|  |     .close:focus { | ||
|  |       color: #999; | ||
|  |       text-decoration: none; | ||
|  |       cursor: pointer; | ||
|  |     } | ||
|  |      | ||
|  |     .previous, | ||
|  |     .next { | ||
|  |       cursor: pointer; | ||
|  |       position: absolute; | ||
|  |       top: 50%; | ||
|  |       width: auto; | ||
|  |       padding: 16px; | ||
|  |       margin-top: -50px; | ||
|  |       color: white; | ||
|  |       font-weight: bold; | ||
|  |       font-size: 20px; | ||
|  |       transition: 0.6s ease; | ||
|  |       border-radius: 0 3px 3px 0; | ||
|  |       user-select: none; | ||
|  |       -webkit-user-select: none; | ||
|  |     } | ||
|  |      | ||
|  |     .next { | ||
|  |       right: 0; | ||
|  |       border-radius: 3px 0 0 3px; | ||
|  |     } | ||
|  |      | ||
|  |     .previous:hover, | ||
|  |     .next:hover { | ||
|  |       background-color: rgba(0, 0, 0, 0.8); | ||
|  |     } | ||
|  |   </style> | ||
|  |   <div class="row"> | ||
|  |     <div class="col"> | ||
|  |        <img src="https://static.pexels.com/photos/385997/pexels-photo-385997.jpeg" onclick="openLightbox();toSlide(1)" class="hover-shadow preview" alt="Toy car on the road." /> | ||
|  |     </div> | ||
|  |     <div class="col"> | ||
|  |        <img src="https://static.pexels.com/photos/574521/pexels-photo-574521.jpeg" onclick="openLightbox();toSlide(2)" class="hover-shadow preview" alt="Toy car exploring offroad." /> | ||
|  |     </div> | ||
|  |     <div class="col"> | ||
|  |        <img src="https://static.pexels.com/photos/386009/pexels-photo-386009.jpeg" onclick="openLightbox();toSlide(3)" class="hover-shadow preview" alt="Toy car in the city" /> | ||
|  |     </div> | ||
|  |   </div> | ||
|  |    | ||
|  |   <div id="Lightbox" class="modal"> | ||
|  |    | ||
|  |     <span class="close pointer" onclick="closeLightbox()">×</span> | ||
|  |     <div class="modal-content"> | ||
|  |       <div class="slide"> | ||
|  |         <img src="https://static.pexels.com/photos/385997/pexels-photo-385997.jpeg" class="image-slide" alt="Toy car on the road." /> | ||
|  |       </div> | ||
|  |       <div class="slide"> | ||
|  |         <img src="https://static.pexels.com/photos/574521/pexels-photo-574521.jpeg" class="image-slide" alt="Toy car exploring offroad." /> | ||
|  |       </div>     | ||
|  |       <div class="slide"> | ||
|  |         <img src="https://static.pexels.com/photos/386009/pexels-photo-386009.jpeg" class="image-slide" alt="Toy car in the city." /> | ||
|  |       </div> | ||
|  |      | ||
|  |       <a class="previous" onclick="changeSlide(-1)">❮</a> | ||
|  |       <a class="next" onclick="changeSlide(1)">❯</a> | ||
|  |            | ||
|  |       <div class="dots"> | ||
|  |         <div class="col"> | ||
|  |           <img src="https://static.pexels.com/photos/385997/pexels-photo-385997.jpeg" class="modal-preview hover-shadow" onclick="toSlide(1)" alt="Toy car on the road." /> | ||
|  |         </div> | ||
|  |         <div class="col"> | ||
|  |           <img src="https://static.pexels.com/photos/574521/pexels-photo-574521.jpeg" class="modal-preview hover-shadow" onclick="toSlide(2)" alt="Toy car exploring offroad." /> | ||
|  |         </div> | ||
|  |         <div class="col"> | ||
|  |           <img src="https://static.pexels.com/photos/386009/pexels-photo-386009.jpeg" class="modal-preview hover-shadow" onclick="toSlide(3)" alt="Toy car in the city" /> | ||
|  |         </div> | ||
|  |       </div> | ||
|  |     </div>  | ||
|  |   </div> | ||
|  |    | ||
|  |   <script> | ||
|  |     let slideIndex = 1; | ||
|  |     showSlide(slideIndex); | ||
|  |      | ||
|  |     function openLightbox() { | ||
|  |       document.getElementById('Lightbox').style.display = 'block'; | ||
|  |     }; | ||
|  |      | ||
|  |     function closeLightbox() { | ||
|  |       document.getElementById('Lightbox').style.display = 'none'; | ||
|  |     }; | ||
|  |      | ||
|  |     function changeSlide(n) { | ||
|  |       showSlide(slideIndex += n); | ||
|  |     }; | ||
|  |      | ||
|  |     function toSlide(n) { | ||
|  |       showSlide(slideIndex = n); | ||
|  |     }; | ||
|  |      | ||
|  |     function showSlide(n) { | ||
|  |       const slides = document.getElementsByClassName('slide'); | ||
|  |       let modalPreviews = document.getElementsByClassName('modal-preview'); | ||
|  |      | ||
|  |       if (n > slides.length) { | ||
|  |         slideIndex = 1;	 | ||
|  |       }; | ||
|  |        | ||
|  |       if (n < 1) { | ||
|  |         slideIndex = slides.length; | ||
|  |       }; | ||
|  |      | ||
|  |       for (let i = 0; i < slides.length; i++) { | ||
|  |         slides[i].style.display = "none"; | ||
|  |       }; | ||
|  |        | ||
|  |       for (let i = 0; i < modalPreviews.length; i++) { | ||
|  |         modalPreviews[i].className = modalPreviews[i].className.replace(' active', ''); | ||
|  |       }; | ||
|  |        | ||
|  |       slides[slideIndex - 1].style.display = 'block'; | ||
|  |       modalPreviews[slideIndex - 1].className += ' active'; | ||
|  |     }; | ||
|  |   </script> | ||
|  | </body> | ||
|  | ``` | ||
|  | 
 | ||
|  | ### More Information:
 | ||
|  | --- | ||
|  | 
 | ||
|  | #### HTML
 | ||
|  | 
 | ||
|  | <a href='https://en.wikipedia.org/wiki/Modal_window' target='_blank' rel='nofollow'>Modal</a> - A popup window | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Event_handlers' target='_blank' rel='nofollow'>Event Handlers</a> - HTML properties that listen for user events.   | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Glossary/Entity' target='_blank' rel='nofollow'>Entity</a> - A string that represents a reserved charactor in HTML. | ||
|  | 
 | ||
|  | #### CSS
 | ||
|  | 
 | ||
|  | <a href='https://css-tricks.com/box-sizing/' target='_blank' rel='nofollow'>box-sizing:</a> - A CSS3 property that controls the way the browser renders content based on height and width.  | ||
|  |    | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox' target='_blank' rel='nofollow'>Flex-box</a> - A new technology that helps with positioning HTML content in a responsive mannor.  | ||
|  |    | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Web/CSS/:hover' target='_blank' rel='nofollow'>:hover</a> - A pseudo-selector that gets triggered when a user hovers over an element when this class is assigned to it.  | ||
|  | 
 | ||
|  | #### JavaScript
 | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let' target='_blank' rel='nofollow'>let</a> A block-scope variable. | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const' target='_blank' rel='nofollow'>const</a> A block-scope constant. | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById' target='_blank' rel='nofollow'>getElementById()</a> - A document method that returns a reference to an HTML element. | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName' target='_blank' rel='nofollow'>getElementsByClassName()</a> - A document method that returns an array of references to the html that have matching classes. | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators' target='_blank' rel='nofollow'>+=</a> - an assignment operator which will add numbers or concatenate strings. | ||
|  | 
 | ||
|  | #### Resources:
 | ||
|  | 
 | ||
|  | <a href='https://codepen.io/rdev-rocks/pen/KXNzvo?editors=1111' target='_blank' rel='nofollow'>Live Example</a> - A CodePen that demos the above code. | ||
|  | 
 | ||
|  | <a href='https://codepen.io/enxaneta/full/adLPwv' target='_blank' rel='nofollow'>Interactive Flex-Box</a> - An interactive CodePen that shows flex-box behavior. | ||
|  | 
 | ||
|  | <a href='https://www.pexels.com/' target='_blank' rel='nofollow'>Pexels</a> - A free stock photo gallery. | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/' target='_blank' rel='nofollow'>MDN</a> - A great place for information about web stuff. | ||
|  | 
 | ||
|  | <a href='https://www.w3schools.com/howto/howto_js_lightbox.asp' target='_blank' rel='nofollow'>W3School - Lightbox</a> - This code was inspired from here. Thanks W3Schools! |