CSS3
transition: 要过度的属性 用时 运动曲线 何时开始 (连写方式)
transition:XXX XXX XXX XXX , XXX XXX XXX XXX; 如果需要多组属性用逗号隔开
属性名:transition
| **transition属性** | 描述 |
| ----------------- | ------------------- |
| transition-property| 规定应用过渡的 CSS 属性的名称。<br/>all 代表所有,省去写多组 |
| transition-duration | 定义过渡效果花费的时间。默认是 0。 |
| transition-timing-function | 规定过渡效果的时间曲线。默认是 “ease”。<br/>类似贝塞尔线的运动轨迹 |
| transition-delay | 规定过渡效果何时开始。默认是 0。<br/>鼠标移动到之后几秒触发 |
过渡属性,写在控件身上,并不是写在事件上
## CSS3 属性选择器
```
<style> // 通过属性选择某个选择器,节省class命名和调用
button[disabled] {
disabled: none;
}
</style> // 属性权重是:10;
<button disabled="disabled" > 按钮 </button>
```
这种可以筛选某些控件等于特定需要的值
```
<style> // 这种可以过滤属性等于某个特定的值,来实现
input[type="text"] {
color: pink;
}
</style> // 属性权重是:10;
<input type="text" name="" id="" value="文本框">
<input type="text" name="" id="" value="文本框">
<input type="search" name="" id="" value="搜索框">
<input type="search" name="" id="" value="搜索框">
```
^取属性值的开头部分来匹配,相当于匹配头
$取属性值的结尾部分来匹配,相当于匹配尾
*取属性值的包含中匹配的上的则选中,相当于搜索
```
<style> // ^是以什么属性的值为开头,相当于是取前部分来匹配
div[class^="icon"] {
color: pink;
}
div[class*="icon"] {
color: pink;
}
</style> // 属性权重是:10;
<div class="icon1"></div>
<div class="icon2"></div>
<div class="icon3"></div>
```
## CSS3 结构伪类选择器
nth-child(n) // n可以说even或者odd 奇数和偶数 ,也可以是单个数字,也可以用公式
公示从0开始,但是第0个元素或者超出了元素的个数则会被忽略
nth-of-type()跟nth-child()使用方法一样,只是能选择指定元素
```
div span :nth-of-type(2){
color:pink;
}
<div>
<p></p>
<span></span>
<span></span>
<span></span>
</div>
```
- 注意:本质上就是选中第几个子元素
- n 可以是数字、关键字、公式
- n 如果是数字,就是选中第几个
- 常见的关键字有 `even` 偶数、`odd` 奇数
- 常见的公式如下(如果 n 是公式,则从 0 开始计算)
- 但是第 0 个元素或者超出了元素的个数会被忽略
## CSS3 伪元素选择器
两个就是在标签内文字前后加内容,一般用来放图标文字,节省元素
伪类选择器注意事项
- `before` 和 `after` 必须有 `content` 属性
- `before` 在内容前面,after 在内容后面
- `before` 和 `after` 创建的是一个元素,但是属于行内元素
- 创建出来的元素在 `Dom` 中查找不到,所以称为伪元素
- 伪元素和标签选择器一样,权重为 1
## 2D转换
### 移动
```
transform: translate(x, y) // 使用方法类似click,单位px
transform: translateX(x) // 只移动X
transfrom: translateY(y) // 只移动Y
transform: translate(-50%, -50%) // 左 上 移动自身50%
```
- `2D` 的移动主要是指 水平、垂直方向上的移动
- `translate` 最大的优点就是不影响其他元素的位置
- `translate` 中的100%单位,是相对于本身的宽度和高度来进行计算的
- 行内标签没有效果
### 旋转
```
/* 单位是:deg */
transform: rotate(度数deg)
```
- `rotate` 里面跟度数,单位是 `deg`
- 角度为正时,顺时针,角度为负时,逆时针
- 默认旋转的中心点是元素的中心点
### 设置旋转中心点
```
transform-origin: x y;
transform-origin: left bottom;
transform-origin: 0% 100%;
transform-origin: 0 100px;
```
- 注意后面的参数 x 和 y 用空格隔开
- x y 默认旋转的中心点是元素的中心 (50% 50%),等价于 `center` `center`
- 还可以给 x y 设置像素或者方位名词(`top`、`bottom`、`left`、`right`、`center`)
### 放大缩小
`transform: scale(2, 2)`
- 注意,x 与 y 之间使用逗号进行分隔
- `transform: scale(1, 1)`: 宽高都放大一倍,相当于没有放大
- `transform: scale(2, 2)`: 宽和高都放大了二倍
- `transform: scale(2)`: 如果只写了一个参数,第二个参数就和第一个参数一致
- `transform:scale(0.5, 0.5)`: 缩小
- `scale` 最大的优势:可以设置转换中心点缩放,默认以中心点缩放,而且不影响其他盒子
### 综合连写写法
`transform: translate(Xpx,Ypx) rotate(180deg) scale(1.1, 1.1)`
- 同时使用多个转换,其格式为 `transform: translate() rotate() scale()`
- 顺序会影响到转换的效果(先旋转会改变坐标轴方向)
- 但我们同时有位置或者其他属性的时候,要将位移放到最前面
## 渐变
渐变是多个颜色逐渐变化的效果,一般用于设置盒子背景
分类:
* 线性渐变
![image.png](https://cos.easydoc.net/84678576/files/lu97pxc1.png)!
* 径向渐变
![image.png](https://cos.easydoc.net/84678576/files/lu97q6a1.png)
### 线性渐变
```css
background-image: linear-gradient(
渐变方向,
颜色1 终点位置,
颜色2 终点位置,
......
);
/* 从上到下,蓝色渐变到红色 */
linear-gradient(blue, red);
/* 渐变轴为45度,从蓝色渐变到红色 */
linear-gradient(45deg, blue, red);
/* 从右下到左上、从蓝色渐变到红色 */
linear-gradient(to left top, blue, red);
/* 从下到上,从蓝色开始渐变、到高度40%位置是绿色渐变开始、最后以红色结束 */
linear-gradient(0deg, blue, green 40%, red);
```
取值:
* 渐变方向:可选
* to 方位名词
* 角度度数
* 终点位置:可选
* 百分比
### 案例-产品展示
![image.png](https://cos.easydoc.net/84678576/files/lu97sfzm.png)
* HTML 结构
```html
<div class="box">
<img src="./images/product.jpeg" alt="" />
<div class="title">OceanStor Pacific 海量存储斩获2021 Interop金奖</div>
<div class="mask"></div>
</div>
```
* CSS 样式
```css
.mask {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-image: linear-gradient(
transparent,
rgba(0,0,0,0.5)
);
opacity: 0;
transition: all .5s;
}
.box:hover .mask {
opacity: 1;
}
```
### 径向渐变
```css
background-image: radial-gradient(
半径 at 圆心位置,
颜色1 终点位置,
颜色2 终点位置,
......
);
/* 渐变轴为45度,从蓝色渐变到红色 */
linear-gradient(45deg, blue, red);
/* 从下到上,从蓝色开始渐变、到高度40%位置是绿色渐变开始、最后以红色结束 */
linear-gradient(0deg, blue, green 40%, red);
```
取值:
* 半径可以是2条,则为椭圆
* 圆心位置取值:像素单位数值 / 百分比 / 方位名词
## 动画
```
// CSS定义
// 定义动画的写法
@keyframes 动画名称 {
0% {
width: 100px;
}
100% {
width: 200px
}
}
/* 上面与下面这两个的方式的一样,只是百分比与英文的区别*/
@keyframes 动画名称 {
form {
width: 100px;
}
to {
width: 200px
}
}
/* 多状态情况下的使用方法 */
/*1.可以做多个状态的变化*/
/*2.里面的百分比要是整数,不能为小数*/
/*3.里面的百分比就是总时间的百分比*/
@keyframes 动画名称 {
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)
}
}
```
- 0% 是动画的开始,100 % 是动画的完成,这样的规则就是动画序列
- 在 @keyframs 中规定某项 CSS 样式,就由创建当前样式逐渐改为新样式的动画效果
- 动画是使元素从一个样式逐渐变化为另一个样式的效果,可以改变任意多的样式任意多的次数
- 用百分比来规定变化发生的时间,或用 `from` 和 `to`,等同于 0% 和 100%
```
// CSS中使用
div {
/* 调用动画 动画名称为上面定义动画的名称*/
animation-name: 动画名称;
/* 持续时间 单位为:s (秒))*/
animation-duration: 持续时间;
}
```
### 动画的属性
| 属性 | 作用 | 描述 |
| ----------------- | ------------------- | ------------------- |
| @keyframes | | 规定动画。 |
| animation | | 所有动画属性的简写属性,除了animation-play-state属性。 |
| animation-name | 动画名称 | 规定@keyframes动画的名称。(必须的) |
| animation-duration | 动画时长 | 规定动画完成一个周期所花费的秒或毫秒,默认是0。(必须的) |
| animation-timing-function | 速度曲线 | 规定动画的速度曲线,默认是"ease"慢-快-慢,linear匀速,steps(3)走几步|
| animation-delay | 延迟时间 | 规定动画何时开始,默认是0。 |
| animation-iteration-count | 重复次数 | 规定动画被播放的次数,默认是1,还有infinite无限循环 |
| animation-direction | 动画执行方向 | 规定动画是否在下一周期逆向播放<br>默认是{normal} {alternate}反复播放,{reverse}反向播放|
| animation-fill-mode | 动画执行完毕<br>时状态 | 规定动画结束后状态<br>{forwards}最后一帧状态 {backwards}第一帧状态 |
| animation-play-state | 暂停动画 | 规定动画是否正在运行或暂停。<br>默认是{running}运行,还有{paused}暂停 |
/* animation: 动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 起始与结束状态 */
```
animation: name duration timing-function delay iteration-count direction fill-mode
```
- 简写属性里面不包含 `animation-paly-state`
- 暂停动画 `animation-paly-state: paused`; 经常和鼠标经过等其他配合使用
- 要想动画走回来,而不是直接调回来:`animation-direction: alternate`
- 盒子动画结束后,停在结束位置:`animation-fill-mode: forwards`
- timing-function 这个值得属性看下面,一般如果匀速播放用:linear
animation-timing-function 速度曲线的属性值,就是动画的运行速度
/* 我们元素可以添加多个动画, 用逗号分隔 */
## 3D转换
- x 轴:水平向右 -- **注意:x 轴右边是正值,左边是负值**
- y 轴:垂直向下 -- **注意:y 轴下面是正值,上面是负值**
- z 轴:垂直屏幕 -- **注意:往外边的是正值,往里面的是负值**
- `3D` 位移:`translate3d(x, y, z)`
- `3D` 旋转:`rotate3d(x, y, z)`
- 透视:`perspctive`
- `3D`呈现 `transfrom-style`
- `3D` 移动就是在 `2D` 移动的基础上多加了一个可以移动的方向,就是 z 轴方向
### 3D移动
```
transform: translateX(100px) translateY(100px) translateZ(100px);
transform: translate3d(100px, 100px, 100px)
```
- `transform: translateX(100px)`:仅仅是在 x 轴上移动
- `transform: translateY(100px)`:仅仅是在 y 轴上移动
- `transform: translateZ(100px)`:仅仅是在 z 轴上移动
- `transform: translate3d(x, y, z)`:其中x、y、z 分别指要移动的轴的方向的距离
- **注意:x, y, z 对应的值不能省略,不需要填写用 0 进行填充**
### 透视
```
/*透视需要写在被视察元素的父盒子上面*/
perspective:100px;
```
- **透视需要写在被视察元素的父盒子上面**
### 3D旋转
`transform: rotate3d(x, y, z, 45deg)`
- 注意下方图片
- d:就是视距,视距就是指人的眼睛到屏幕的距离
- z:就是 z 轴,z 轴越大(正值),我们看到的物体就越大
- `transform: rotateX(45deg)` -- 沿着 x 轴正方向旋转 45 度
- `transform: rotateY(45deg)` -- 沿着 y 轴正方向旋转 45 度
- `transform: rotateZ(45deg)` -- 沿着 z 轴正方向旋转 45 度
- `transform: rotate3d(x, y, z, 45deg)` -- 沿着自定义轴旋转 45 deg 为角度
### 3D呈现
`transform-style:preserve-3d;`
- 控制子元素是否开启三维立体环境
- `transform-style: flat` 代表子元素不开启 `3D` 立体空间,默认的
- `transform-style: preserve-3d` 子元素开启立体空间
- 代码写给父级,但是影响的是子盒子
## meta视口标签
```
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
```
## 背景缩放
background-size: 背景图片宽度 背景图片高度;
单位:长度|百分比|cover|contain
单位为%时,是按照父盒子的百分比的尺寸,并不是背景图的百分比
cover 会完全覆盖整个父盒子的尺寸,但会导致图部分内容因为比例问题显示不全
contain 把图片尺寸扩展至最大尺寸,以使其宽度和高度完全适应内容区域,相当于等比例放大
移动端 CSS 初始化推荐使用 normalize.css/
Normalize.css:保护了有价值的默认值
Normalize.css:修复了浏览器的bug
Normalize.css:是模块化的
Normalize.css:拥有详细的文档
官网地址: <http://necolas.github.io/normalize.css/>
## CSS3盒子模型
box-sizing: border-box;
传统模式宽度计算:盒子的宽度 = CSS中设置的width + border + padding
CSS3盒子模型: 盒子的宽度= CSS中设置的宽度width 里面包含了 border 和 padding
也就是说,我们的CSS3中的盒子模型, padding 和 border 不会撑大盒子了
## CSS3 清除样式
/*CSS3盒子模型*/
box-sizing: border-box;
-webkit-box-sizing: border-box;
/*点击高亮我们需要清除清除 设置为transparent 完成透明*/
-webkit-tap-highlight-color: transparent;
/*在移动端浏览器默认的外观在iOS上加上这个属性才能给按钮和输入框自定义样式*/
-webkit-appearance: none;
/*禁用长按页面时的弹出菜单*/
img,a { -webkit-touch-callout: none; }
让盒子在最大和最小的区间内显示
max-width:xPX
min-width:xPX
## 二倍精灵图
在firework里面把精灵图等比例缩放为原来的一半
之后根据大小测量坐标
background-size: 精灵图原来宽度的一半
## flex布局
```
display:flex; 通过为父盒子添加flex属性,来控制子盒子的位置和排列方式
```
```
父级元素的属性有以下六个
flex-direction: 设置主轴的(默认X,可以修改为Y)方向,设置子元素在父盒子的位置
justify-content: 设置主轴上的子元素排列方式
flex-wrap: 设置子元素是否换行
align-content: 设置侧轴(默认Y,可以修改为X)上的子元素的排列方式(多行)
align-items: 设置侧轴(默认Y,可以修改为X)上的子元素排列方式(单行)
flex-flow: 复合属性,相当于同时设置flex-direction和flex-wrap
```
```
flex-direction: row; 默认值从左到右,设置为横向布局
row-reverse 从右到左,设置为横向布局
column 从上倒下,设置为纵向布局
column-reverse 从下到上,设置为纵向布局
```
```
justify-content: flex-start 默认值从头部开始,设置X为主轴,则从左到右
flex-end 从尾部开始排列
center 在主轴居中对齐(主轴是X则水平居中)
space-around 平分剩余空间
space-between 先两边贴边在平分剩余中间空间
```
```
flex-wrap: nowrap; 不换行 可以用来溢出掉下去的解决
wrap; 换行
```
```
align-content: flex-start 默认值从上到下
flex-end; 从下到上
center; 居中
stretch; 拉伸
space-around 平分剩余空间
space-between 先两边贴边在平分剩余中间空间
```
```
align-items: flex-start 默认值从上到下
flex-end; 从下到上
center; 居中
stretch; 拉伸
```
```
flex-flow: column wrap; 连写
```
### 子项常见属性
```
子项常见属性
flex:1; 每个子项占用数量
.pr span { // 以下案例为3个盒子中的第二个盒子占50%,另外两个盒子占25%
flex:1;
background-color: blue;
}
.pr span:nth-child(2){ // 这个会覆盖上面中第二个盒子的数值
flex:2;
}
align-self 控制子项自己在侧轴上的排列方式
order 与 z-index 效果类似,但不一样
```
## rem布局
rem和em的区别在于,rem是基于html文字大小来改变,em是基于父元素来改变大小
```
媒体查询 可以根据不同的屏幕尺寸在改变不同的样式
@media mediatype and|not|oly (media feature){
css-Code;
}
@media scree and (max-width:800px){}
@media screen and (min-width:540px) and (max-width: 969px){}
```
用@media开头
| **mediatype属性** | 描述 |
| ----------------- | ------------------- |
| all | 所有设备 |
| print | 打印机设备 |
| scree | 用于电脑,平板,手机 |
关键字 and not only 一般用and
media feature 媒体特性必须小写括号包含
width 定义设备中页面可见区域的宽度
min-width 定义设备可见最小宽度
max-width 定义设备可见最大宽度
通过媒体查询让基于rem的文字,随网页大小改变而改变
```
通过媒体查询让基于rem的文字,随网页大小改变而改变
div {
width: 100%;
height: 1rem;
background-color: green;
color: white;
text-align: center;
line-height: 1rem;
font-size: .5rem;
}
@media screen and (max-width: 539px){
html {
font-size: 30px;
}
}
@media screen and (min-width:540px ) and (max-width: 969px){
html {
font-size: 60px;
}
}
@media screen and (min-width: 970px){
html {
font-size: 90px;
}
}
```
引入资源,按网页宽度改变CSS方法,使网页发生很大改变
```
<link rel="stylesheet" href="style1.css" media="screen and (max-width: 539px)">
<link rel="stylesheet" href="style2.css" media="screen and (min-width: 540px)">
```
## vw适配方案
### vw和vh基本使用
vw和vh是相对单位,相对视口尺寸计算结果
* vw:viewport width(1vw = 1/100视口宽度 )
* vh:lviewport height ( 1vh = 1/100视口高度 )
### vw布局
vw单位的尺寸 = px 单位数值 / ( 1/100 视口宽度 )
### vh问题
vh是1/100视口高度,全面屏视口高度尺寸大,如果混用可能会导致盒子变形
## Less
Less是一个CSS预处理器, Less文件后缀是.less。扩充了 CSS 语言, 使 CSS 具备一定的逻辑性、计算能力
注意:浏览器不识别 Less 代码,目前阶段,网页要引入对应的 CSS 文件
VS Code 插件:Easy LESS,保存 less文件后自动生成对应的 CSS 文件
![image.png](https://cos.easydoc.net/84678576/files/lu9vhq52.png)
### 注释
* 单行注释
* 语法:// 注释内容
* 快捷键:ctrl + /
* 块注释
* 语法:/* 注释内容 */
* 快捷键: Shift + Alt + A
### 运算
* 加、减、乘直接书写计算表达式
* 除法需要添加 小括号 或 .
* 表达式存在多个单位以第一个单位为准
![image.png](https://cos.easydoc.net/84678576/files/lu9vhgum.png)
### 嵌套
作用:快速生成后代选择器
![image.png](https://cos.easydoc.net/84678576/files/lu9vh9ol.png)!
提示:用 & 表示当前选择器,不会生成后代选择器,通常配合伪类或伪元素使用
![image.png](https://cos.easydoc.net/84678576/files/lu9vh4a2.png)
### 变量
概念:容器,存储数据
作用:存储数据,方便使用和修改
语法:
* 定义变量:@变量名: 数据;
* 使用变量:CSS属性:@变量名;
```less
// 定义变量
@myColor: pink;
// 使用变量
.box {
color: @myColor;
}
a {
color: @myColor;
}
```
### 导入
作用:导入 less 公共样式文件
语法:导入: @import “文件路径”;
提示:如果是 less 文件可以省略后缀
```less
@import './base.less';
@import './common';
```
### 导出
写法:在 less 文件的第一行添加 // out: 存储URL
提示:文件夹名称后面添加 /
导出less为css文件,方便调试
```less
// out: ./index.css
// out: ./css/
```
### 禁止导出
写法:在 less 文件第一行添加: // out: false
![image.png](https://cos.easydoc.net/84678576/files/lu9vghln.png)
## 响应式布局
Bootstrap栅格系统
container 会分隔当前界面为12个格子
+ 按照不同屏幕划分为1~12 等份
+ 行(row) 可以去除父容器作用15px的边距
+ xs-extra small:超小; sm-small:小; md-medium:中等; lg-large:大;
+ 列(column)大于 12,多余的“列(column)”所在的元素将被作为一个整体另起一行排列
+ 每一列默认有左右15像素的 padding
+ 可以同时为一列指定多个设备的类名,以便划分不同份数 例如 class="col-md-4 col-sm-6"
```
<div class="container"> // 选择container划分
<div class="row"> // 设置div为横向显示
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">1</div> // 设置div在大屏,中屏,小屏的时候占用的份额,xs sm md lg 为显示大小
<div class="col-lg-3">
<div class="row"> // 支持嵌套,且嵌套里面在放入一个行,会更好一些,消除父元素有一个15像素的padding问题
<div class="col-md-4">左侧</div>
<div class="col-md-4 col-md-offset-4">右侧</div> // offset为左边偏移分数=总份数 - 实际使用分数
</div>
<div class="row">
<div class="col-md-4 col-md-push-8">左侧</div> // 向右推过去8个份额 移位
<div class="col-md-8 col-md-pull-4">右侧</div> // 向左推过去4个份额 移位
</div>
</div>
</div>
</div>
```
响应式工具显示
```
hidden-xs hidden-sm hidden-md hidden-lg 对应尺寸会隐藏显示
visible-xs visible-sm visible-md visible-lg 对应尺寸会显示
```
## Bootstrap
### 简介
Bootstrap 是由 Twitter 公司开发维护的前端 UI 框架,它提供了大量编写好的 CSS 样式,允许开发者结合一定 HTML 结构及JavaScript,快速编写功能完善的网页及常见交互效果。
中文官网: <https://www.bootcss.com/>
### 使用步骤
#### 下载
下载:Bootstrap V5中文文档 → 进入中文文档 → 下载 →下载 Bootstrap 生产文件
![image.png](https://cos.easydoc.net/84678576/files/lu9x5zbo.png)
#### 使用
1. 引入 Bootstrap CSS 文件
```html
<link rel="stylesheet" href="./Bootstrap/css/bootstrap.min.css">
```
2. 调用类名: container 响应式布局版心类
```html
<div class="container">测试</div>
```
### 栅格系统
作用:响应式布局
栅格化是指将整个网页的宽度分成12等份,每个盒子占用的对应的份数
例如:一行排4个盒子,则每个盒子占 3份 即可(12 / 4 = 3)
![image.png](https://cos.easydoc.net/84678576/files/lu9x5snz.png)
* row 类:行,可以让内容在一行排(flex布局)
### 全局样式
#### 按钮
![image.png](https://cos.easydoc.net/84678576/files/lu9x5mkc.png)
类名
* btn:默认样式
* btn-success:成功
* btn-warning:警告
* ……
* 按钮尺寸:btn-lg / btn-sm
#### 表格
![image.png](https://cos.easydoc.net/84678576/files/lu9x5gjt.png)
表格类:
* table:默认样式
* table-striped:隔行变色
* table-success:表格颜色
* ……
### 组件
1.引入样式表
2.引入 js 文件
3.复制结构,修改内容
### 字体图标
#### 下载
导航 / Extend:图标库 → 安装 → 下载安装包 → [bootstrap-icons-1.X.X.zip](https://github.com/twbs/icons/releases/download/v1.10.3/bootstrap-icons-1.10.3.zip)
#### 使用
1. 复制 fonts 文件夹到项目目录
2. 网页引入 bootstrap-icons.css 文件
3. 调用 CSS 类名(图标对应的类名)
```html
<i class="bi-android2"></i>
```