文章目录
基础学习第九篇 ,这里是我的html+css专栏
图标变模糊 – CSS3滤镜filter
filter CSS属性将模糊或颜色偏移等图形效果应用于元素
filter: 函数(); --> 例如: filter: blur(5px); --> blur模糊处理 数值越大越模糊
例子:
img {
/* blur是一个函数 小括号里面数值越大,图片越模糊 注意数值要加px单位 */
filter: blur(15px);
}
img:hover {
filter: blur(0);
}
<img src="images/pink.jpg" alt="">
计算盒子宽度 – calc 函数
calc() 此CSS函数让你在声明CSS属性值时执行一些计算
width: calc(100% - 80px);
括号里面可以使用 + - * / 来进行计算
例子:
.father {
width: 300px;
height: 200px;
background-color: pink;
}
.son {
/* width: 150px; */
/* width: calc(150px + 30px); */
width: calc(100% - 30px);
height: 30px;
background-color: skyblue;
}
/* 需求我们的子盒子宽度永远比父盒子小30像素 */
<div class="father">
<div class="son"></div>
</div>
CSS3 过渡(★★★)
过渡动画: 是从一个状态 渐渐的过渡到另外一个状态
可以让我们页面更好看,更动感十足,虽然 低版本浏览器不支持(ie9以下版本) 但是不会影响页面布局。
我们现在经常和 :hover 一起 搭配使用。
transition: 要过渡的属性 花费时间 运动曲线 何时开始;
- 属性 : 想要变化的 css 属性, 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡, 写一个all 就可以
- 花费时间: 单位是 秒(必须写单位) 比如 0.5s
- 运动曲线: 默认是 ease (可以省略)
- 何时开始:单位是 秒(必须写单位)可以设置延迟触发时间 默认是 0s (可以省略)
- 后面两个属性可以省略
- 记住过渡的使用口诀: 谁做过渡给谁加
练习1:
div {
width: 200px;
height: 100px;
background-color: pink;
/* 效果2 transition: 变化的属性 花费时间 运动曲线 何时开始; */
transition: width .5s ease 0s, height .5s ease 1s;
/* 如果想要写多个属性,利用逗号进行分割 */
/* transition: width .5s, height .5s; */
/*效果1 如果想要多个属性都变化,属性写all就可以了 */
transition: all 0.5s;
}
div:hover {
width: 400px;
height: 200px;
background-color: skyblue;
}
<div></div>
过渡效果1
过渡效果2
练习2:进度条
.bar {
width: 150px;
height: 15px;
border: 1px solid red;
border-radius: 7px;
padding: 1px;
}
.bar_in {
width: 50%;
height: 100%;
background-color: red;
/* 谁做过渡给谁加 */
transition: all .7s;
}
.bar:hover .bar_in {
width: 100%;
}
<div class="bar">
<div class="bar_in"></div>
</div>
2D转换
移动translate
div {
/* x就是x轴上移动位置 y 就是y轴上移动位置 中间用逗号分隔*/
transform: translate(x, y);
transform: translate(100px, 100px);
/* 1. 如果只移动x坐标 */
transform: translate(100px, 0);
transform: translateX(100px);
/* 2. 如果只移动y坐标 */
transform: translate(0, 100px);
transform: translateY(100px);
/* 3.百分比是相对于自身宽高*/
transform: translate(50%,50%);
}
-
对行内标签没有效果
-
百分比是相对于自身宽高
-
扩展:让盒子水平垂直居中(定位+移动)
.father { position: relative; width: 500px; height: 500px; background-color: pink; } .son { position: absolute; top: 50%; left: 50%; width: 200px; height: 200px; background-color: purple; /* 旧方法,但是如果要换盒子就要对应去改 */ /* margin-top: -100px; margin-left: -100px; */ /*新方法: 盒子往上走自己高度的一半 */ transform: translate(-50%, -50%); }
-
-
移动类似定位不影响其他盒子的位置
旋转rotate
/* 正为顺时针,负为逆时针 */
transform: rotate(360deg);
设置旋转点
/* 1.可以跟方位名词 */
transform-origin: left bottom;
/* 2. 默认的是 50% 50% 等价于 center center */
/* 3. 可以是px 像素 */
transform-origin: 50px 50px;
-
默认旋转的中心点是元素的中心点
-
案例:三角
div { position: relative; width: 249px; height: 35px; border: 1px solid #000; } div::after { /* 在盒子后面画出三角 */ content: ""; position: absolute; top: 8px; right: 15px; width: 10px; height: 10px; border-right: 1px solid #000; border-bottom: 1px solid #000; transform: rotate(45deg); }
缩放scale
div:hover {
/* scale :不会影响其他的盒子*/
width: 300px;
height: 300px;
transform: scale(2);
transform: scale(2, 1);
transform: scale(0.5);
/* 而且可以设置缩放的中心点,默认盒子中心*/
transform-origin: left bottom;
}
20-分页按钮案例:
-
合写
/* 我们同时有位移和其他属性,我们需要把位移放到最前面 */ transform: translate(150px, 50px) rotate(180deg) scale(2);
动画
基本使用
步骤:
- 先定义动画
- 再调用动画
/*1.先定义动画 */
@keyframes move {
/* 开始状态 */
0% {
transform: translateX(0px);
}
/* 结束状态 */
100% {
transform: translateX(1000px);
}
}
div {
/* 2. 再调用动画 */
animation-name: move;
/* 持续时间 */
animation-duration: 2s;
}
动画序列
/* from to 等价于 0% 和 100%*/
@keyframes move {
from {
transform: translate(0, 0);
}
to {
transform: translate(1000px, 0);
}
}
/* 动画序列 */
/* 1. 可以做多个状态的变化 keyframe 关键帧 */
/* 2. 里面的百分比要是整数 */
/* 3. 里面的百分比就是 总的时间(我们这个案例10s)的划分 25% * 10 = 2.5s */
@keyframes move {
0% {
transform: translate(0, 0);
}
25% {
transform: translate(1000px, 0)
}
50% {
transform: translate(1000px, 500px);
}
75% {
transform: translate(0, 500px);
}
100% {
transform: translate(0, 0);
}
}
div {
animation-name: move;
animation-duration: 10s;
}
常见属性
@keyframes move {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(1000px, 0);
}
}
div {
width: 100px;
height: 100px;
background-color: pink;
/* 动画名称 */
animation-name: move;
/* 持续时间 */
animation-duration: 2s;
/* 运动曲线 */
animation-timing-function: ease;
/* 何时开始 */
animation-delay: 1s;
/* 重复次数 iteration-count(重复的次数) infinite(无限) */
animation-iteration-count: infinite;
/* 是否反方向播放 normal/alternate(反方向) */
animation-direction: alternate;
/* 动画结束后的状态 backwards(回到起始状态)/forwards(停留在结束状态) */
animation-fill-mode: forwards;
}
div:hover {
/* 鼠标经过div 让这个div 停止动画,鼠标离开就继续动画 */
animation-play-state: paused;
}
简写
/* animation: name duration timing-function delay iteration-count direction fill-mode; */
animation: move 2s linear 0s 1 alternate forwards;
/* 前面2个属性 name duration 一定要写 */
速度曲线之 曲线步长Step()
animation-timing-function
打字机效果
div {
overflow: hidden;
font-size: 20px;
width: 0;
height: 30px;
background-color: pink;
/* 让我们的文字强制一行内显示 */
white-space: nowrap;
/* steps 就是分几步来完成我们的动画 有了steps 就不要在写 ease 或者linear 了 */
animation: w 4s steps(10) forwards;
}
@keyframes w {
0% {
width: 0;
}
100% {
width: 200px;
}
}
<div>世纪佳缘我在这里等你</div>
效果
奔跑的熊
div {
position: absolute;
width: 200px;
height: 100px;
background: url(media/bear.png) no-repeat;
/* 我们元素可以添加多个动画, 用逗号分隔 */
animation: bear_pos .4s steps(8) infinite, img_mov 3s forwards;
}
@keyframes bear_pos {
0% {
background-position: 0 0;
}
100% {
background-position: -1600px 0;
}
}
@keyframes img_move {
0% {
left: 0;
}
100% {
left: 50%;
/* margin-left: -100px; */
transform: translateX(-50%);
}
}
图片:
效果:
3D转换
三维坐标系
3D移动translate3d
在2D移动的基础上加了一个z轴方向移动
translateZ(100px);
/*3D移动有简写的方法 | xyz是不能省略的,如果没有就写0*/
transform: translate3d(x,y,z);
透视perspective
- 透视也称视距:眼睛到屏幕的距离
- 越近成像越大,越远成像越小
3D旋转rotate3d
rotateX()
body {
/* 透视 */
perspective: 300px;
}
img {
display: block;
/* 过渡 */
transition: all 1s;
}
img:hover {
transform: rotateX(45deg);
}
效果:
如果分不清往哪里转:
rotateY()
img:hover {
transform: rotateY(45deg);
}
合写
img:hover {
/* 沿对角线旋转 */
transform: rotate3d(1, 1, 0, 45deg);
}
3D呈现transform-style
- 控制子元素是否开启三维立体环境
- flat :默认不开启
- preserve-3d 子元素开启
- 代码写在父级
案例1:
css
body {
perspective: 500px;
}
.box {
position: relative;
width: 200px;
height: 200px;
margin: 100px auto;
transition: all 2s;
/* 让子元素保持3d立体空间环境 */
transform-style: preserve-3d;
}
.box:hover {
transform: rotateY(60deg);
}
.box div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: pink;
}
.box div:last-child {
background-color: purple;
transform: rotateX(60deg);
}
html
<div class="box">
<div></div>
<div></div>
</div>
案例2:
css
body {
perspective: 400px;
}
.box {
position: relative;
width: 300px;
height: 300px;
margin: 100px auto;
transition: all .4s;
/* 让背面的紫色盒子保留立体空间 给父级添加的 */
transform-style: preserve-3d;
}
.box:hover {
transform: rotateY(180deg);
}
.front,
.back {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 50%;
font-size: 30px;
color: #fff;
text-align: center;
line-height: 300px;
}
.front {
background-color: pink;
z-index: 1;
/* 2022 */
transform: translateZ(1px);
}
.back {
background-color: purple;
/* 像手机一样 背靠背 旋转 */
transform: rotateY(180deg);
}
html
<div class="box">
<div class="front">黑马程序员</div>
<div class="back">pink老师这里等你</div>
</div>