- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我想用纯 CSS 复制下面的 gif 动画,是否可行,如何实现?我也愿意接受其他合适的方法。
下面的片段是我目前所拥有的,它只是一张静态面孔。
body {
background: #fff;
margin: 50px;
}
.loader {
position: relative;
border-radius: 50%;
box-sizing: border-box;
width: 80px;
height: 80px;
background: linear-gradient(to bottom, #fff 50%, #51cf66 50%);
}
.loader:before {
content: "";
position: absolute;
left: 10px;
right: 10px;
top: 10px;
bottom: 10px;
border-radius: 50%;
background: #fff;
}
.dot {
position: absolute;
width: 10px;
height: 10px;
border-radius: 50%;
background: #51cf66;
}
.dot:first-child {
left: 10px;
top: 10px;
}
.dot:last-child {
right: 10px;
top: 10px;
}
<div class="loader">
<div class="dot"></div>
<div class="dot"></div>
</div>
最佳答案
2020 年更新
一个新的优化版本,代码更少,我将使微笑的边缘更逼真:
.smile {
margin: 30px;
width: 100px;
height: 100px;
border-radius: 50%;
background:
radial-gradient(circle closest-side,#42bd56 99%,transparent)
-35px 42px/calc(100% - 15px) 15px repeat-x,
linear-gradient(#fff,#fff) top/100% 50px no-repeat,
radial-gradient(farthest-side,transparent calc(99% - 15px),#42bd56 calc(100% - 15px));
position: relative;
}
.smile:before,
.smile:after{
content: "";
position: absolute;
width:100%;
top: calc(50% - 7px);
height: 15px;
background:radial-gradient(circle closest-side,#42bd56 99%,transparent) -7.5px 0/200% 100%;
transform:rotate(calc(var(--o,0deg) - 50deg));
}
.smile:after {
--o:-80deg;
}
.smile:hover {
animation: rotateS 1.2s linear;
}
.smile:hover:before,
.smile:hover:after{
animation: inherit;
animation-name:rotateE;
}
@keyframes rotateS {
50% {
transform: rotate(360deg);
background-size: calc(90% - 15px) 15px,100% 30px,auto;
background-position:-25px 22px,top,0 0;
}
100% {
transform: rotate(720deg);
}
}
@keyframes rotateE {
30%,70% {
transform:rotate(calc(var(--o,0deg) - 180deg));
}
}
Hover to animate
<div class="smile">
</div>
A Codepen使用代码演示
旧答案
这是解决方案,下面是一步一步的解释
.smile {
margin: 30px;
width: 100px;
height: 100px;
border-radius: 50%;
background:
radial-gradient(circle ,#42bd56 10%,transparent 11%) 43px 0px,
radial-gradient(circle ,#42bd56 10%,transparent 11%) -43px 0px,
radial-gradient(circle , #fff 35px, transparent 35px),
linear-gradient(to bottom, #fff 50%, transparent 50%),
#42bd56;
background-repeat:no-repeat;
position: relative;
}
.smile:before,.smile:after{
content: "";
position: absolute;
width: 100%;
top: 50%;
margin-top: -7px;
height: 15px;
background:
radial-gradient(circle,#42bd56 15%,transparent 16%) 43px 0px;
transform:rotate(-50deg);
}
.smile:after {
background:
radial-gradient(circle at center,#42bd56 15%,transparent 16%) -43px 0px;
transform:rotate(50deg);
}
.smile:hover {
animation: rotateS 1.5s linear;
}
.smile:hover::before {
animation: rotateL 1.5s linear;
}
.smile:hover::after {
animation: rotateR 1.5s linear;
}
@keyframes rotateS {
0% {
transform: rotate(0deg);
background-size: auto,auto,auto ,100% 100%, auto;
}
50% {
transform: rotate(360deg);
background-size: auto,auto,auto, 100% 50%, auto;
}
100% {
transform: rotate(720deg);
background-size: auto,auto,auto, 100% 100%, auto;
}
}
@keyframes rotateR {
0% {
transform:rotate(50deg);
}
30%,70% {
transform:rotate(-40deg);
}
100% {
transform:rotate(50deg);
}
}
@keyframes rotateL {
0% {
transform:rotate(-50deg);
}
30%,70% {
transform:rotate(-180deg);
}
100% {
transform:rotate(-50deg);
}
}
Hover to animate
<div class="smile">
</div>
在此解决方案中,我将仅使用一个 元素。我将依赖具有线性渐变和径向渐变的多个背景,并使用伪元素。
我将使用线性渐变和带背景颜色的径向渐变来创建主要形状,然后我将为圆 Angular 添加 2 个小的径向渐变:
.smile {
margin: 50px;
width: 100px;
height: 100px;
border-radius: 50%;
background:
radial-gradient(circle,#42bd56 10%,transparent 11%) 43px 0px,
radial-gradient(circle,#42bd56 10%,transparent 11%) -43px 0px,
radial-gradient(circle, #fff 35px, transparent 35px),
linear-gradient(to bottom, #fff 50%, transparent 50%),
#42bd56;
background-repeat:no-repeat;
position: relative;
}
<div class="smile">
</div>
现在要旋转微笑,我将使用旋转并更改线性渐变的大小。正如您在 GIF 中看到的那样,在旋转过程中曲线会增加,因此通过改变线性渐变的大小我会增加它。
正如你所注意到的,用于圆 Angular 的小径向渐变在增加后隐藏了,所以我们也可以考虑同时移动它们,但我不会这样做,以免代码变得复杂.
这是动画(悬停激活):
.smile {
margin: 50px;
width: 100px;
height: 100px;
border-radius: 50%;
background:
radial-gradient(circle at center,#42bd56 10%,transparent 11%) 43px 0px,
radial-gradient(circle at center,#42bd56 10%,transparent 11%) -43px 0px,
radial-gradient(circle at center, #fff 35px, transparent 35px),
linear-gradient(to bottom, #fff 50%, transparent 50%),
#42bd56;
background-repeat:no-repeat;
position: relative;
}
.smile:hover {
animation: rotateS 1.5s linear;
}
@keyframes rotateS {
0% {
transform: rotate(0deg);
background-size: auto,auto,auto ,100% 100%, auto;
}
50% {
transform: rotate(360deg);
background-size: auto,auto,auto, 100% 50%, auto;
}
100% {
transform: rotate(720deg);
background-size: auto,auto,auto, 100% 100%, auto;
}
}
<div class="smile">
</div>
对于眼睛,我将使用伪元素和径向渐变来创建圆圈。我不会简单地创建一个带有 border-radius 的圆,因为我还需要在与微笑相同的轴上旋转它们。
所以我的想法是让它们全宽,并使用径向渐变使圆圈位于最右/最左端。通过这样做,我可以轻松地通过旋转控制它们的位置,并确保它们保持在需要的位置,无论旋转程度如何。
.smile {
margin: 50px;
width: 100px;
height: 100px;
border-radius: 50%;
background:
radial-gradient(circle at center,#42bd56 10%,transparent 11%) 43px 0px,
radial-gradient(circle at center,#42bd56 10%,transparent 11%) -43px 0px,
radial-gradient(circle at center, #fff 35px, transparent 35px) ,
linear-gradient(to bottom, #fff 50%, transparent 50%),
#42bd56;
position: relative;
}
.smile:before,.smile:after{
content: "";
position: absolute;
width: 100%;
top: 50%;
margin-top: -7px;
height: 15px;
background: radial-gradient(circle,#42bd56 15%,transparent 16%) 43px 0px;
transform:rotate(-50deg);
}
.smile:after {
background:radial-gradient(circle,#42bd56 15%,transparent 16%) -43px 0px;
transform:rotate(50deg);
}
<div class="smile">
</div>
现在对于动画,我将保留第一个也会旋转眼睛的旋转,但我会为眼睛添加一些动画,使它们向相反的方向移动,并创造出微笑在它们上方的错觉。所以我将简单地为眼睛添加负旋转,使它们看起来移动得更慢,从而超越微笑并产生所需的效果:
这里是再次完整的动画:)
.smile {
margin: 50px;
width: 100px;
height: 100px;
border-radius: 50%;
background:
radial-gradient(circle at center,#42bd56 10%,transparent 11%) 43px 0px,
radial-gradient(circle at center,#42bd56 10%,transparent 11%) -43px 0px,
radial-gradient(circle at center, #fff 35px, transparent 35px) ,
linear-gradient(to bottom, #fff 50%, transparent 50%),
#42bd56;
background-repeat:no-repeat;
position: relative;
}
.smile:before,.smile:after{
content: "";
position: absolute;
width: 100%;
top: 50%;
margin-top: -7px;
height: 15px;
background: radial-gradient(circle,#42bd56 15%,transparent 16%) 43px 0px;
transform:rotate(-50deg);
}
.smile:after {
background:radial-gradient(circle,#42bd56 15%,transparent 16%) -43px 0px;
transform:rotate(50deg);
}
.smile:hover {
animation: rotateS 1.5s linear;
}
.smile:hover::before {
animation: rotateL 1.5s linear;
}
.smile:hover::after {
animation: rotateR 1.5s linear;
}
@keyframes rotateS {
0% {
transform: rotate(0deg);
background-size: auto,auto,auto ,100% 100%, auto;
}
50% {
transform: rotate(360deg);
background-size: auto,auto,auto, 100% 50%, auto;
}
100% {
transform: rotate(720deg);
background-size: auto,auto,auto, 100% 100%, auto;
}
}
@keyframes rotateR {
0% {
transform:rotate(50deg);
}
30%,70% {
transform:rotate(-40deg);
}
100% {
transform:rotate(50deg);
}
}
@keyframes rotateL {
0% {
transform:rotate(-50deg);
}
30%,70% {
transform:rotate(-180deg);
}
100% {
transform:rotate(-50deg);
}
}
<div class="smile">
</div>
在这个解决方案中,为简单起见,我使用了线性过渡,但它可以更改为任何 ease function具有与 GIF 类似的过渡
关于CSS旋转笑脸加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48232891/
我的用户发现的一个小不便是,如果他们使用诸如 >_> 之类的表情符号在括号的末尾(有点像这样:>_>)然后在处理过程中它会运行 htmlspecialchars() ,制作 >_>) -
我是 java 邮件轮询的新手,如果用户互相发送邮件,我会在其中创建一种对话应用程序,然后我会从他们的邮件中读取该邮件并将其作为对话中的新消息发布。 现在的问题是,如果有笑脸、内联或嵌入图像怎么办。例
假设我在网站上有一个文本字段。我如何以编程方式使用户能够编写字母“:)”,然后在编辑器中将这两个字符转换为实际的笑脸图片 (.gif)? 我有点卡住了,因为我不知道如何查看文本字段,以及如何在正确的位
我在清理推文时遇到问题。我有一个将推文保存在 csv 中的过程,然后我对数据进行 pandas 数据框。 x 是来 self 的数据框的一条推文: 'b\'RT @LBC:詹姆斯·奥布莱恩谈到杰弗里·
我正在为我在 Stylish 中使用的 facebook 制作样式表。但是我偶然发现了一些我觉得很困惑的东西。我正在尝试将聊天中的笑脸更改为我自己的笑脸图像。 Facebook smileys My
为什么 modernizer 会生成一张笑脸...... 它来自生成的内容 div。我似乎无法在新的空 HTML 文件上复制效果 更新 我觉得笑脸来自 @font-face {font-family:
这个问题在这里已经有了答案: Chrome is not displaying my emoji correctly (2 个回答) 9 个月前关闭。 我正在尝试为网站信使显示表情符号,除 Smili
如何发送在编辑文本中一起编写的文本和表情符号/图像(不是默认的表情符号、 Assets 文件夹中的图像)以发送消息和聊天,因为它出现在该编辑文本中。 p.s 我正在通过邮件或邮件正文发送这些图片。 我
为了重新发明每一个轮子,我们公司最近推出了我们自己定制的基于网络的电子邮件应用程序,我是该应用程序的主要设计者。 我注意到的一件事是,来自基于 MS Outlook 的电子邮件(从第三方发送)的笑脸显
我正在做一个简单的聊天应用程序,我想在编写消息时在 edittext 上显示笑脸。 我用它来识别哪些字符将通过 ImageSpan 由 Image 替换(仅当在 EditText 上插入笑脸字符时才会
我是一名优秀的程序员,十分优秀!