1. 程式人生 > >css動畫遮罩效果自上而下與自下而上

css動畫遮罩效果自上而下與自下而上

基本結構

<div class="header">
		<div class="inner">
			 <a href="#">標題欄</a>
		</div>
	</div>

1、自上而下

scss:被註釋的部分是另外一種自下而上的情況。

 .header {
  	width: 100%;
  	height: 150px;
  	background-image: url(../../assets/1.jpg);
  	background-repeat: no-repeat;
  	background-size: 100% 150px;
  	/*display: flex;
	align-items: flex-end;*/
  	img{
  		width: 100%;
  		height: 150px;
  	}
  	.inner {
  		/*display: none;*/
  		visibility: hidden;
  		/*width: 100%;
  		height: 28px;
  		transition: height 2s;*/
  	}
  	&:hover{   				
  		.inner { 
  			/*visibility:visible;
  			background-color:rgba(0,0,0,.6);
  			height: 100%;*/
  			width:100%;
  			height: 150px;
  			background-color:rgba(0,0,0,.6); 
  			display: block;
  			color: white;
  			position:relative;
            animation:mymove 3s infinite;
            animation-fill-mode: forwards;
            animation-iteration-count:1;
            a{
            	  color: white;
            	  &:hover{
            	  	color: yellow;
            	  }
            }
            	  
  		}
  		@keyframes mymove {
	       from{height: 0px;}
	       to{height: 150px;}	  
		}
		@-moz-keyframes mymove {
		   from{height: 0px;}
	       to{height: 150px;}	  
		}
		@-webkit-keyframes mymove {
		   from{height: 0px;}
	       to{height: 150px;}
		}
		@-o-keyframes mymove {
		   from{height: 0px;}
	       to{height: 150px;}
		}
  	}
  	 	
  }

2、自下而上

主要是利用父容器的display:flex;與子容器設定初始高度,然後通過動畫實現自下而上的效果,簡化後的程式碼是:

.header {
  	width: 100%;
  	height: 150px;
  	background-image: url(../../assets/1.jpg);
  	background-repeat: no-repeat;
  	background-size: 100% 150px;
  	display: flex;
	align-items: flex-end;
  	img{
  		width: 100%;
  		height: 150px;
  	}
  	.inner {
  		visibility: hidden;
  		width: 100%;
  		height: 28px;
  		transition: height 2s;
  	}
  	&:hover{   				
  		.inner { 
  			visibility:visible;
  			background-color:rgba(0,0,0,.6);
  			height: 100%;
            a{
            	  color: white;
            	  &:hover{
            	  	color: yellow;
            	  }
            }            	  
  		}  		
  	} 	 	
  }