项目准备
素材准备
本次项目无需素材准备
技术准备
- 使用到了第一次到第三次周末班的技术点,变换transform,使用到了动画及阶段型动画
- 使用到了“子绝父相”
- 动画的状态的改变以及伪类
:hover
的应用
开发工具的准备
本次项目,我们使用的是HbuilderX
来完成的
创建项目
前端项目的创建非常简单
- 直接在桌面上创建一个文件夹,命名为”bgg_dfc”
- 将刚刚创建好的文件夹插入到
HbuilderX
的开发工具里面 - 在刚刚创建的项目里面,点击鼠标右键 ,选择新建一个
html
文件,我们命名为01.html
最终结果如下
上面的代码,我们说明一下
<head></head>
代表的是浏览器的头部信息
<title></title>
代表网页的标题
<body></body>
代表浏览器的网页的主体部分
大风车案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>标哥哥的大风车</title>
<!-- 样式 -->
<style type="text/css">
.big-box{
width: 450px;
height: 450px;
position: relative;
background-color: yellow;
/* 设置圆角边框 ,变成一个圆 */
border-radius: 225px;
}
/* .box 相当于class="box" */
.box{
width: 400px;
height: 400px;
position: absolute;
right: 0px;
bottom: 0px;
background-color: white;
border-radius: 200px;
animation-name: box_ani; /*动画的名称*/
animation-duration: 5s; /*动画播放一次的时间*/
animation-iteration-count: infinite; /*动画执行无穷次*/
animation-timing-function: linear; /*动画匀速执行*/
}
/* 分组 */
.one,.two,.three,.four{
width: 200px;
height: 100px;
position: absolute;
left: 50%;
top: 50%;
transform-origin: left top;
border-bottom-left-radius: 100px;
border-bottom-right-radius: 100px;
}
.one{
background-color: deeppink;
}
.two{
background-color: blue;
transform: rotateZ(90deg);
}
.three{
background-color: aqua;
transform: rotateZ(180deg);
}
.four{
background-color: lightseagreen;
transform: rotateZ(270deg);
}
/* 定义动画使用 */
@keyframes box_ani{
0%{
transform: rotateZ(0deg);
}
100%{
transform: rotateZ(360deg);
}
}
</style>
</head>
<body>
<div class="big-box">
<div class="box">
<div class="one"></div>
<div class="two"></div>
<div class="three"></div>
<div class="four"></div>
</div>
</div>
</body>
</html>
上面是最基本的大风车案例,我们现在希望做一次扩展
- 风车默认是没有转的,我的鼠标如果放上去以后,才开始转
- 鼠标如果在购车上面按住鼠标不松开的时候,风车转的速度要快一些
要完成上面的点有2人个问题需要克服
- 鼠标放在某一个元素上面的效果我们应该怎么办
- 鼠标按下去的效果我们应该怎么办
要实现上面的东西,我们就要接解新的知识点,这个知识是属于CSS的伪类环节
/* 鼠标放在box上面以后,它要开始动画 */
.box:hover{
animation-play-state: running;
}
/* 鼠标按下去以后,播放速度要加快 */
.box:active{
animation-duration: 1s;
}
芝麻开门案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>开门大吉</title>
<style>
.door {
width: 500px;
height: 700px;
border: 5px solid black;
font-size: 0px;
perspective: 700px;
display: block;
/* 鼠标光标变成手的形状 */
cursor: pointer;
}
.left-door {
width: 250px;
height: 700px;
background-color: deeppink;
/* 转为行内块级元素 */
display: inline-block;
transform-origin: left;
/* 添加一个过渡 */
transition: all 1s linear;
}
/* 右边的门设置为蓝色 */
.right-door {
width: 250px;
height: 700px;
background-color: lightseagreen;
display: inline-block;
transform-origin: right;
transition: all 1s linear;
}
/* #aaa代表的就是id="aaa"
+代表兄弟元素,>代表子元素
*/
#aaa:checked+.door>.left-door{
transform: rotateY(30deg);
}
#aaa:checked+.door>.right-door{
transform: rotateY(-30deg);
}
#aaa{
/* 隐藏某一个元素 */
display: none;
}
</style>
</head>
<body>
<input type="checkbox" id="aaa">
<label class="door" for="aaa">
<div class="left-door"></div>
<div class="right-door"></div>
</label>
</body>
</html>
总结
css样式总结
class
代表在CSS里面使用.
来表示 ,如.box
就相当于class="box"
width
与height
分别用于设置宽度与高度border
是用于设置边框的,border:2px solid black
代表的是2个像素的实线的黑色边框- 变换使用
transorm
,rotate
是旋转 transform-origin
设置变换的起点位置border-radius
用于设置圆角边框border-bottom-left-radius
左下角的圆角边框:hover
代表鼠标放上去以后的特殊状态效果:active
代表鼠标按下以后的特殊状态效果animation-play-state
代表动画播放的状态,running
代表正常播放,paused
代表动画暂停transition
过渡,指元素的样式 由一个状态变成另一个状态的过渡效果【与动画很相似】display:none
隐藏元素:checked
复选框选中以后的状态cursor:pointer
鼠标光标变成手的形状
桃心案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>桃心</title>
<style type="text/css">
.box{
width: 480px;
height: 400px;
border: 2px solid black;
font-size: 0px;
}
/* 左边的心宽度240,高度400,背景blue */
/* 右边的心宽度240,高度400,背景red */
/* 左右两个盒子排在一行 */
.left{
width: 240px;
height: 400px;
background-color: red;
display: inline-block;
border-top-left-radius: 120px;
border-top-right-radius: 120px;
/* 设置变化的起点 */
transform-origin: right bottom;
transform: rotateZ(45deg);
}
.right{
width: 240px;
height: 400px;
background-color: red;
display: inline-block;
border-top-left-radius: 120px;
border-top-right-radius: 120px;
/* 设置变化的起点 */
transform-origin: left bottom;
transform: rotateZ(-45deg);
}
</style>
</head>
<body>
<div class="box">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
概念
子绝父相:当一个元素如果要以另一个元素为标准进行位置设置的时候,最好的办法就是“子绝父相”
子绝父相就是子级元素使用绝对定位(
position:absolute
),父级元素使用相对定位(position:relative
)分组选择器:当几个元素的样式相同的时候,我们可以使用分组选择器来简化我们的代码
.one,.two,.three,.four{ /*代码*/ }
动画的定义我们仍然使用
@keyframes
元素如果想排在一行,可以把元素转换为行内块级元素
display:inline-block
如果转换元素以后中间的缝隙,则在父级元素上面添加
font-size:0px
选择器当中,
.
代表的是class,#
代表的是id#aaa{ } .box{ }
教程来源:软帝标哥