Good, cheap, fast checkboxes
This commit is contained in:
		
							parent
							
								
									0def591222
								
							
						
					
					
						commit
						601a5ef151
					
				
							
								
								
									
										36
									
								
								good-cheap-fast/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								good-cheap-fast/index.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
|   <head> | ||||
|     <meta charset="UTF-8" /> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
|     <link rel="stylesheet" href="style.css" /> | ||||
|     <title>Good, Cheap, Fast</title> | ||||
|   </head> | ||||
|   <body> | ||||
|     <h2>How do you want your project to be?</h2> | ||||
|     <div class="toggle-container"> | ||||
|       <input type="checkbox" id="good" class="toggle"> | ||||
|       <label for="good" class="label"> | ||||
|         <div class="ball"></div> | ||||
|       </label> | ||||
|       <span>Good</span> | ||||
|     </div> | ||||
| 
 | ||||
|     <div class="toggle-container"> | ||||
|       <input type="checkbox" id="cheap" class="toggle"> | ||||
|       <label for="cheap" class="label"> | ||||
|         <div class="ball"></div> | ||||
|       </label> | ||||
|       <span>Cheap</span> | ||||
|     </div> | ||||
| 
 | ||||
|     <div class="toggle-container"> | ||||
|       <input type="checkbox" id="fast" class="toggle"> | ||||
|       <label for="fast" class="label"> | ||||
|         <div class="ball"></div> | ||||
|       </label> | ||||
|       <span>Fast</span> | ||||
|     </div> | ||||
|     <script src="script.js"></script> | ||||
|   </body> | ||||
| </html> | ||||
							
								
								
									
										22
									
								
								good-cheap-fast/script.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								good-cheap-fast/script.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| const toggles = document.querySelectorAll('.toggle') | ||||
| const good = document.querySelector('#good') | ||||
| const cheap = document.querySelector('#cheap') | ||||
| const fast = document.querySelector('#fast') | ||||
| 
 | ||||
| toggles.forEach(toggle => toggle.addEventListener('change', (e) => doTheTrick(e.target))) | ||||
| 
 | ||||
| function doTheTrick(theClickedOne) { | ||||
|     if(good.checked && cheap.checked && fast.checked) { | ||||
|         if(good === theClickedOne) { | ||||
|             fast.checked = false | ||||
|         } | ||||
| 
 | ||||
|         if(cheap === theClickedOne) { | ||||
|             good.checked = false | ||||
|         } | ||||
| 
 | ||||
|         if(fast === theClickedOne) { | ||||
|             cheap.checked = false | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										83
									
								
								good-cheap-fast/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								good-cheap-fast/style.css
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,83 @@ | ||||
| @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap'); | ||||
| 
 | ||||
| * { | ||||
|   box-sizing: border-box; | ||||
| } | ||||
| 
 | ||||
| body { | ||||
|   font-family: 'Roboto', sans-serif; | ||||
|   display: flex; | ||||
|   flex-direction: column; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
|   height: 100vh; | ||||
|   overflow: hidden; | ||||
|   margin: 0; | ||||
| } | ||||
| 
 | ||||
| .toggle-container { | ||||
|   display: flex; | ||||
|   align-items: center; | ||||
|   margin: 10px 0; | ||||
|   width: 200px; | ||||
| } | ||||
| 
 | ||||
| .toggle { | ||||
|   visibility: hidden; | ||||
| } | ||||
| 
 | ||||
| .label { | ||||
|   position: relative; | ||||
|   background-color: #d0d0d0; | ||||
|   border-radius: 50px; | ||||
|   cursor: pointer; | ||||
|   display: inline-block; | ||||
|   margin: 0 15px 0; | ||||
|   width: 80px; | ||||
|   height: 40px; | ||||
| } | ||||
| 
 | ||||
| .toggle:checked + .label { | ||||
|   background-color: #8e44ad; | ||||
| } | ||||
| 
 | ||||
| .ball { | ||||
|   background: #fff; | ||||
|   height: 34px; | ||||
|   width: 34px; | ||||
|   border-radius: 50%; | ||||
|   position: absolute; | ||||
|   top: 3px; | ||||
|   left: 3px; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
|   animation: slideOff 0.3s linear forwards; | ||||
| } | ||||
| 
 | ||||
| .toggle:checked + .label .ball { | ||||
|   animation: slideOn 0.3s linear forwards; | ||||
| } | ||||
| 
 | ||||
| @keyframes slideOn { | ||||
|   0% { | ||||
|     transform: translateX(0) scale(1); | ||||
|   } | ||||
|   50% { | ||||
|     transform: translateX(20px) scale(1.2); | ||||
|   } | ||||
|   100% { | ||||
|     transform: translateX(40px) scale(1); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| @keyframes slideOff { | ||||
|   0% { | ||||
|     transform: translateX(40px) scale(1); | ||||
|   } | ||||
|   50% { | ||||
|     transform: translateX(20px) scale(1.2); | ||||
|   } | ||||
|   100% { | ||||
|     transform: translateX(0) scale(1); | ||||
|   } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Brad Traversy
						Brad Traversy