PC端网页和移动端网页的区别:
- PC端屏幕大,网页固定版心
- 移动端屏幕小,网页多数为100%
在谷歌浏览器中可以调试移动端网页的代码
屏幕尺寸:
屏幕尺寸指的是对角线的长度,一般用英寸来度量

分辨率:
PC分辨率
1920*1080
1366*768
…
缩放150%
(1920/150%)*(1080/150%)
总结:硬件分辨率(出厂设置)
 缩放调节分辨率(软件设置)
分类:
物理分辨率:
生产屏幕时就固定的,它是不可被改变的
逻辑分辨率
由软件驱动决定的
写页面是物理分辨率还是逻辑分辨率?
逻辑分辨率
移动端主流的设备分辨率:

视口:
使用meta标签设置视口宽度,制作适配不同设备宽度的网页
- 手机屏幕尺寸不一样,网页宽度为100%
- 网页的宽度和逻辑分辨率尺寸相等
不设置meta,默认情况下,网页宽度和逻辑分辨率不相等
目标:网页的宽度和逻辑分辨率尺寸相等
解决办法:添加视口标签
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 
 viewport  视口
 width=device-width   视口宽度=设备宽度
 initial-scale=1.0  缩放1倍 (不缩放)
二倍图:
图片分辨率,为了高分辨率下图片不会模糊失真
- 市场上设计稿参考iphone6/7/8,设备宽度375产出设计稿
- 二倍图设计稿的尺寸750px
布局:
百分比布局:
百分比布局,也叫流式布局
效果:宽度自适应,高度固定
flex布局:
给父盒子设置
子盒子会按主轴均匀排序
justify-content:
调节主轴的对齐方式
/* 弹性盒    默认以主轴x轴对齐*/
display: flex;
/* 调节主轴的对齐方式
flex-start 默认值 起点开始依次排列
flex-end  终点开始依次排列
center  沿主轴居中排列
space-around 沿主轴均匀排列,空白间隔分布在弹性盒子两侧
space-between  沿主轴均匀排列,空白间隔分布在相邻盒子之间
space-evenly   沿主轴均匀排列,弹性盒和容器之间的间距相等
*/
justify-content: space-evenly;
align-items:
侧轴的对齐方式
/* 
align-items  侧轴的对齐方式
flex-start 默认值 起点开始依次排列
flex-end 终点开始依次排列
center  沿侧轴居中排列
stretch 弹性盒子沿着侧轴被拉伸至铺满容器
*/
align-items: stretch;
flex-direction:
改变主轴的方向
/* flex-direction改变主轴的方向
column  主轴是y轴
column-reverse
row   默认值  主轴是x轴
row-reverse
*/
flex-direction: row;
flex-wrap:
是否换行
/* 
flex-wrap 是否换行
nowrap 默认值  不换行
wrap  换行
wrap-reverse
*/
flex-wrap: wrap-reverse;
添加给子元素:
/* 修改弹性盒子的伸缩比 */
flex: 1; /*占用父盒子的剩余尺寸*/
移动适配:
rem:
长度单位
效果:屏幕宽度不同,网页元素的尺寸不同(等比缩放)
- 相对单位
- rem单位相对于html标签的字号计算结果
- 1rem=1 HTML字号大小
媒体查询:
手机屏幕大小不同,分辨率不同,如何设置不同的HTML标签字号 —媒体查询
媒体查询能够检测视口的宽度,编写差异化的css样式
当某个条件成立,执行对应的css样式
语法:
@media  媒体类型  and|not|only (媒体特性){
    //css代码
}
媒体类型:
- all 用于所有设备
- print 用于打印机和打印预览
- screen 电脑屏幕 平板电脑 智能手机
问题2
设备宽度不同,HTML标签字号设置多少合适
设备宽度大,元素尺寸就大
设备宽度小,元素尺寸小
将网页等分成10份,HTML标签的字号为视口宽度的 1/10
@media screen and (min-width: 320px) {
    html {
        /*根字号*/
        font-size: 32px;
    }
}
@media screen and (min-width: 375px) {
    html {
        font-size: 37.5px;
    }
}
@media screen and (min-width: 414px) {
    html {
        font-size: 41.4px;
    }
}
工作中,书写代码的尺寸要参考设计稿的尺寸,设计稿中是px还是rem?
如何确定rem的数值
1:根据视口宽度,设置不同的HTML标签字号
2:书写代码,尺寸是rem单位
2.1:确定设计稿对应的设备的HTML标签字号
2.2 查看设计稿宽度–确定参考设备宽度(视口宽度)–确定根字号(1/10视口宽度)
3.量取的设计稿的宽度87px87px使用ps量取,需要除以2(二倍图)
4.计算rem单位的尺寸
N37.5=87/2 N=87/2/37.5
rem单位的尺寸=px单位的值/2/根字号使用pxcook,就不需要除以2
flexible:
使用flexible.js 实现再不同宽度的设备中,网页元素尺寸等比缩放效果
flexible.js 是手淘开发的一个用来适配移动端的js文件
原理:根据不同的视口宽度,给html根节点设置不同的font-size
<script src="./js/flexible.js"></script>
less文件:
目标:使用less运算写法完成px到rem单位的转换
less支持计算写法
less浏览器不识别, 把less语法快速编译生成css代码
单行注释不会编译到css文件。多行会编译到css文件
- less是一个css预处理器,less文件后缀为less
- 扩充了css语言,使css具备一定的逻辑性,计算能力
Easy Less插件:
- vscode插件
- 作用:less文件保存自动生成css文件
更改less编译后的路径
(shift+ctrl+p)—》输入 settings.json
"less.compile": {
    "out": "../css/"
  },
计算:
.box {
  width: 100+10px;
  width: 100-10px;
  width: 100 * 2px;
  /* 
  除法
  */
  width: (68/37.5rem);
  height: (29/37.5rem);
}
嵌套:
& 表示当前选择器
缩进位置
.father {
  width: 200px;
  height: 200px;
  background-color: yellow;
  .son {
    width: 80px;
    height: 80px;
    background-color: rebeccapurple;
    // & 表示当前选择器 .son
    &:hover {
      color: #fff;
    }
  }
  &:hover {
    background-color: aqua;
  }
}
变量:
@加变量名
定义变量
// 变量 --用来存储数据的
// 1 定义  2使用
@width: 20px;
@height: @width+10px;
@colors: red;
.father {
  width: @width*3;
  height: @width*3;
  background-color: @colors;
  .son {
    width: @width;
    height: @width;
    color: @colors;
    background-color: yellow;
  }
}
导入其他less文件:
@+import 文件路径
@import './01体验less.less';
@import './02-计算less.less';
@import './03嵌套.less';
@import './04变量.less';
禁止导入:
单行注释 加out:false
// out:false
注意:
保存会自动编译成css文件
settings.json文件修改保存位置
html文件内导入css文件即可
vm/vh:
相对单位
相对于视口的尺寸计算结果
100vw=100%视口宽度 1vw=1/100视口宽度
100vh=100%视口高度 1vh=1/100视口高度
1:确定设计稿对应的vw尺寸  (1/100视口宽度)
   查看设计稿宽度--确定参考设备宽度(视口宽度)---确定vw尺寸
   
   375px=100vw  1vw=3.75px
   
 2:vw单位的尺寸=px单位数值/(1/100视口宽度)
注意:相对于屏幕宽高,屏幕变化也会发生变化,不需要flexible.js文件
平面转换:
改变盒子再平面内的形态(位移,旋转,缩放)
2D转换
属性:transform
位移:
transform:translate(水平移动距离,垂直移动距离)
取值:
  像素单位数值
  百分比(参照盒子自身的尺寸)
  
x轴正向为右,y轴正向为下
translate()  只给出一个值  表示x轴移动的距离
单独设置某个方向移动的距离   translateX()   translateY()
旋转:
transform:rotate(角度)
角度单位是 deg
取值 
正 顺时针旋转
负 逆时针旋转
设置旋转原点:
transform-origin
改变转换原点
默认原点是盒子中心点
transform-origin:原点水平位置 原点垂直位置
取值:
 方位名词:(left   top  bottom center  right)
 像素单位数值
 百分比(参照盒子自身尺寸)
多重转换:
 transform: translate(600px) rotate(360deg);
需要先平移再旋转,因为旋转会改变坐标轴方向,需要提前设置好平移
原理
- 旋转会改变坐标轴方向
- 先写旋转,后面的转换效果的轴以转换后的轴为准,影响到转换结果
缩放:
语法
transform:scale(倍数)
transform:scale(x轴倍数,y轴倍数)
一般情况下scale 设置一个值,表示x轴和y轴是等比例缩放
scale值大于1 表示放大, 小于1 表示缩小
渐变背景:
linear-gradient
渐变是多个颜色逐渐变化的视觉效果
一般用于设置盒子的背景
设置透明加半透明黑色
background-image: linear-gradient(
                transparent,
                rgba(0,0,0,.5)
            );
移动时间:
transition
哪个需要动作给谁设置
transition: all .5s;
透明度:
opacity
使图片或背景透明
opacity: 0;
空间转换:
X,Y,Z三条坐标轴构成了一个立体空间,z轴位置与视线方向相同
空间转换 也叫3D转换
transform
空间位移:
transform: translate3d(x,y,z); 
transform: translateX(100px);
transform:translateY(100px);
远离眼睛方向 负值  
对着眼睛方向 正值
transform: translateZ(-100px);
            
取值:
  正负都可以
  像素单位数值
  百分比
注意
z轴方向的位移需要给父盒子设置透视
透视:
z轴是视线方向,移动效果是距离的远或近,电脑屏幕是平面的,无法观察远近效果
perspective 实现透视效果
perspective  添加给父级
perspective:值
取值:像素单位数值, 数值一般在800px-1200px
作用:空间转换时,为元素添加近大远小,近实远虚的视觉效果
透视距离也叫视距,就是人的眼睛到屏幕的距离

空间旋转:
绕着旋转轴旋转
/* transform: rotateZ(360deg); */
/* transform: rotateX(60deg);
transform: rotateX(-60deg); */
transform: rotateY(60deg);
transform: rotateY(-60deg);
立体呈现:
写父盒子位置
transform-style:preserve-3d
使子元素处于真正的3d空间
左手法则:
判断旋转方向:左手握住旋转轴,拇指指向正值方向,手指弯曲方向为旋转正值方向
动画:
animation添加动画效果
多个状态之间的变化过程,动画过程可控(重复播放,最终画面,是否暂停)
动画实现步骤:
1:定义动画
/* 1:定义动画 
@keyframes 动画名称{
from {}
to {}
}
*/
@keyframes change {
    from {
        width: 200px;
    }
    to {
        width: 600px;
    }
}
2:使用动画
/* 2 使用动画 */
/* animation: 动画名称 动画花费时长; */
animation: change 2s;
动画属性:
animation:动画名称  动画时长  速度曲线  延迟时间  重复次数 动画方向 执行完毕时状态;
动画名称  动画时长 必须赋值
赋值不分前后顺序
如果有2个时间值,第一个时间表示动画时长,第二个表示动画延迟时间
拆分写法:
.box{
    width: 200px;
    height: 100px;
    background-color:pink;
    /* 动画名称 */
    animation-name: change;
    /* 动画时长 */
    animation-duration: 2s;
    /* 延迟时间 */
    /* animation-delay: 2s; */
    /* 动画执行完毕时的状态
    forwards 结束状态
    backwards 开始状态
    */
    animation-fill-mode: backwards;
    /* 
    steps(4);逐帧动画  速度曲线 */
    animation-timing-function: steps(4);
    /* 重复次数 
    infinite 无限循环
    */
    animation-iteration-count: infinite;
    /* 执行方向   alternate反向 */
    animation-direction: alternate;
}
/* 1:定义动画 
@keyframes 动画名称{
from {}
to {}
}
*/
@keyframes change {
    from {
        width: 200px;
    }
    to {
        width: 600px;
    }
}
background-color:pink;
/* 动画名称 */
animation-name: change;
/* 动画时长 */
animation-duration: 2s;
/* 延迟时间 */
/* animation-delay: 2s; */
/* 动画执行完毕时的状态
forwards 结束状态
backwards 开始状态
*/
animation-fill-mode: backwards;
/* 
steps(4);逐帧动画  速度曲线 */
animation-timing-function: steps(4);
/* 重复次数 
infinite 无限循环
*/
animation-iteration-count: infinite;
/* 执行方向   alternate反向 */
animation-direction: alternate;
}
/* 1:定义动画
 @keyframes 动画名称{
 from {}
 to {}
 }
 */
 @keyframes change {
 from {
 width: 200px;
 }
 to {
 width: 600px;
 }
 }



















