遥领先~
可以点击查看运行效果,虽然适配了手机屏幕,但是动画效果还是火狐浏览器最流畅
最近在看到一位大佬用CSS写了鸿蒙OS的开机动画,不过只是字母O的出场特效,看完觉得挺有意思,就想着能不能把整个动画效果给实现出来,说干就干,也不管能不能实现,拿起键盘就是一顿敲……
当然了,开始敲之前肯定是先在网上搜一波,看有没有现成的,如果有人已经写了并且还原度很高,那我直接copy过来看一下不就得了, 还敲个锤子……
然后我网上搜到的答案只有这两个:
最后就是不想搞这么麻烦,只想用css一把梭,能用css实现的动效,我就不想用js……
仔细看了好几遍鸿蒙OS的开机动画,大致分成以下几个阶段:
首先需要考虑的一个问题是兼容,当然这里说的不是兼容IE……只是需要简单兼容一下不同屏幕大小的显示,确保在PC和手机上能正常显示
简单用媒体查询rem布局写了一下不同分辨率屏幕下的显示大小,主要为了自己方便计算,这里贴一下代码,不做太多解释了,不熟悉的可以去了解一下rem布局的原理
html {
font-size: 10px;
}
@media screen and (max-width: 767px) {
html {
font-size: 6px;
}
}
@media screen and (min-width: 768px) and (max-width: 1023px) {
html {
font-size: 8px;
}
}
@media screen and (min-width: 1024px) and (max-width: 1199px) {
html {
font-size: 10px;
}
}
@media screen and (min-width: 1200px) {
html {
font-size: 12px;
}
}
字母O的睁眼动画就不做解释了,直接去看原文,我在此基础上做了修改
html结构如下,做了一些修改
<div class="container">
<span class="delay">Harmony</span>
<div class="letter">
<ul class="ul">
<li class="harmony"></li>
</ul>
<ul class="ul">
<li class="harmony"></li>
</ul>
<svg>
<filter id="blur">
<feGaussianBlur in="SourceGraphic" stdDeviation="0 6" />
</filter>
</svg>
</div>
<span class="delay">S</span>
</div>
除了O之外其他字母显现这个很容易,用opacity就可以实现,等2秒是让字母O动画结束后执行,加这个动画的目的主要是先让字母O执行完动画,配合聚光灯效果
.delay{
opacity: 0;
animation: fade_in 2s 0.5s forwards;
}
@keyframes fade_in {
to {
opacity: 1;
}
}
整体缩小向左平移首先想到的是缩放然后向左平移,最后发现平移都没必要了,直接默认整体放大,原点设置在左侧中间位置,这样缩小动画的时候会整体以左边为基点恢复到原位
chrome在放大后动画感觉不是那么丝滑,没关系,不用在意这些细节……用火狐浏览器效果不错
scale(2.5)大概试了个值,这个时候字母O刚好在中间,差不多就行,不用在意这些细节……
cubic-bezier(0.1, 0.6, 0, 1)这个贝塞尔曲线是自己试出来的,感觉效果比较类似
.container {
position: relative;
display: flex;
justify-content: center;
font-size: 10rem;
color: white;
transform: scale(2.5);
transform-origin: 100% 50%;
animation: move 0.8s 1.5s cubic-bezier(0.1, 0.6, 0, 1) forwards;
}
@keyframes move {
to {
transform: none;
}
}
html结构新增<div class="shadow__spot"></div>与class="container"同级
这个其实我首先想到的就是类似聚光灯效果的蒙版扩散,所以在codepen上搜了一下,有个效果比较满意:XWdRwrm,但是这个css属性值不能使用动画过渡,想实现的话应该需要js,所以我又想到了用渐变色做蒙版好像也可以,但是渐变色的属性值也是不支持动画过渡的,我改成红色先看一下效果:
.shadow__spot {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: radial-gradient(circle, transparent 6rem, red 20rem);
animation: fade_spot 1s 1.5s forwards;
}
@keyframes fade_spot {
to {
background: radial-gradient(circle, transparent 30rem, red 60rem);
}
}
额……难道还得用js?
不,总有简单粗暴的方法,既然不支持过渡,那就直接放大,放大到全部显示为止……
.shadow__spot {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: radial-gradient(circle, transparent 6rem, red 20rem);
animation: fade_spot 1s 1.5s forwards;
}
@keyframes fade_spot {
to {
transform: translateX(10rem) scale(5);
}
}
效果好像还不错,把颜色改成黑色就大功告成了
注意这里加了个translateX(10rem)让蒙版向右偏移了一点,主要目的是为了尽量让焦点聚焦在字母O上,更接近官方动画效果,也是个大概值……
注意这里scale(5)放大5倍后是会出现滚动条的,所以在body上设置了overflow: hidden
这个比较简单就不多做解释了,直接flex布局,水平居中改变宽度就实现了
html结构中svg标签下方添加<div class="line"></div>
.letter .line{
position: absolute;
bottom: 0;
width: 100%;
height: 1rem;
display: flex;
justify-content: center;
}
.letter .line::after{
content: '';
width: 0%;
background-color: #146df7;
animation: line 0.5s 1.7s forwards;
}
@keyframes line {
to {
width: 60%;
}
}
最后看一下最终效果,火狐浏览器比较丝滑,我录个火狐的运行gif图
是不是有内味了?
其实最后还有个扫光效果,懒得搞了,也是比较简单,类似于骨架屏的扫光
篇文章主要给大家介绍一下使用html+css来模仿制作小米官方网站右侧的浮动框。我们来看下边的这个浮动框,位于小米官网的右侧并且随着页面的滚动,一直浮动在右侧不变;
我们通过上边的图片可以看出图片有5个单独的块元素组成,每个块元素鼠标经过都有一个单独的颜色变为黄色的效果,然后第一个块元素鼠标经过还会在左侧弹出更多内容。接下来我们简单说一下制作所用到的核心知识。
1、列表标签(dl dd dt)的使用,使用dl和dd来完成前边5个相同模块的制作
2、鼠标经过(hover)的使用,第一个元素鼠标经过左侧显示,这个跟我们之前将的导航菜单类似,还有鼠标经过文字以及图片改变颜色,这里可以使用hover之后改变背景图片来实现;
3、浮动(fixed)的使用,该内容一直浮动在网页右侧,跟随页面一起滚动,我们可以使用position:fixed来实现;
大体了解了我们所要使用的知识点之后,我们就可以开始根据图片上的内容来制作我们所需要的页面了,具体的实现代码就如下方所示:(首先写一个div盒子,看到列表形式,直接使用dl和dd,然后每个元素内部有文字和图片,使用h4标签和span标签来存放图片和文字内容,就这么搞定了哈哈),来看代码吧。
html代码挺简单的,我们啪啪敲完之后呢,剩下的就是书写css代码,来完成图片所示的布局样式的制作了。那么我们的css代码就如下图所示:(最外层box直接来个fixed和right、bottom配合,让其浮动在右侧,然后写写dl和dd的宽高,控制控制span的背景,随便写写hover事件,ok完成了)。不多说了,看代码吧。
好了,本篇文章就给大家说到这里,大家自己动手写一下看能不能写出一样的页面效果出来,也可以找一些类似的页面自己练习一下,有需要源码的可以直接私信【网站源码】即可。
每日金句:只有知道别人心里在想什么,你才能得到你想要的。喜欢我的文章的小伙伴记得关注一下哦,每天将为你更新最新知识。
家好,今天分享的是仿京东登录页面的简单实现方法(结构与样式),首先我们依旧是先看下效果图
下面是HTML结构
下面是CSS样式
PS:本人也是小白一枚,自学没几天,疏漏之处在所难免,请多担待!
*请认真填写需求信息,我们会在24小时内与您取得联系。