何为字体图标?
字体图标的优点:
Iconfont
下载字体包步骤:登录(新浪微博/手机号) → 选择图标库 → 选择图标,加入购物车 → 购物车 → 添加至项目 → 下载至本地
使用字体图标有以下两种方式:
使用字体图标 - Unicode编码(方式一):
将选好的字体包下载到本地,并引入样式表:iconfont.css
<link rel="stylesheet" href="./iconfont/iconfont.css">
复制粘贴图标对应的Unicode编码
<i class="iconfont">i>
设置文字字体相关属性
.iconfont {
font-size: 26px;
color: gray;
}
使用字体图标 – 类名(方式二):
引入字体图标样式表
调用图标对应的类名,必须调用2个类名
<i class="iconfont icon-upload">i>
<i class="iconfont icon-gouwuche">i>
何为平面转换?
具体语法:
取值(正负均可)
注:X轴正向为右,Y轴正向为下,位移可配合过渡实现,效果可能会较好
translate()如果只给出一个值,则表示x轴方向移动距离
单独设置某个方向的移动距离:translateX() & translateY()
使用translate快速实现绝对定位的元素居中效果
实现方法:
.son {
position: absolute;
left: 50%;
top: 50%;
width: 200px;
height: 100px;
/* 设置固定值不够灵活,如果盒子尺寸变了,margin-left/right的值也要手动去改变 */
/* margin-left: -100px;
margin-top: -50px; */
/* 位移:百分比参考盒子自身尺寸计算结果 */
/* 较为灵活 盒子尺寸变了,无需去手动改变尺寸 */
transform: translate(-50%,-50%);
background-color: pink;
}
原理:位移取值为百分比数值,参照盒子自身尺寸计算移动距离
具体语法:
transform:rotate(角度)
注:角度单位是deg,旋转需配合过渡实现,否则效果可能出不来
取值正负均可,若取值为正,则顺时针旋转。取值为负,则逆时针旋转
使用transform-origin
属性可改变转换原点
具体语法:
取值
注:改变转换原点的css属性在元素本身上写,不要在hover上写
transform: translate(300px) rotate(360deg);
多重转换原理
具体语法:
transform:scale(x轴缩放倍数, y轴缩放倍数)
一般情况下, 只为scale设置一个值, 表示x轴和y轴等比例缩放
/* 本身的尺寸,不放大也不缩小 */
transform: scale(1);
/* 小于1 缩小 */
transform: scale(0.8);
/* 大于1 放大 */
transform: scale(1.5);
具体语法:
transform: skew(角度)
正数向左倾斜,负数则向右倾斜
transform: skew(50deg);
何为渐变?
具体语法:
/* 半透明渐变:透明--->rgba() */
background-image: linear-gradient(0deg, #4158D0 0%, #C850C0 46%, #FFCC70 100%);
/* 渐变的方向(或角度) 颜色值1,颜色值2,颜色值3 */
background-image: linear-gradient(transparent, rgba(0, 0, 0, .6));
渐变
何为空间转换?
空间:是从坐标轴角度定义的。 x 、y 和z三条坐标轴构成了一个立体空间,z轴位置与视线方向相同
空间转换也叫3D转换
属性:transform
具体语法:
取值(正负均可)
生活中,同一个物体,观察距离不同,视觉上有什么区别?
近大远小(近实远虚)、近清楚远模糊
默认情况下,为什么无法观察到Z轴位移效果?
因为Z轴是视线方向,移动效果应该是距离的远或近, 电脑屏幕是平面,默认无法观察远近效果
使用perspective
属性实现透视效果
perspective: 800px;
属性(添加给父级)
主要作用
使用perspective透视属性能否呈现立体图形?
不能,perspective只增加近大远小、近实远虚的视觉效果
呈现立体图形步骤:
transform-style:preserve-3d;
,使子元素处于真正的3d空间transform-style: preserve-3d;
何为动画?
过渡可以实现2个状态间的变化过程
动画效果:实现多个状态间的变化过程,动画过程是可控(重复播放、最终画面、是否暂停)
使用步骤:
/* 定义动画 方式一 */
@keyframes changeBoxWidth {
from {
width: 200px;
}
to {
width: 800px;
}
}
/* 定义动画 方式二 */
@keyframes changeBoxSize {
0% {
width: 200px;
}
50% {
width: 600px;
height: 300px;
}
100% {
width: 900px;
height: 400px;
}
}
复合属性写法:
/* 动画名称 动画时长 速度曲线 延迟时间 重复次数 动画方向 执行完毕时状态 */
/* infinite 无限循环 */
/* alternate 动画来回执行 */
animation: change 1s steps(3) 2s infinite alternate;
/* 执行完毕时状态 注:添加此属性,需要把无限循环和动画方向去除 否则效果可能出不来 */
/* 默认值:动画停留在最初的状态 */
/* 默认值:动画停留在结束的状态 forwards */
animation: change 1s steps(3) forwards;
注意:
拆分写法:
属性 | 作用 | 取值 |
---|---|---|
animation-name | 动画名称 | |
animation-duration | 动画时长 | |
animation-delay | 延迟时间 | |
animation-timing-function | 动画执行完毕时状态 | forwards:最后一帧状态 backwards:第一帧状态 |
animation-timing-function | 速度曲线 | steps(数字):逐帧动画 |
animation-iteration-count | 重复次数 | infinite为无限循环 |
animation-direction | 动画执行方向 | alternate为反向 |
animation-play-state | 暂停动画 | paused为暂停,通常配合:hover使用 |
逐帧动画:帧动画。开发中,一般配合精灵图实现动画效果
animation-timing-function: steps(N);
将动画过程等分成N份
可以给元素添加多个动画
animation: moveBox 1s steps(12) infinite, run 5s infinite;
小提示:如果动画的开始状态和元素的默认样式是相同的,可以省略开始状态的代码
@keyframes move {
to / 100% {
transform: translateX(-1600px);
}
}
默认情况下,网页的宽度和逻辑分辨率相同吗?
不同, 默认网页宽度是980px
何为视口?
视口用于显示HTML网页的区域,约束HTML尺寸,使网页宽度和设备宽度(分辨率)相同
<meta name="viewport" content="width=device-width, initial-scale=1.0">
百分比布局, 也叫流式布局。可达到的效果: 宽度自适应,高度固定
.nav {
/* 百分比布局 流式布局 */
width: 100%;
height: 50px;
background-color: #ffffff;
box-shadow: #000 5px 10px 15px;
}
何为Flex布局?
Flex布局是一种浏览器提倡的布局模型,他可以使布局网页更简单、灵活,而且能避免浮动脱标的问题,非常适合结构化布局
组成部分
使用方式
修改主轴对齐方式属性:justify-content
属性值 | 作用 |
---|---|
flex-start | 默认值, 起点开始依次排列 |
flex-end | 终点开始依次排列 |
center | 沿主轴居中排列 |
space-around | 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧 |
space-between | 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间 |
space-evenly | 弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等 |
ul {
height: 300px;
border: 1px solid #000;
display: flex;
justify-content: space-around;
}
修改侧轴对齐方式属性:
属性值 | 作用 |
---|---|
flex-start | 默认值,起点开始依次排列 |
flex-end | 终点开始依次排列 |
center | 沿侧轴居中排列 |
stretch | 默认值, 弹性盒子沿着主轴线被拉伸至铺满容器 |
ul {
height: 600px;
border: 1px solid #000;
display: flex;
align-items: center;
}
ul>li:nth-child(2) {
align-self: center;
}
使用flex属性可以修改弹性盒子伸缩比,取值为数值(整数)
ul>li:nth-child(2) {
flex: 2;
}
注:只占用父盒子剩余尺寸
Flex布局模型中,弹性盒子默认沿着哪个方向排列?水平方向
如何实现内容垂直排列?
主轴默认是水平方向,侧轴默认是垂直方向
修改主轴方向属性:flex-direction
属性值 | 作用 |
---|---|
row | 行,水平(默认值) |
column | 列,垂直 |
row-reverse | 行,从右向左 |
column-reverse | 列,从下向上 |
ul li {
width: 80px;
height: 80px;
border: 1px solid #000;
display: flex;
/* 1、大前提:确定主轴方向 2、选择对应的属性实现主轴或侧轴的对齐方式 */
/* 主轴默认为水平方向 通过该属性将主轴方向修改为垂直方向 */
flex-direction: column;
}
默认情况下,多个弹性盒子如何显示?
弹性盒子换行显示:flex-wrap: wrap;
调整行对齐方式:align-content
ul {
display: flex;
border: 1px solid #000;
/* 弹性盒子换行 */
flex-wrap: wrap;
/* 调整行对齐方式 */
align-content: space-between;
height: 600px;
}
何为移动适配?
所谓移动适配就是屏幕宽度不同,网页元素尺寸不同(等比缩放),简而言之就是页面上的元素要随着设备的宽高而变化
rem单位
媒体查询
媒体查询能够检测视口的宽度,然后编写差异化的 CSS 样式,当某个条件成立时会执行对应的CSS样式
/* 当视口宽度为 375px 时,根字号为25px */
@media (width:375px) {
html {
font-size: 25px;
}
}
/* 当视口宽度为 414px 时,根字号为35px */
@media (width:414px) {
html {
font-size: 35px;
}
}
经验:目前rem布局方案中,将网页等分成10份, HTML标签的字号为视口宽度的 1/10
@media (width:320px) {
html {
font-size: 32px;
}
}
@media (width:375px) {
html {
font-size: 37.5px;
}
}
@media (width:414px) {
html {
font-size: 41.4px;
}
}
在px单位转换到rem单位过程中,哪项工作是最麻烦的?
除法运算。CSS不支持计算写法,解决方案:可以通过Less实现
何为Less?
Less是一个CSS预处理器,Less文件后缀是.less
扩充了 CSS 语言,使 CSS 具备一定的逻辑性、计算能力
注:浏览器不识别Less代码,目前阶段,网页要引入对应的CSS文件
Easy Less是一个vscode插件,它的作用是会将less文件保存自动生成对应的css文件
块注释和行注释都可使用:
单行注释:// 注释内容
块注释:/* 注释内容 */
变量:存储数据,方便使用和修改
具体语法:
@变量名: 值;
CSS属性:@变量名;
// 1、定义变量
@bg_Color: orange;
// 2、使用变量
.box {
background-color: @bg_Color;
}
.nav {
background: @bg_Color;
}
添加小括号 或 .
.box {
width: 100+60px;
width: 100-60px;
width: 100*6px;
// 除法
// 200 > rem
width: (200 / 37.5rem);
height: 100./37.5rem;
}
注:表达式存在多个单位以第一个单位为准
作用:快速生成后代选择器
.wrapper {
width: 1290px;
margin: 0 auto;
.box {
width: 300px;
height: 300px;
background-color: skyblue;
// & 表示当前选择器
&:hover {
background-color: pink;
}
}
&:hover {
color: #096;
}
}
注:&不生成后代选择器,表示当前选择器,通常配合伪类或伪元素使用
“导入”的工作方式和你预期的一样。你可以导入一个 .less
文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less
扩展名,则可以将扩展名省略掉:
具体语法:
@import '文件路径';
@import './variable.less';
@import './variable';
方式一:
配置EasyLess插件, 实现所有Less相同的导出路径
配置插件: 设置 → 搜索EasyLess → 在setting.json中编辑 → 添加代码(注:必须是双引号)
"less.compile": {
"out": "../css/"
},
方式二:
控制当前Less文件导出路径
Less文件第一行添加如下代码。注意文件夹名称后面添加 /
// out: ./less/
// out: ./css/index.css
在less文件第一行添加:// out: false
// out: false
确定设计稿对应的vw尺寸 (1/100视口宽度)
vw单位的尺寸 = px单位数值 / ( 1/100 视口宽度)
rem:市场较为常见
vw/vh:未来趋势
何为响应式?
响应式网站设计是一种网页设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局,简而言之就是,编写一套代码,适配所有不同设备
响应式网页设计基于流动布局(Fluid Grid)技术,有效解决了跨平台浏览尺寸不符的问题,得到最佳的显示效果
何为媒体查询?
所谓媒体查询就是根据条件的不同,设置不同的CSS样式
媒体特性常用写法
/*
需求
Ø 默认网页背景色是灰色
Ø 屏幕宽度 >=992, 网页背景色是粉色
Ø 屏幕宽度 >=1200, 网页背景色是skyblue
Ø 屏幕宽度 >=1200, 网页背景色是绿色
*/
body {
background-color: gray;
}
/* @media (min-width:1200px) {
body {
background-color: green;
}
} */
@media (min-width:768px) {
body {
background-color: pink;
}
}
/* 按照顺序书写,不然最后一个条件成立,上面的CSS样式会被层叠掉 */
@media (min-width:992px) {
body {
background-color: skyblue;
}
}
@media (min-width:1200px) {
body {
background-color: green;
}
}