移动web-黑马程序员学习笔记
1 字体图标2 平面转换2.1 绝对定位元素居中:2.2 双开门效果2.3 旋转效果2.4* 转换原点2.5 多重转换效果2.6 缩放3* 渐变4 空间转换(3D转换)4.1 空间位移4.2 透视效果4.3 空间旋转4.4 立体呈现4.5 缩放5 动画5.1 精灵动画5.2 无缝动画:走马灯6 移动端特点7 百分比布局8 Flex8.1 Flex布局:8.2 侧轴8.3 伸缩比8.4 改变元素排列方向8.5 弹性盒子换行9 移动适配rem9.1 添加媒体查询9.2 flexible.js9.3 Less语法1.注释2.计算3.嵌套4.变量5.导入6.导出vw/vh(用法更简洁)10 响应式布局10.1 媒体查询1. 媒体特性常用写法:2. 书写顺序3. link属性4. 隐藏10.2 BootStrap一些设计过程中的常用知识点1 字体图标
作用:使用字体图标技巧实现网页中简洁的图标效果
展示的是图标,本质上是字体,处理简单的颜色单一的图片。
每个网站的标题栏图标:网站网址+/favicon.ico
素材库:Iconfont:/
使用字体图标 - 类名
引入字体图标样式表
<link rel="stylesheet" href="./iconfont/iconfont.css">
调用图标对应的类名,必须调用2个类名
<body><i class="iconfont icon-favorites-fill"></i></body>
如果想要的图标没有,可以问设计师要svg格式的图,上传后再下载即可。
2 平面转换
作用:使用transform属性实现元素的位移、旋转、缩放等效果
.father:hover .son {transform: translate(100px, 50px);/* 百分比: 盒子自身尺寸的百分比 */transform: translate(100%, 50%);/* 只给出一个值表示x轴移动距离 */transform: translate(100px);transform: translateY(100px);}
2.1 绝对定位元素居中:
步骤:
设置父级和子级宽高,设置子绝父相;设置子级位置left:50%;top:50%;
,子级左上角在父级中心点。微调位置,使子级中心点在父级中心:transform: translate(-50%, -50%);
.father {position: relative;width: 500px;height: 300px;border: 1px solid #000;}.son {position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);width: 203px;height: 100px;background-color: pink;}
2.2 双开门效果
向左侧移动盒子自身宽度大小
向右侧移动盒子自身宽度大小
<head><style>* {margin: 0;padding: 0;}/*背景盒子设置,采用背景图*/.box {width: 1366px;height: 600px;margin: 0 auto;background: url('./images/bg.jpg');/* 关键细节1:超出父级的隐藏 */overflow: hidden;}.box::before,.box::after {float: left;content: '';width: 50%;height: 600px;background-image: url(./images/fm.jpg);/*关键细节2:设置转换时间*/transition: all .5s;}.box::after {/*关键细节3:要背景的右半部分*/background-position: right 0;}/* 鼠标移入的时候的位置改变的效果 */.box:hover::before {transform: translate(-100%);}.box:hover::after {transform: translateX(100%);}</style></head><body><div class="box"></div></body>
2.3 旋转效果
必须有过渡属性,旋转才能生效
img {width: 250px;/* 旋转效果必须设置过渡 */transition: all 2s;} img:hover {/* transform: rotate(角度); *//* 顺 */transform: rotate(360deg);/* 逆 */transform: rotate(-360deg);}
2.4* 转换原点
作用:使用transform-origin属性改变转换原点
默认旋转圆点是盒子中心点,旋转后会改变坐标轴向,修改效果设置在标签上,hover时设置旋转效果
transform-origin: 原点水平位置 原点垂直位置;
/*transform-origin: left、top、right bottom center;*/transform-origin: left bottom;
2.5 多重转换效果
边走边转,顺序不能反
transform: translate(600px) rotate(360deg);
2.6 缩放
使用scale改变元素尺寸
使用时要注意transform设置定位和缩放会存在层叠特性,导致部分设置不生效
/*transform: scale(x轴缩放倍数, y轴缩放倍数);*//*transform: scale(缩放倍数)*//* scale值大于1表示放大, scale值小于1表示缩小*/transform: scale(1.2);
3* 渐变
设置背景透明度渐变的步骤: 1.用伪元素书写盒子控制位置,设置渐变效果并设置过渡属性和 2.用hover显示,设置opacity:0;
opacity:1
/*background-image: linear-gradient(color1,color2,color3);*/background-image: linear-gradient(pink,green,blue);/*常用为透明度变化*/background-image: linear-gradient(transparent,rgba(0,0,0, .6));
设置图片大小渐变的步骤: 1.给图片设置过渡属性 2.给父元素设置transition:all 0.5s
,给hover设置放大属性transform:scale(1.2)
overflow:hidden
,使图片超出的部分隐藏
设置文字移动渐变步骤: hover设置txt的位置移动transform:translate()
4 空间转换(3D转换)
作用:使用transform属性实现元素在空间内的位移、旋转、缩放等效果
Z轴的变化需要设置透视效果才能看到
4.1 空间位移
加在hover上
.box:hover {/* transform: translate3d(50px, 100px, 200px); */transform: translateX(100px);transform: translateY(100px);transform: translateZ(100px);}
4.2 透视效果
作用:产生近大远小,近清晰,远模糊的效果
标签加在父级上,取值为800-1200之间的数值
数值给的小代表距离屏幕近,给的大代表距离屏幕非常远
body {perspective: 1000px;/* perspective: 200px; *//* perspective: 10000px; */}
4.3 空间旋转
都加在hover上
绕中心旋转,可以用以下命令:
transform:rotateZ(值)
或者transform: rotate(360deg);
绕x轴旋转:
transform: rotateX(60deg);
transform: rotateY(60deg);
左手法则:判断旋转方向,左手握住旋转轴,拇指指向正值方向,手指弯曲方向为旋转正值方向
4.4 立体呈现
构建立体图形,给盒子设置该属性
transform-style: preserve-3d;
4.5 缩放
空间缩放
transform: scale3d(0.5,1.1,2);
5 动画
声明动画/*animation: 动画名称 动画时间*/animation: change 1s;
定义动画
/*变化两步*/@keyframes change {from {width: 200px;}to {width: 600px;}}/*多个动画过程*//* 百分比指的是动画总时长的占比 */@keyframes change {0% {width: 200px;}50% {width: 500px;height: 300px;}100% {width: 800px;height: 500px;}}
animation: 动画名称 动画时长 速度曲线 延迟时间 重复次数 动画方向 执行完毕时状态
动画名称和动画时长必须赋值取值不分先后顺序如果有两个时间值,第一个时间表示动画时长,第二个时间表示延迟时间
速度曲线:steps(3)分三阶段执行
重复次数:infinite(无限循环)/3
动画方向:alternate为反向
执行完毕时的状态:forwards最后一帧状态/backwards第一帧状态
animation-name: 动画名称;animation-duration: 动画时间;animation-delay: 延迟时间;animation-fill-mode: 动画执行完毕时状态;animation-timing-function: 速度曲线;animation-iteration-count: 重复次数;animation-direction: 动画执行方向;animation-play-state: 暂停动画;
5.1 精灵动画
使用steps实现逐帧动画,制作步骤
准备显示区域,设置盒子尺寸是一张小图的尺寸,背景图为当前精灵图
.box {/* 1680/12 : 保证显示区域的尺寸和一个精灵小图的尺寸相同 */width: 140px;height: 140px;border: 1px solid #000;background-image: url(./images/bg.png);}
定义动画
改变背景图的位置,移动的距离就是精灵图的宽度
@keyframes move {from {background-position: 0 0;}to {/* 1680: 精灵图的宽度 */background-position: -1680px 0;}}
使用动画
添加速度曲线steps(N),N与精灵图上小图个数相同,添加无限重复效果
.box {animation: move 1s steps(12) infinite;}
想让小人跑远一些,在精灵动画的同时添加盒子位移动画
forwards:停留在最终状态
.box {animation: run 1s forwards;}@keyframes run {/* 动画的开始状态和盒子的默认样式相同的, 可以省略开始状态的代码 *//* from {transform: translateX(0);} */to {transform: translateX(800px);}}
5.2 无缝动画:走马灯
所有动画放在一行,显示区域可以放几张图,最后就多加上几张图,ul宽度设置所有的图宽度定义动画@keyframes move
,给ul设置动画animation:move 5s infinite linear
6 移动端特点
pc端和移动端网页区别:pc端有版心,版心居中
移动端:网页充满屏幕
分辨率:
物理分辨率出厂就被固定,不可被改变。
逻辑分辨率:软件决定的,可以改变,写代码参考的分辨率
视口:使用meta标签设置视口宽度,制作适配不同设备宽度的网页
手机屏幕尺寸都不同,网页宽度为100%网页的宽度和逻辑分辨率尺寸相同默认情况下,网页宽度和逻辑分辨率不同,默认网页宽度为980px,移动端都是375px
<meta name="viewport" content="width=device-width, initial-scale=1.0">
二倍图:一般给的都是二倍图,将设计图改为2x,再测量进行开发
7 百分比布局
百分比布局也叫流式布局,实现效果为宽度自适应,高度固定
.toolbar {/* 百分比布局 流式布局 */width: 100%;height: 50px;}.toolbar li img {height: 100%;}.toolbar li {float: left;width: 20%;height: 50px;}
8 Flex
子级浮动脱标,父级必须设置宽度,采用flex可以不设置浮动,也不会脱标
给父级设置display: flex;
.box {display: flex;/* height: 200px; */border: 1px solid #000;}
Flex布局是一种浏览器提倡的布局模型,可以避免浮动脱标的问题,布局网页更简单灵活,非常适合结构化布局。
但是Flex布局仅适用于高 版本浏览器,可以查询搜索兼容性
8.1 Flex布局:
弹性容器弹性盒子主轴:默认主轴在水平,弹性盒子都是沿着主轴排列/* 居中 */justify-content: center;
/* 间距在弹性盒子(子级)之间 */justify-content: space-between;
/* 所有地方的间距都相等 */justify-content: space-evenly;
/* 间距加在子级的两侧 *//* 视觉效果: 子级之间的距离是父级两头距离的2倍 */justify-content: space-around;
8.2 侧轴
使用align-items
调节元素在侧轴的对齐方式,添加到弹性容器上。
当盒子没给高,按内容大小撑开高度,
给了宽高,则对应给定的宽高
/* 居中 */align-items: center;/* 拉伸,默认值(现有状态,测试的时候去掉子级的高度,高度为父级的100%) */align-items: stretch;/* 单独设置某个弹性盒子的侧轴对齐方式 */.box div:nth-child(2) {align-self: center;}
8.3 伸缩比
单独设置在某一个子盒子上,去掉剩下和盒子宽度剩下的宽度独占份数
flex:1;
8.4 改变元素排列方向
主轴默认是水平方向, 侧轴默认是垂直方向
/*修改主轴方向*/flex-direction:column;/*视觉效果:实现盒子水平居中*/align-items:center;
8.5 弹性盒子换行
当一行显示不完时,flex可以自动将子级压缩成一行
实现换行:flex-wrap:wrap
/* 和主轴对齐方式一样 */align-content: center;align-content: space-around;align-content: space-between;
9 移动适配
rem:目前多数企业在用的解决方案vw/vh:未来的解决方案目标:使用rem单位设置i网页元素的尺寸,屏幕尺寸不同,最终呈现出来的大小也不同
1rem = 1HTML字号大小
rem
9.1 添加媒体查询
1. 手机屏幕大小不同,分辨率不同, 如何设置不同的HTML标签字号?
可以检测视口的宽度,编写差异化的css样式,当某个条件成立, 执行对应的CSS样式。
<style>/* 使用媒体查询, 根据不同的视口宽度, 设置不同的根字号 */@media (width:375px) {html {font-size: 40px;}}@media (width:320px) {html {font-size: 30px;}}</style>
2. 设备宽度不同,HTML标签字号设置多少合适?
目前rem布局方案中,将网页等分成10份, HTML标签的字号为视口宽度的 1/10
3. 如何确定rem数值?
根据视口宽度,设置不同的HTML标签字号
查看设计稿宽度–确定参考设备宽度(视口宽度)–确定基准根字号(1/10视口宽度)rem单位的尺寸
rem单位尺寸=px单位尺寸/基准根字号(取小数点后三位)
9.2 flexible.js
使用flexible.js配合rem实现在不同宽度的设备中,网页元素尺寸等比缩放效果
优点:rem需要多个视口,移动端尺寸较多,每一个都需要设置太麻烦
写在body最下边。
<body><script src="../js/flexible.js"></script></body>
9.3 Less语法
使用less运算完成px到rem单位的转换
less是一个CSS预处理器,后缀为.less,网页引入对应的css文件。
1.注释
单行注释://
块注释:/**/
2.计算
.less
.box {width: 100 + 10px;width: 100 - 20px;width: 100 * 2px;// 除法,两种表示方法// 68 > remwidth: (68 / 37.5rem);//推荐用法height: 29 ./ 37.5rem;}
对应的.css:
.box {width: 110px;width: 80px;width: 200px;width: 1.81333333rem;height: 0.77333333rem;}
3.嵌套
.less
.father {width: 100px;.son {color: pink;// & 表示当前选择器&:hover {color: green;}}&:hover {color: orange;}}
对应的.css:
.father {width: 100px;}.father .son {color: pink;}.father .son:hover {color: green;}.father:hover {color: orange;}
4.变量
能够使用Less变量设置属性值。
.less
//1.定义变量@colora:pink;.box {color:@colora;}.aa {background-color:@colora;}
对应的.css:
.box {color: pink;}.aa {color: pink;}
5.导入
.less内容:
@import 'less路径';
6.导出
less导出CSS文件
**方法1:**配置EasyLess插件, 实现所有Less有相同的导出路径
在pile当中添加导出路径:
"out": "../css/";
**方法2:**控制当前Less文件导出路径
/*导出到qqq文件夹,改名字为daqiu.css*/// out: ./qqq/daqiu.css/*导出到abc文件夹,不改名字*/// out: ./abc/
不想导出:
// out: false
vw/vh(用法更简洁)
vw=1/100视口宽度vh=1/100视口高度不允许两者混用,只能用单次。
10 响应式布局
10.1 媒体查询
目标:能够根据设备宽度的变化,设置差异化样式
1. 媒体特性常用写法:
/* 视口宽度小于等于768px, 网页背景色是粉色 */@media (max-width: 768px) {body {background-color: pink;}}/* 视口宽度大于等于1200px, 网页背景色是skyblue */@media (min-width: 1200px) {body {background-color: skyblue;}}
2. 书写顺序
能够根据设备宽度的变化,设置差异化样式
min-width(从小到大)max-width(从大到小)
/*视口宽度 >= 768px,网页背景色是 粉色视口宽度 >= 992px,网页背景色是 绿色视口宽度 >= 1200px,网页背景色是 skyblue*/ @media (min-width: 768px) {body {background-color: pink;}}@media (min-width: 992px) {body {background-color: green;}}@media (min-width: 1200px) {body {background-color: skyblue;}}
3. link属性
外链式css属性:media里一定要加小括号
<!-- 视口宽度 >= 992px,网页背景色为粉色 --><!-- 视口宽度 >= 1200px,网页背景色为绿色 --><link rel="stylesheet" href="./one.css" media="(min-width: 992px)"><link rel="stylesheet" href="./two.css" media="(min-width: 1200px)">
4. 隐藏
当视口宽度发生变化时,显示的内容发生改变,部分内容隐藏
<head><style>/* 如果检测到视口宽度小于768px, 认为是手机端, left隐藏 */@media (max-width: 768px) {.left {display: none;}}</style></head><body><div class="box"><div class="left">bbbbbb</div><div class="main">aaaaa</div></div></body>
10.2 BootStrap
UI框架:将常见效果进行统一封装后形成的一套代码, 例如:BootStrap,使用 BootStrap框架快速开发响应式网页。
BootStrap3默认将网页分成12等份
栅格系统布局:
在里找到合适的样式,支持定制,下载导入,再将对应的盒子添加对应效果的类即可。
一些设计过程中的常用知识点
行内标签(a,span,i,伪元素)设置宽高不生效,需要调整显示类型或者加定位,定位可以让盒子具备行内块属性,宽高生效;调整显示类型为块级(单独占一行)或者行内(标签在一行排列,但是换行使会存在一个小间距,比较麻烦),可以采用flex定位,加宽高可以生效。想让某元素隐藏,设置:opacity: 0;
或者display:none;
background-size:cover
:设置背景的时候,图片等比例缩放,图片可以完全覆盖整个盒子,可能会导致图片显示不全;background-size:contain
:设置背景,图片等比例缩放,当宽度或者高度和盒子尺寸相等,图片就不再缩放。需要替换的数据必须单独放一个标签(例如移动布局中产品信息,价格等信息);可以点击跳转的标签,都先给一个a标签再嵌套;图上压的字通常需要用子绝父相来定位(给图像设置相对定位,文字设置绝对定位);一般字体图标用i
标签加类名显示,字体图标旁边的字用span
,整体用p
标签包裹,
<p><span>文字</span><i class="iconfont 类名"></i></p>
单个文字或盒子以及图片设置居中效果:垂直居中:line-height: 行高; 水平居中:text-align:center
做选项卡的时候,tab: 菜单的个数要和内容的个数相等的header加固定定位会脱标,要在下边显示内容,可以设置一个padding弹性盒子换行:flex-wrap: wrap;
企业网页版或者网页较少可以修改为响应式布局,其余一律改不了。单行文字溢出时显示省略号:给文字设置
text-overflow:ellipsis;white-space: nowrap;overflow: hidden;
再给文字父级设置:
flex:1;width:0;
给弹性盒子宽度设置为0.则多出的文字就不会撑开盒子。