css实现动态效果
css实现动态效果
个人头像悬停特效
效果图:
代码示例:
1 |
|
文字遮罩动态效果
样式一:
示例代码:
1 |
|
样式二:
1 |
|
列表目录悬停特效
1 |
|
卡片悬停效果
1 |
|
波浪效果
1 |
|
实现波浪背景动态无限次循环播放(连续性)
- 图片:左边的图像与右边的图像是完全重合(高度一致)
- HTML页面:使用background-image属性引入波浪图片
- 将背景图像显示成水平方向两个完全重复的效果
- 将引入图片的div元素的宽度设置为父级容器的200%
- 通过background-size属性设置为背景图像水平方向的值为50%
- 设置动画执行的关键帧时,将100%时的关键帧设置为50%.
- 将背景图像显示成水平方向两个完全重复的效果
CSS3渐变背景
1 |
|
星级评价效果
1 |
|
代码二
1 |
|
音频显示效果
1 |
|
小米首页轮播图(自动轮播)
实现关键
设置动画关键帧包含:
- 淡入效果 0%~2%
- 停留效果 2%~20%
- 淡出效果 20%~22%
- 淡入时的层级要高于淡出时的层级
1 |
|
小米轮播图(左右按钮)
实现思路
需要五组input+label标签(且input标签的type为radio)
1
2
3
4
5
6
7
8
9
10
11 /* 第一个需带有checked,因为默认情况下选择的是第一个,也就是默认情况下第一个被选中 */
<input type="radio" name="slide" id="slide1" checked />
<input type="radio" name="slide" id="slide2" />
<input type="radio" name="slide" id="slide3" />
<input type="radio" name="slide" id="slide4" />
<input type="radio" name="slide" id="slide5" />
<label for="slide1" class="slide slide1"></label>
<label for="slide2" class="slide slide2"></label>
<label for="slide3" class="slide slide3"></label>
<label for="slide4" class="slide slide4"></label>
<label for="slide5" class="slide slide5"></label>
label
标签的for
属性与input
标签的id
属性相对应。也就是说当点击第一个label
标签时,第一个input
被选中,点击第二个label
标签时,第二个input
被选中……在CSS上,默认图片透明度均为0,层级(
z-index
)默认也为0。利用伪类选择器(
:checked
)来判断哪张图片应该被显示简单来说就是当第一个
input
加入checked
属性时(被选中时),那么他的层级(z-index
)与透明度则变为1。其他也是同理,因为默认的层级与透明度都是0,所以当选择另外input时刚才那个就会回到默认状态左右按钮的实现
首先应该明确的是第几张图片出现时左右按钮应该指向哪一张图片。例如当显示第一张图片时左按钮应去向第五章,右按钮应去向第二张。
其次就是这些按钮应该随着不同图片的出现而变换,类似于一个按钮绑定一个图片。
图片 左按钮 右按钮 第一张图片 第五张 第二张 第二章图片 第一张 第三张 第三章图片 第二张 第四张 第四章图片 第三张 第五张 第五章图片 第四张 第一张 最后只需要用input是否被checked就可以判断哪一个label标签应该显示。
在线显示地址:https://antmoe.gitee.io/project/2020/03/17/index.html
由于演示图有点大,所以直接换成链接了。https://cdn.jsdelivr.net/gh/blogimg/HexoStaticFile1/imgbed/2020/03/17/20200317195705.gif
示例代码
1 |
|
轮播图的导航栏
导航栏基于上一个可以左右滑动的轮播图实现。实现方法很简单。
由于已经实现了可以切换图片的
label
标签,因此复制一个一模一样的即可。1
2
3
4
5
6
7<div class="nav">
<label for="slide1"></label>
<label for="slide2"></label>
<label for="slide3"></label>
<label for="slide4"></label>
<label for="slide5"></label>
</div>接下来需要做的就是继续将每一张图片与刚加入的
label
标签绑定1
2
3
4
5
6
7
8#slide1:checked~.nav label:nth-child(1),
#slide2:checked~.nav label:nth-child(2),
#slide3:checked~.nav label:nth-child(3),
#slide4:checked~.nav label:nth-child(4),
#slide5:checked~.nav label:nth-child(5) {
border-color: rgba(0, 0, 0, .4);
background: hsla(0, 0%, 100%, 1);
}这样基本上就可以了,至于显示位置及样式根据自己调整即可。
参考代码
1 |
|
百叶窗效果
在实现了上述轮播图后实现百叶窗效果是需要改造的。
首先是HTML结构,图片列表使用的是img标签,百叶窗实际上是将图片分割成不同的小块然后逐个切换。所以需要将HTML结构改造为一个div(作为每个小块的容器)嵌套若干个(这里用四个举例)div(作为图片展示)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32<div class="imgList">
<div class="img">
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
</div>
<div class="img">
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
</div>
<div class="img">
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
</div>
<div class="img">
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
</div>
<div class="img">
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
<div class="frag"></div>
</div>
</div>上述结构中,
img
作为每张图片的容器,frag
是实际上展示图片的容器。也就是每个frag
显示图片的四分之一(随窗口数而定)对于
img
与frag
两个class
的样式需要调整为1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16.container .imgList .img {
height: 100%;
width: 100%;
height: auto;
position: absolute;
left: 0;
top: 0;
}
.container .imgList .img .frag {
float: left;
height: 460px;
width: 25%;
background-size: 1226px 460px;
opacity: 0;
z-index: 0;
}frag
的宽度为容器的25%也就是四分之一,高度也是容器的高度。由于这个效果是基于每个小块的不同切换效果实现的,那么自然需要将背景图像的大小调整好也就是background-size
属性。设置每块容器(
img
)里每个小块(frag
)显示的图片1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19.container .imgList .img:nth-child(1) .frag {
background-image: url(https://ae01.alicdn.com/kf/U1a6b653720d845c682f97d2fcf75c22f6.png);
}
.container .imgList .img:nth-child(2) .frag {
background-image: url(https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/6bd4174b8c5aad67a64864a5716ad152.jpg);
}
.container .imgList .img:nth-child(3) .frag {
background-image: url(https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/e909ef0e50960f61a730380013bc960a.jpg);
}
.container .imgList .img:nth-child(4) .frag {
background-image: url(https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/755aca9487082e7698e16f17cfb70839.jpg);
}
.container .imgList .img:nth-child(5) .frag {
background-image: url(https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/e5b37cdb85b3b93b5938cc508a10c906.jpg);
}调整四小块中每一块显示的区域。
这一步很简单,如果不修改每一块的位置,那么四张图显示的都是一样的。而我们需要的是四小块拼成一个完整的。并且每一个都是有一个延迟的,所以同样需要为每一个小块设置延迟时间(
transition-delay
)。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19.container .imgList .img .frag:nth-child(2) {
background-position: -306.5px 0;
transition-delay: .2s;
}
.container .imgList .img .frag:nth-child(3) {
background-position: -613px 0;
transition-delay: .3s;
}
.container .imgList .img .frag:nth-child(4) {
background-position: -919.5px 0;
transition-delay: .4s;
}
.container .imgList .img .frag:nth-child(5) {
background-position: -1226px 0;
transition-delay: .5s;
}调整当按钮(
label
标签)点下去时改变的元素。1
2
3
4
5
6
7
8#slide1:checked~.imgList .img:nth-child(1) .frag,
#slide2:checked~.imgList .img:nth-child(2) .frag,
#slide3:checked~.imgList .img:nth-child(3) .frag,
#slide4:checked~.imgList .img:nth-child(4) .frag,
#slide5:checked~.imgList .img:nth-child(5) .frag {
opacity: 1;
z-index: 1;
}此时页面已经可以有基本效果了。接下来需要做的只是美化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#slide1:checked~.imgList .img:nth-child(1) .frag,
#slide2:checked~.imgList .img:nth-child(2) .frag,
#slide3:checked~.imgList .img:nth-child(3) .frag,
#slide4:checked~.imgList .img:nth-child(4) .frag,
#slide5:checked~.imgList .img:nth-child(5) .frag {
opacity: 1;
z-index: 1;
transform: rotateY(90deg) translateZ(180deg) scale(1.5);
filter: saturate(1) blur(0px) brightness(1) contrast(1);
}
.container .imgList .img .frag {
float: left;
height: 460px;
width: 25%;
background-size: 1226px 460px;
opacity: 0;
z-index: 0;
transform-origin: center right;
filter: saturate(0) blur(10px) brightness(.6) contrast(4);
transition: transform .6s, opacity .6s, filter .6s ease-out;
}
示例代码
1 |
|
下载按钮动态效果
分析
这个效果大概分成几个部分
- 静态按钮
- 点击后按钮宽度变小,然后成圆形
- 按钮变大变小
- 小白球转圈
- 回到圆中心位置,显示“√”
基于分析,静态效果很容易实现。
对于紫色的小球变大变小也很简单。
scale
即可如果使用了
translate
属性,需要将translate
属性写在scale之前。1
2
3@keyframes circle{
0%,15%,45%,75%{
transform:translate(-50%,-50%) scale(0.8) ;} 30%,60%,90%{ transform:translate(-50%,-50%) scale(1.2) ; } 100%{ transform: translate(-50%,-50%) scale(1) ; }
}
1 | 4. 小白球旋转 |
- 点击效果可以使用伪类
focus
模拟
完整代码
1 |
|