如何用CSS在图像上滑动div?

omu*_*non 6 html css transition slide

在我正在处理的网页上,我有一个包含图像和另一个div的div.内部div最初设置为

opacity: 0;
Run Code Online (Sandbox Code Playgroud)

所以它不可见.当悬停时,内部div应出现在我的图像上.我已经实现了这一点,但现在我想通过让'overlay'div(出现不透明度为0.5)在图像上逐渐向下滑动来进一步改进.我理论上可以用JavaScript做到这一点,但在这种情况下,它必须是纯CSS解决方案.到目前为止,我的解决方案只是使叠加div逐渐显示(淡入)但不会向下滑动,因为我从未单独使用CSS.

请参阅下图以进一步了解:

图片

HTML:

<div class="img"> <img class="squareImg" src="img1.jpg"/><div class="overlay"> tweet This <br> Buy This</div></div>
    <div class="img"> <img class="squareImg" src="img3.jpg"/></div>
    <div class="img"> </img></div>
Run Code Online (Sandbox Code Playgroud)

CSS

    .overlay{
    position: absolute;
    width: 200px;
    overflow-y: hidden;
    transition-property: all;
    transition-duration: .5s;
    transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
    height: 200px;
    background-color: red;
    border: 1px solid white;
    top: 10px;
    left: 10px;
    opacity: 0;
} .overlay:hover{
    cursor:pointer;
    opacity: 0.5;
    z-index: 1;
}


.img{
position: relative;
margin-bottom: 10px;
border: 2px solid yellow;
background-color: black;
width: 200px;
height: 200px;
left: 50%;
margin-left: -110px;
padding: 10px;
}
Run Code Online (Sandbox Code Playgroud)

mis*_*Sam 6

由于高度过渡,这是滑下来.

改进:

  • 而不是opacity使用background: rgba(255,0,0,0.5),以使覆盖的内容保持完全不透明.

  • 过渡属性已简化为 transition: all .5s

  • 外部边框使用box-shadow创建,现在使用border属性而不是padding创建黑色边框.

  • .overlay高度为0,悬停时高度为100%.它被拉伸翻过图像用的组合left: 0right: 0

  • 没有设置图像大小,<img>现在的大小控制边框和叠加的大小,允许不同的图像大小.

完整的例子

.img {
  position: relative;
  border: 10px solid black;
  box-shadow: 0 0 0 2px yellow;
  display: inline-block;
  vertical-align: top;
  cursor: pointer;
  margin: 10px;
}
.overlay {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  transition: all .5s;
  overflow: hidden;
  height: 0;
  background: rgba(255, 0, 0, 0);
}
.img:hover .overlay,
.overlay:hover {
  height: 100%;
  background: rgba(255, 0, 0, 0.5);
}
.img > img {
  display: block;/* Prevent inline gap under image*/
}
Run Code Online (Sandbox Code Playgroud)
<div class="img">
  <img src="http://www.placehold.it/200" />
  <div class="overlay">tweet This <br>Buy This</div>
</div>

<div class="img">
  <img src="http://www.placehold.it/300" />
  <div class="overlay">tweet This <br>Buy This</div>
</div>
Run Code Online (Sandbox Code Playgroud)


Cla*_*nga 0

如果需要向下滑动,应该使用@keyframes:

.overlay:hover{
-webkit-animation: slide 5s; /* Chrome, Safari, Opera */ 
animation: slide 5s;
}
@keyframes slide {
    from {height: 0px;}
    to {height: 200px;}
}
/* Chrome, Safari, Opera */
@-webkit-keyframes slide {
    from {height: 0px;}
    to {height: 200px;}
} 
Run Code Online (Sandbox Code Playgroud)