203 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <style>
 | |
| 
 | |
| .frame
 | |
| {
 | |
|     position:relative;
 | |
|     width:500px;
 | |
|     padding:20px;
 | |
|     border-bottom: none;
 | |
|     box-sizing:border-box;
 | |
| }
 | |
| 
 | |
| .frame__image
 | |
| {
 | |
|     position:relative;
 | |
|     z-index:20;
 | |
|     margin-bottom:19px;
 | |
| }
 | |
| 
 | |
| .frame__bar
 | |
| {
 | |
|     position:relative;
 | |
|     bottom:0;
 | |
|     left:0;
 | |
|     width:100%;
 | |
|     height:44px;
 | |
|     overflow:hidden;
 | |
|     transform-origin: center 22.5px;
 | |
| }
 | |
| .frame__bar span
 | |
| {
 | |
|     display: block;
 | |
|     position: absolute;
 | |
|     top: -10.5px;
 | |
|     left: 50%;
 | |
|     width: 20px;
 | |
|     height: 20px;
 | |
|     border: 5px solid #000;
 | |
|     border-right-color: transparent;
 | |
|     border-bottom-color: transparent;
 | |
|     transform: translate(-50%, 20px) rotate(45deg);
 | |
|     transition: left 0.4s;
 | |
| }
 | |
| .frame__bar span::before, .frame__bar span::after
 | |
| {
 | |
|     content: " ";
 | |
|     display: block;
 | |
|     position: absolute;
 | |
|     width: 1000px;
 | |
|     height:0px;
 | |
|     border-top: 5px solid black;
 | |
|     transform:rotate(-45deg);
 | |
| }
 | |
| .frame__bar span::before
 | |
| {
 | |
|     bottom: -0.5px;
 | |
|     right: 20px;
 | |
|     transform-origin: right bottom;
 | |
| }
 | |
| .frame__bar span::after
 | |
| {
 | |
|     top: -4px;
 | |
|     left: 17px;
 | |
|     transform-origin: left top;
 | |
| }
 | |
| .frame__bar--down
 | |
| {
 | |
|     transform: scaleY(-1);
 | |
| }
 | |
| .frame__bar--up
 | |
| {
 | |
|     transform: scaleY(1);
 | |
| }
 | |
| .frame__bar--1-3 span
 | |
| {
 | |
|     left:16.6%;
 | |
| }
 | |
| .frame__bar--2-3 span
 | |
| {
 | |
|     left:50%;
 | |
| }
 | |
| .frame__bar--3-3 span
 | |
| {
 | |
|     left:83%;
 | |
| }
 | |
| 
 | |
| .frame__bracket
 | |
| {
 | |
|     position:relative;
 | |
|     display:block;
 | |
|     width:100%;
 | |
|     height:0px;
 | |
|     top:-200px;
 | |
|     z-index:10;
 | |
|     border-top:5px solid black;
 | |
| }
 | |
| .frame__bracket::before, .frame__bracket::after
 | |
| {
 | |
|     content:" ";
 | |
|     display:block;
 | |
|     width:20px;
 | |
|     height:171px;
 | |
|     position:absolute;
 | |
|     top:-5px;
 | |
|     border:5px solid black;
 | |
| }
 | |
| .frame__bracket::before
 | |
| {
 | |
|     border-right-width: 0px;
 | |
|     left:-20px;
 | |
| }
 | |
| .frame__bracket::after
 | |
| {
 | |
|     border-left-width: 0px;
 | |
|     right:-20px;
 | |
| }
 | |
| 
 | |
| .frame__button
 | |
| {
 | |
|     position:relative;
 | |
|     display:block;
 | |
|     float:left;
 | |
|     padding:5px 0px 5px 0px;
 | |
|     box-sizing: border-box;
 | |
|     width:33.3%;
 | |
|     text-align:center;
 | |
|     cursor:pointer;
 | |
| }
 | |
| .frame__button:hover::before
 | |
| {
 | |
|     content: " ";
 | |
|     display: block;
 | |
|     width: 7px;
 | |
|     height: 7px;
 | |
|     background: black;
 | |
|     position: absolute;
 | |
|     top: -12px;
 | |
|     left: 50%;
 | |
|     transform: translateX(-5px) rotate(45deg);
 | |
|     transition: top 0.4s, bottom 0.4s;
 | |
| }
 | |
| .frame__button--upper:hover::before
 | |
| {
 | |
|     top:auto;
 | |
|     bottom:-9px;
 | |
| }
 | |
| .frame__button[data-frame-active='true']:hover::before
 | |
| {
 | |
|     bottom:auto;
 | |
|     top: -30px;
 | |
| }
 | |
| .frame__button--upper[data-frame-active='true']:hover::before
 | |
| {
 | |
|     bottom: -26px;
 | |
|     top:auto;
 | |
| }
 | |
| </style>
 | |
| <div class="frame">
 | |
|     <div class="frame__image">
 | |
|         <img style="display:block; width:100%; height:auto;" src="https://via.placeholder.com/1024x512.png"/>
 | |
|     </div>
 | |
|     <div class="frame__button frame__button--upper">Cover</div><div class="frame__button frame__button--upper">Back </div><div class="frame__button frame__button--upper">Spine</div>
 | |
| 
 | |
|     <div class="frame__bar"><span></span></div>
 | |
|     <div class="frame__bracket"></div>
 | |
| 
 | |
|     <div class="frame__button">Intro</div><div class="frame__button">1 & 2</div><div class="frame__button">3 & 4</div>
 | |
| </div>
 | |
| 
 | |
| <script>
 | |
|     function frame__setup(inFrame)
 | |
|     {
 | |
|         var buttons = inFrame.querySelectorAll(".frame__button");
 | |
|         var bar = inFrame.querySelector(".frame__bar");
 | |
|         var active = false;
 | |
| 
 | |
|         function activate(inButton)
 | |
|         {
 | |
|             var index = parseInt(inButton.getAttribute("data-frame-index"));
 | |
|             var classX = "frame__bar--" + ((index % 3)+1) + "-3";
 | |
|             var classY = index > 2 ? "frame__bar--down" : "frame__bar--up";
 | |
| 
 | |
|             bar.setAttribute("class", "frame__bar " + classX + " " + classY);
 | |
| 
 | |
|             if(active)
 | |
|             {
 | |
|                 active.setAttribute("data-frame-active", "false");
 | |
|             }
 | |
|             active = inButton;
 | |
|             inButton.setAttribute("data-frame-active", "true");
 | |
|         }
 | |
|         for(var i=0; i<buttons.length; i++)
 | |
|         {
 | |
|             buttons[i].setAttribute("data-frame-index", i);
 | |
|             buttons[i].setAttribute("data-frame-active", "false");
 | |
|             buttons[i].addEventListener("click", function(){ activate(this); });
 | |
|         }
 | |
| 
 | |
|         activate( buttons[0] );
 | |
|     }
 | |
| 
 | |
|     frame__setup(document.querySelector(".frame"));
 | |
| </script>    
 |