哈喽,稀土掘金的小伙伴们!我是一名热爱计算机的大学生,每天都在前端的世界里探索各种好玩的东西。今天就来和大家分享一下我在学习 CSS 动画时的收获,咱们一起揭开小球亲吻特效的神秘面纱😎。
一、初窥门径:HTML 搭建舞台 🎭
HTML 就像是舞台的搭建者,为我们的动画提供了基础结构。在 1index.html
文件里,定义了一个容器 <div class='container'>
,就像一个大舞台,两个小球 <div id='l-ball' class='ball'>
和 <div id='r-ball' class='ball'>
作为主角将在这个舞台上表演。每个小球还有自己的五官,比如眼睛 <div class='eye'>
、嘴巴 <div class='mouth'>
等,是不是感觉很有趣😜。
// ... existing code ...
<body>
<div class='container'>
<div id='l-ball' class='ball'>
<div class='face face-l'>
<div class='eye eye-l'></div>
<div class='eye eye-r'></div>
<div class='mouth'></div>
</div>
<div class="shadow"></div>
</div>
<div id='r-ball' class='ball'>
<div class='face face-r'>
<div class='eye eye-l eye-r-p'></div>
<div class='eye eye-r eye-r-p'></div>
<div class='mouth mouth-r'></div>
<div class='kiss-m'>
<div class='kiss'></div>
<div class='kiss'></div>
</div>
</div>
<div class="shadow"></div>
</div>
</div>
</body>
// ... existing code ...
二、魔法时刻:CSS 赋予生命 🪄
如果说 HTML 是搭建舞台的,那 CSS 就是给演员化妆、让他们动起来的魔法师🧙。在 1index.html
的 <style>
标签里,CSS 对小球进行了各种样式设置,让它们变得圆滚滚,还添加了阴影效果,更有立体感。
1. 小球的基本样式
// ... existing code ...
.ball {
border: 8px solid;
width: 100px;
height: 100px;
border-radius: 50%;
display: inline-block;
vertical-align: top;
position: relative;
transition: transform 0.2s ease-out;
}
// ... existing code ...
2. 神奇的动画效果
通过 @keyframes
规则,CSS 为小球添加了各种动画,比如 kiss
、kiss-m
等,让小球能够做出亲吻的动作,还能让亲吻时的特效适时出现和消失。
// ... existing code ...
@keyframes kiss {
0% {
transform: translate(0px) scale(1, 1);
}
40% {
transform: translate(0px) scale(1, 1);
}
50% {
transform: translate(30px) rotate(15deg) scale(0.95, 1.05);
}
60% {
transform: translate(-33px) scale(1.05, 0.95);
}
67% {
transform: translate(-33px) scale(1, 1);
}
77% {
transform: translate(0px) scale(1, 1);
}
}
// ... existing code ...
三、知识宝库:css 中的秘籍 📖
css中有许多秘籍。比如 HTML 结构的快捷输入方式,像 div#l-ball.ball
这种 Emmet 语法,能让我们快速写出 HTML 代码。还有 CSS 选择器的知识,像 >
子元素选择器、+
兄弟元素选择器,这些都是我们在编写 CSS 时的得力助手👍。
3.1 Emmet 语法提效
在构建复杂页面之前,高效的代码编写技巧可以极大提升我们的开发效率。Emmet 语法是前端开发者必备的"神器",它通过简洁的表达式快速生成 HTML 结构。
div#l-ball.ball
上面这行简单的 Emmet 语法会立即展开为:
<div id="l-ball" class="ball"></div>
实际开发中,我们可以使用更复杂的组合:
.container>#l-ball.ball + #r-ball.ball
这会生成一个包含两个球体元素的容器结构:
container">
<div id="l-ball" class="ball"></div>
<div id="r-ball" class="ball"></div>
</div>
💡 开发技巧: 在日常开发中,掌握 Emmet 语法可以减少 80% 的重复代码输入,尤其在编写大量重复结构时效果显著。VSCode 中可通过 Tab 键展开 Emmet 表达式。
3.2 选择器进阶知识
1. 通用选择器
通用选择器 *
能够选中页面里的所有元素。在某些场景下,可用于统一设置样式,例如去除所有元素的默认外边距和内边距。
/* ... existing code ... */
/* 去除所有元素的默认外边距和内边距 */
* {
margin: 0;
padding: 0;
}
/* ... existing code ... */
2. 属性选择器
属性选择器能够依据元素的属性和属性值来选择元素。在小球动画项目中,要是给元素添加了自定义属性,就可以用属性选择器来设置样式。
/* ... existing code ... */
/* 选择所有具有 data-role 属性的元素 */
[data-role] {
border: 2px dashed red;
}
/* 选择 data-role 属性值为 "face" 的元素 */
[data-role="face"] {
background-color: lightyellow;
}
/* ... existing code ... */
3. 伪类选择器 - :nth-of-type
:nth-of-type
伪类选择器能够选中父元素下特定类型的第 n
个子元素。在小球动画里,若有多个相同类型的元素,可使用该选择器单独设置样式。
/* ... existing code ... */
/* 选择 container 下的第一个 ball 元素 */
.container .ball:nth-of-type(1) {
border-color: blue;
}
/* 选择 container 下的第二个 ball 元素 */
.container .ball:nth-of-type(2) {
border-color: green;
}
/* ... existing code ... */
4. 伪类选择器 - :not
:not
伪类选择器能够选中不满足指定条件的元素。在小球动画里,可用于排除某些元素,然后设置样式。
/* ... existing code ... */
/* 选择不是 eye-r-p 类的 eye 元素 */
.eye:not(.eye-r-p) {
border-top: 2px solid gray;
}
/* ... existing code ... */
5. 伪元素选择器 - ::selection
::selection
伪元素选择器能够选中用户选中的文本区域。在小球动画页面里,可自定义选中文本的样式。
/* ... existing code ... */
/* 自定义选中文本的样式 */
::selection {
background-color: pink;
color: white;
}
/* ... existing code ... */
这些额外的 CSS 选择器能够让你更精准地控制页面元素的样式,从而增强小球动画页面的视觉效果和交互性。
四、总结与感悟 🤔
通过这两个文件,我深刻体会到了 HTML 和 CSS 的强大。HTML 负责结构,CSS 负责样式和动画,两者结合就能创造出各种炫酷的效果。在学习前端的路上,每一次实践都是一次成长,希望大家也能和我一样,在代码的世界里找到属于自己的乐趣🎉。
好啦,今天的分享就到这里啦,如果你也对前端动画感兴趣,不妨自己动手试试,说不定能创造出更有趣的特效哦😘。
希望这篇文章能帮助大家更好地理解前端动画,也期待大家在评论区分享自己的学习心得和作品🥰。