美文网首页
css实现元素hover状态元素底部上移半透明浮层

css实现元素hover状态元素底部上移半透明浮层

作者: liwuwuzhi | 来源:发表于2019-09-16 13:17 被阅读0次

起因:
偶尔翻了个网站,看到里面的小动效简单但又能使页面交互变得生动,便f12看了下动画实现代码。

图一



最终实现效果:

图二



具体实现代码:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
*{
    padding: 0;
    margin: 0
}
.content{
    width: 100%;
    font-size: 0; /*消除li inline-block 为行内元素后的默认间距*/
    list-style: none;
}
.content li {
    display: inline-block;
    width: 33.333%;
    vertical-align: top;
}
.box{
    height: auto;
    display: block;
    position: relative; /*关键点: 设置绝对定位*/
    overflow: hidden;
    text-decoration: none;
    transition: all 0.25s; 
    box-sizing: border-box; /*使盒子边距包含在盒子高度上*/
    padding-top: 40px; /*上下总共80边距*/
    padding-bottom: 40px;
}
.box .info{
   width: 70%;
   height: 123px;
   margin: 0 auto;
   transition: all 0.25s;

   color: #fff;
   font-size: 30px;
   text-align: center;
}
.box .text{
    display: block;
    position: absolute; /*关键点: 绝对定位于.box*/
    width: 100%;
    left: 0;
    right: 0;
    bottom: 0;
    height: auto;
    padding: 20px 0;
    background-color: rgba(255, 255, 255, 0.4);
    transition: all 0.25s;
    transform: translateY(100%);

    color: #fff;
    font-size: 17px;
    text-align: center;
    font-family: Arial;
}

.box:hover{
    padding-top: 10px; /*上下总共80边距*/
    padding-bottom: 70px;
}
.box:hover .text {
    transform: translateY(0%);
    transition: all 0.3s;
}

</style>

</head>
<body style="background: #fcc">
<ul class="content">
    <li class="content" style="background: #38beac">
     <a href="" class="box">
         <div class="info">文章</div>
         <span class="text">here you can check all what i had writed in public</span>
     </a>   
    </li>
    <li class="content" style="background: #000">
     <a href="" class="box">
         <div class="info">动态</div>
         <span class="text">you can know more about me in here</span>
     </a>   
    </li>
    <li class="content" style="background: #ff5a5f">
     <a href="" class="box">
         <div class="info">热门文章</div>
         <span class="text">the articals i gat likenum heighter</span>
     </a>   
    </li>
</ul>
</body>
</html>



解析:

  1. 关键点:
    设 .box 为绝对定位,而浮层 .text 为他的绝对定位,定位在 .box 盒子的底部。

  2. 动效1 — 浮层出现
    先来看下图,把 .box 盒子的 overflow:hidden 去掉之后的效果

图三

如果把 “浮层出现” 说出 “浮层上移” 有没有好理解些。

即浮层(.text) 原本就是有的,只是他的父级设置了超过限定高度的内容隐藏不见,然后 hover 时让浮层上移到父级可见区域内。这就做到了浮层的出现/隐藏。

看下浮层(.text 的样式)

.box .text{
    display: block;
    width: 100%;
    left: 0;
    right: 0;
    bottom: 0;
    height: auto;
    padding: 20px 0;
    transform: translateY(100%);
}

注意点:

.box .text{
    transform: translateY(100%);
}
.box:hover .text {
    transform: translateY(0%);
}

默认就让浮层 下移 了自身高度,hover 时再让下移值为 0 。而其父级的 overflow:hidden,浮层下移后超出了父级元素限定高度,自然是看不见了,下移值为 0 时,浮层出现,就是我们看到的 “上移” 效果

图二中 浮层的高度是不同的,如何做到刚好上移自身的全部高度呢?
来看 浮层设置的样式

.text 设为块级元素后,宽度为 100%,高度设为auto或者不不设置(即默认由内容撑开)。我们所看到的浮层高度实际是由 里面的文字和 padding: 20px 0 撑开的。
那么 hover 上移时,上移自身高度的100%是不是就可以了。
其实给 浮层 设置一个固定高度,hover 时上移这个高度值也是可以的,但这样就变得不灵活,里面内容需做一定的限制了。

  1. 动效2 — "文章/动态/热门" 文字上移

其实能看到文字上移,实际上是包含文字的父级盒子(.box)的padding值在改变。
例如,把 .box 的 padding-top 值,从 40px 变为 10px,这样的话文字是不是就上移了。

看看图二红框部分,.box 设置的 padding 的上下值共 80(40+40) ,而 hover 时,padding的上下值也共有80(10+70)。即上移幅度的大小可以自己控制,只要原本的总 padding 上下总和 等于 hover 时 padding 上下总和 就可以达到效果了。

这里要注意一点:
把 .box 盒子设置一个高度,让后盒子模型设置为 “box-sizeing” 模式(边距边框高度包含在盒子高度内),这样改变在后面改变padding 值时,只要改变的总值等于原本的总之,视觉上盒子高度就不会有改变。



后记:
如果看过 xxxx 这一篇的话,或许会问,这里的 .text 元素用伪类来代替可不可以,当然是可行,如果浮层内容就那么简单的话。但是实际业务中,浮层内容可能不止那么单调,可能是要嵌套好几个元素才能实现的,而这样元素又有各自的样式。其实这些都是灵活可变的,可据实际需求来选择。

动画关键点就那么几个:

  1. 父子元素控制好相对定位;
  2. hover 状态下需展示的元素先写好,只是默认状态下是隐藏的;
  3. 隐藏的方法可以是: 透明度的控制(opacity)、位移的控制(position、translate)、体积大小的控制(width、height、scale);
  4. hover 时把元素从 无 -> 有,即改变上面 “隐藏方法” 的值;
  5. 在改变这些值的同时用 transform 设置一个过度时间,使视觉上能看这个过度过程。过度时一般为 2.5s - 5s ,看具体过度距离来定。




\color{#ccc}{相关文章:}
纯css 实现tab导航栏下划线跟随动画
小程序 纯css 实现tab导航栏下划线跟随动画
css实现input聚焦底部边框动态
css小动画(大小变换 、水波纹、loading)

相关文章

  • css实现元素hover状态元素底部上移半透明浮层

    起因:偶尔翻了个网站,看到里面的小动效简单但又能使页面交互变得生动,便f12看了下动画实现代码。 最终实现效果: ...

  • hover的事件功能演示

    纯css实现事件绑定 默认情况下如果你想hover到一个元素上改变另外一个元素的CSS样式,被改变的元素必须是被h...

  • hover

    CSS的hover选择器 id .text{ class=’text’的元素的样式} id:hover .text...

  • CSS hover、focus 父对子、子对父、同级之间的控制

    父级hover控制子级样式 html代码 css代码 效果图 兄弟元素hover控制同级元素两种方式 用+号控制兄...

  • transition、transform、animation

    transition-过渡 元素属性的过渡效果,通常配合hover实现元素初始样式到hover中样式的过渡,语法如...

  • css和js控制的二级菜单区别

    css hover控制的二级菜单是一个闪现的过程,并且,hover只能控制它的子元素

  • ::before和::after伪元素的用法

    css3为了区分伪类和伪元素,伪元素采用双冒号写法。常见伪类——:hover,:link,:active,:tar...

  • 12、切角效果

    使用渐变背景可以实现元素的切角效果。 实现底部两个切角时,需要使用两层渐变,再把两层渐变的大小分别设置为整个元素的...

  • html元素全屏

    html实现元素全屏的时候,会在该元素上加上如下css,该css无法被覆盖和修改。 我们可以通过对元素通过调用re...

  • 浮动元素的值

    float:left 元素向左浮动 效果图 源代码 css html float:right 元素向右浮...

网友评论

      本文标题:css实现元素hover状态元素底部上移半透明浮层

      本文链接:https://www.haomeiwen.com/subject/ojrgyctx.html