CSS简称样式表,它的作用就是美化网页
CSS的概念和基础语法
CSS的基本语法是选择器+声明
例如:
h1{
color: blue;
font-size: 12px;
}
这个简单的css语句中:
h1:选择器,即这个css可以应用于h1
{}中的内容是声明,包括属性名和属性值,每条用分号隔开
css可以直接写在html文件中,例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
h3{
color: blue;
font-size: 30px;
}
p{
color: red;
font-size: 12px;
}
</style>
</head>
<body>
<h3>标题内容</h3>
</body>
</html>
在这个案例中,使用html添加css,且要定义在<head>
标签的<style>
标签中,同时css可以添加多条
CSS的引入方式
内联样式
直接以style属性的形式写在标签里面
<body>
<p style="color: red;font-size: 30px;">内联样式</p>
</body>
这种形式维护成本高,不清晰,每增加一个标签就得重新添加一次
内部样式表
即在<head>
标签的<style>
标签中定义样式,并且该样式可以应用到所有的选择器标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
p{
color: red;
font-size: 30px;
}
</style>
</head>
<body>
<p>内联样式</p>
</body>
</html>
但是这种场景无法处理跨页面的通用样式,如果有页面跳转,还需要重新复制一份,维护成本也很高
外部样式
外部样式表文件css,以<head>
标签中的<link>
标签引入,可以做到通用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<link rel="stylesheet" href="./css/cssProduct.css">
</head>
<body>
<p>首页</p>
<a href="./cssProductPage.html">点击跳转产品详情</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>产品详情</title>
<link rel="stylesheet" href="./css/cssProduct.css">
</head>
<body>
<p>产品详情</p>
<a href="./cssMainPage.html">返回首页</a>
</body>
</html>
p{
color: red;
font-size: 30px;
}
好处在于可以做到css样式通用,且只改变css文件,进而改变所有需要引用的html文件
css的高级语法
选择器
选择器的分类
在关注选择器分类时需要关注选择器的适应对象和优先级,高优先级样式的同名属性会覆盖低优先级同名属性,如果高优先级没有,则去更低优先级找
全局选择器
*{
color: red;
font-size: 30px;
}
以*开头,用于匹配所有元素,优先级最低,一般只做一些样式的初始化操作
元素选择器
<p>
、<b>
、<div>
、<a>
、<img>
、<h1>
、<body>
等等,所有的标签都可以是选择器
该类型的选择器针对同名标签,就比如上面用过的
p{
color: red;
font-size: 30px;
}
这个样式会应用于所有<p>
标签
使用元素选择器也可以实现段落内部分字符的匹配,其实是使用的元素嵌套,比如我有一个样式:
*{
color: red;
font-size: 30px;
}
p{
font-size: 15px;
}
span{
color: blue;
font-size: 20px;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./css/cssfenlei.css">
</head>
<body>
<h1>首页</h1>
<p>首页的作用是<span>展示</span>风采</p>
</body>
</html>
任何通过这种嵌套的方式就可以实现“展示”的样式特殊化
这种嵌套的场景,优先生效最近的标签,即就近原则
类选择器
通过对标签指定class属性,并给class属性指定样式实现,标签的class属性没有数量限制,一个class样式也可以给多个标签使用
<body>
<p class="emo size">我emo了</p>
</body>
.emo{
color: gray;
font-size: 100px;
}
.size{
font-size: 100px;
}
这里要注意的是匹配多种class,是在一个属性里面加空格,而不是写多个class属性
id选择器
使用id属性+#定义样式即id选择器,与类选择器区别在于,id在一个页面中是全局唯一的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#css{
color: red;
font-size: 100px;
}
</style>
</head>
<body>
<p id="css">测试id选择器</p>
</body>
</html>
需要注意的是,id不能以数字开头
合并选择器
一个样式声明可以有多个选择器匹配规则,适用于多种标签相同样式的场景,减少重复代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
p,h3{
color: gray;
font-size: 100px;
}
</style>
</head>
<body>
<h3>我是标题</h3>
<p>我是段落</p>
</body>
</html>
能合并的项目包括标签、类,例如:
.class1,.class2{
……
}
选择器的优先级
内联样式>id选择器>类选择器>标签选择器
使用style属性的优先级最高
相同优先级的选择器,后面的覆盖前面的,例如两个class选择器,后执行的把先执行的覆盖
关系选择器
后代选择器
E F{}
选择所有被E包含的F标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.ul1 .li1{
color: red;
}
</style>
</head>
<body>
<ul class="ul1">
<li class="li1">子1</li>
<li class="li1">子2</li>
<li class="li1">子3</li>
</ul>
</body>
</html>
子代选择器
E>F{}
只有直接子代生效
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div>p{
color: blue;
}
</style>
</head>
<body>
<div>
<p>直接子代p</p>
<ul>
<li><p>间接子代1</p></li>
<li><p>间接子代2</p></li>
<li><p>间接子代3</p></li>
</ul>
</div>
</body>
</html>
相邻兄弟选择器
E+F{}
只有E和相邻的第一个F生效
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
h3+p{
color: green;
}
</style>
</head>
<body>
<h3>我是大哥</h3>
<p>我是弟弟</p>
<p>我是小弟弟</p>
</body>
</html>
需要注意的是:
h3上面的不生效,下面的生效
h3和p之间不能有其他标签,否则p的格式不生效
字体属性
color:颜色,可选写法包括字母、二进制值、RGB表示三类
p{
color: red;
color: #ff0000;
color: rgb(255, 0, 0);
}
font-size:大小,单位是px,也有字母表示
chrome最小接收就是12px,再小只能缩放了
font-weight:粗细
枚举值bold、bolder、lighter
或用数字100-900,其中默认值为400,bold为700
font-style:样式,常用的枚举有normal正常,italic斜体
font-family:我们正常理解的字体,即微软雅黑、宋体等,默认是微软雅黑
背景属性
五个常用属性:
background-color:背景颜色
backgroud-image:背景图,可以通过url()函数增加路径,与
<a>
标签的逻辑一样backgroud-repeat:填充方式
默认值是repeat,即水平、竖直都平铺
repeat-x代表水平平铺,repeat-y代表垂直平铺,no-repeat代表不平铺
backgroud-size:背景尺寸,它有四种设置方式
固定尺寸:
backgroud-size: 50px 150px
比例:
background-size: 100% 100%
保存纵横比缩放到覆盖整个区域:
background-size: cover
,这里只关心可以覆盖,图片可能会被截断保持纵横比缩放到适合区域的大小:
background-size: contain
,这里更关心图片完整展示,可能会进行repeat
backgroud-position:背景渲染位置,也是三种写法:
使用center、left、top、bottom、right五个之两两匹配,进行大概的设置:
background-position: center center
使用百分比渲染:
background-position: 50% 50%
,50%对应center使用像素位置进行渲染:
background-position: 50px 50px
文本属性
常用的有以下几种:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
h3{
text-align: center;
text-decoration: line-through;
}
.p1{
text-transform: uppercase;
}
.p2{
text-indent: 50px;
}
</style>
</head>
<body>
<h3>我是标题</h3>
<p class="p1">I'm an artical</p>
<p class="p2">我是新段落</p>
</body>
</html>
text-align:对齐位置
text-decoration:文本装饰
underline:下划线
overline:上划线
line-through:删除线
text-transform:文本大小写
capitalize:首字母大写
uppercase:全部大小
lowercase:全部小写
text-indent:设置首航缩进
表格属性
常用的包括:
普通边框:使用border属性加普通边框,设置其格式,格式之间使用空格分割
折叠边框:使用border-collapse属性可以设置折叠,即重复的边框合并成一条展示
table,td{
border: 1px solid red;
border-collapse: collapse;
}
长宽属性:使用height和width,一般只设置table就可以了
table{
height: 500px;
width: 300px;
}
表格内文字位置:使用text-align和vertical-align设置水平和垂直对齐,一般给td设置即可
表格内四个方向占位填充:padding属性,让文字上下左右有指定长度的空隙,效果和对齐差不多,两个值分别代表上下边距和左右边距,
padding 10px 50px
使用padding-left、padding-right、padding-bottom、padding-top可以设置四个方向
表格颜色:color
背景色:backgroud-color
td{
text-align: center;
vertical-align: bottom;
background-color: azure;
color: aqua;
}
CSS设计理念
css设计理念-盒子模型
盒子模型(box-model)是css的一种设计理念
这种设计理念把HTML标签视为一个盒子,每个盒子都有它的外边距(margin)、内边距(padding)、边框(border)、实际内容(content)
在这个盒子里面包裹其他的标签,即盒子内也是其他的盒子
margin和padding的语法是类似的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width: 100px;
height: 100px;
padding: 50px 10px;
background-color: green;
border: 5px solid blue;
margin: 50px 10px;
}
</style>
</head>
<body>
<div>我是内容</div>
<p>我是段落</p>
</body>
</html>
css3移动端设计理念-弹性盒子模型
是为了适配不同的屏幕尺寸而演进的,是盒子模型的一种优化
弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)
通过设置display属性值为flex可以定义弹性容器
通过
flex-direction: row|row-reverse|column|column-reverse
属性可以控制弹性方向,作用于盒子:
使用
justify-content: flex-start|flex-end|center
属性可以控制弹性元素在盒子中的上下居中,使用align-item: flex-start|flex-end|center
控制左右居中,作用于盒子;使用flex/flex-grow属性可以设置子元素的权重,作用于子元素设置后会使子元素自己的长宽不生效。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container{
width: 500px;
height: 500px;
background-color: #555555;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.box1{
width: 100px;
height: 100px;
background-color: red;
flex: 2;
}
.box2{
width: 100px;
height: 100px;
background-color: green;
flex: 2;
}
.box3{
width: 100px;
height: 100px;
background-color: blue;
flex: 1;
}
</style>
</head>
<body>
<div class="container">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
</body>
</html>
通过尝试设置flex-direction的值,可以发现三个颜色的盒子变化了其位置,重点关注column值;
通过尝试设置justify-content、align-item的值,发现三个颜色小盒子居中对齐格式变了
最后添加flex后发现子元素长度已经不再生效
文档流
标准文档流和问题
文档流是页面中可显示对象在排列时所占用的位置/空间
例如块元素一般上下摆放,而内联元素一般自左向右
常见的一些设计场景包括:
高矮不齐,底边对齐
空白折叠现象
无论多少个空格、tab、换行都会折叠成一个
如果想让
<img>
标签之间没有空隙,必须紧密连接
高矮不齐,底边对齐
例如这个场景,文字和图片是底边对齐的
<body>
<span>我们一起看美女</span>
<img src="./resource/girl.webp" alt="">
</body>
空格折叠
例如这种多个空格只显示一个的场景
<body>
<p>大家好,我是 p标签</p>
</body>
图片空隙
正常两个标签换行写,中间是有空隙的
<body>
<img src="./resource/girl.webp" alt="">
<img src="./resource/girl.webp" alt="">
</body>
脱离文档流
脱离文档流有浮动、绝对定位、相对定位三种套路,解决标准文档流可能出现的问题
浮动
浮动就是增加一个浮动层放置内容
通过float属性定义向哪个方向浮动,任何元素都可以浮动,浮动方向只有左和右,浮动后的元素可以脱离文档流
什么叫浮动层?其实可以理解为word中图片的在上方覆盖,即两个素材可能变成两层,出现互相压盖
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box{
width: 200px;
height: 200px;
background-color: aqua;
float: left;
}
.container{
width: 400px;
height: 400px;
background-color: blueviolet;
}
</style>
</head>
<body>
<div class="box"></div>
<div class="container"></div>
</body>
</html>
例如这个场景div的覆盖
同时float还可以解决<img>
元素的空隙问题:
<body>
<img style="float: left; width: 200px; height: 200px;" src="./resource/girl.webp" alt="">
<img style="float: left; width: 200px; height: 200px;" src="./resource/girl.webp" alt="">
</body>
另一个场景是使用<ul>
无序列表+float制作横向摆放的导航栏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
ul li{
float: left;
margin: 0 40px;
list-style: none;
}
</style>
</head>
<body>
<ul>
<li>导航1</li>
<li>导航2</li>
<li>导航3</li>
<li>导航4</li>
<li>导航5</li>
</ul>
</body>
</html>
这里除了应用了浮动,还应用了盒子模型中的外边框设计
在浮动元素的设计中,如果宽度不够,会把元素挤到下面一行中
浮动产生的一些问题
浮动也会产生一些问题,即使父容器塌陷,且影响后续的元素,例如这个场景:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container{
background-color: gray;
width: 500px;
}
.box{
background-color: aqua;
width: 50px;
height: 50px;
}
</style>
</head>
<body>
<div class="container">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</body>
</html>
父容器container是根据子容器自动调整高度的,因为三个box都是50,因此父容器会变成150
如果对子容器浮动,这时子容器和父容器已经是两个图层了,container的高度就不会再适配到150了
.box{
background-color: aqua;
width: 50px;
height: 50px;
float: left;
}
这个时候如果再增加第四个子元素box2,不使用浮动,则container的大小完全由box2决定,且box2会藏到box下面,即3个box的格式跟box2和container完全独立
对于这种问题,可以使用以下几个方案解决:
给父容器增加高度、宽度限定,可以避免父容器 塌陷,然后给非float子元素增加clear属性可以让其不受浮动元素影响,其枚举包括left、right、both,避免受左右浮动影响
给父容器增加
overflow: hidden; clear: both;
也可以避免父容器塌陷,非float子元素同样增加clear属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container{
background-color: gray;
width: 500px;
overflow: hidden;
clear: both;
}
.box{
background-color: aqua;
width: 50px;
height: 50px;
float: left;
}
.box2{
background-color: rgb(234, 14, 14);
width: 50px;
height: 50px;
clear: both;
}
</style>
</head>
<body>
<div class="container">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box2"></div>
</div>
</body>
</html>
增加父容器的伪对象,也可以解决父容器的问题,子容器还是同上,这种不常用
.container{
background-color: gray;
width: 500px;
}
.container::after{
content: "";
overflow: hidden;
clear: both;
}
定位
定位就是通过position属性指定元素放置的位置,可选值包括:
relative:相对定位
absolute:绝对定位
fixed:固定定位
设置定位后可以使用四个值调整:left、right、bottom、top
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box1{
width: 200px;
height: 200px;
background-color: red;
position: relative;
left: 200px;
top: 100px;
}
.box2{
width: 400px;
height: 400px;
background-color:aqua;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
相对定位和绝对定位是相对于有定位的父级元素确定位置,如果不存在父级,则逐级向上寻找知道顶层文档
这个案例中使用relative和absolute的差异在于box2是否收到了box1的影响,即box1是否在文档流中,下面分别是使用两个的效果:
每个absolute定位都会生成一个层,而浮动只会生成一个浮动层
fixed定位用于随页面滚动但是始终定位的内容,一般页面上只有个别的模块即可
层
css的不同层也有顺序,可以用z-index属性修改其层数,大值会在更上面的层
.box1{
width: 200px;
height: 200px;
background-color: red;
position: relative;
left: 200px;
top: 100px;
z-index: 100;
}
CSS3新特性
圆角
border-radius可以设置圆角
div{
width: 100px;
height: 50px;
background-color: red;
border-radius: 50px;
}
border-radius可以有多个值,如果有两个值,分别代表左上+右下、右上+左下
阴影
box-shadow属性代表阴影,有四个值:h-shadow v-shadow blur color,分别代表水平阴影、竖直阴影、模糊度、颜色
.shadow{
width: 125px;
height: 150px;
margin: 0 auto;
box-shadow: 4px 4px 10px rgb(148, 148, 159);
}
其中h-shadow从负值到正值,阴影右左到右便宜越来越多,v-shadow从正值到负值,阴影从右到左偏移越来越多
这样我们做出了一个卡片悬浮的效果
动画
动画的作用是使一个元素从一个样式逐渐变为另一个样式,样式改变的次数是随意的
创建动画
使用@keyframes{}创建动画,然后使用from和to表示从哪个样式变化到哪个样式,使用模板如下:
@keyframes name {
from|0%{
css样式
}
percent{
css样式
}
to|10%{
css样式
}
}
其中:
name是动画名称
percent是百分比值
@keyframes myAnim {
0%{
background-color: red;
}
20%{
background-color: orange;
}
40%{
background-color: yellow;
}
60%{
background-color: yellowgreen;
}
80%{
background-color: blueviolet;
}
100%{
background-color: red;
}
}
执行动画
使用animation执行动画,其可选值包括:
name:设置要执行的动画名称
duration:持续时间
timing-function:设置动画效果的速率
ease:逐渐变慢
liner:匀速
ease-in:加速
ease-out:减速
ease-in-out:先加速后减速
delay:设置动画开始时间/延迟执行
iteration-count:设置动画循环次数,infinite为无限次
direction:动画播放方向
normal:向前播放
alternate:第偶数次向前,奇数次向后播放
animation-play-state:动画播放状态,running为播放,pause代表暂停
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
@keyframes myAnim {
0%{
background-color: red;
}
20%{
background-color: orange;
}
40%{
background-color: yellow;
}
60%{
background-color: yellowgreen;
}
80%{
background-color: blueviolet;
}
100%{
background-color: red;
}
}
div{
width: 200px;
height: 200px;
background-color: red;
animation: myAnim 5s linear 0s infinite normal;
}
div:hover{
animation-play-state: paused;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
分析下这个,首先构造了一个变色动画myAnim
然后在div的css中引用了这个myAnim动画,它的播放周期是5s,播放速度是匀速,不延迟,无限次播放,播放顺序是正向
然后增加了一个div:hover
样式,它的作用是响应鼠标移动到该div上触发的事件,移动上去之后动画播放暂停
使用透明度属性opacity: 0
到opacity: 1
加上一些阴影效果,与动画搭配可以实现呼吸效果
媒体查询
媒体查询使前端页面在不同终端设备下达到不同效果,根据设备大小自动识别加载不同样式
例如一个300px长宽的div,在电脑上分辨率高,只占一小块,但是到了收手机上分辨率低,就占了很大一块
在vscode创建html后补全代码,会自动带上下面这个标签:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
它<meta>
标签作用就是控制等比例缩放,其属性包括:
width=device-width
:宽度等于当前设备宽度initial-scale=1.0
:设置初始缩放比例max-scale=1.0
:允许用户缩放的最大比例,默认为1user-scalable
:用户是否可以手动缩放,默认为no
使用这个<meta>
标签,页面将禁止根据设备的自动缩放,不使用<meta>
标签则会使页面根据设备自动缩放
还有一种通过@media主动查询的写法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width: 300px;
height: 300px;
background-color: red;
}
@media screen and (max-width: 768px){
.box{
background-color: blue;
}
}
@media screen and (min-width: 768px) and (max-width: 996px) {
.box{
background-color: purple;
}
}
@media screen and (min-width: 996px) {
.box{
background-color: red;
}
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
从而实现在768手机、996平板、电脑屏幕上的加载区别
结合媒体查询,配合css中的display: none
属性可以实现在电脑、平板、手机上显示的差异
雪碧图
例如表情包,种类很多,如果页面上要做一个评论功能,总不能我用哪个表情包都要搞一次网络加载,这样效率很低
常见的方案是把所有表情包封装在一张图里面一次性加载,然后用到哪个就加载哪个
这个方案就叫雪碧图/精灵图:CSS sprite
它的作用就是允许将网页中零散的图片包含进一张大图,减少加载开销,提升性能
雪碧图的原理如下:
通过background-image属性引入背景图片
通过background-position属性把图片修改到对应位置
看下面这个案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.icon1{
display: block;
width: 50px;
height: 65px;
background-image: url(./resource/表情包.jpg);
}
.icon2{
display: block;
width: 50px;
height: 65px;
background-image: url(./resource/表情包.jpg);
background-position: -50px 0;
}
</style>
</head>
<body>
<span class="icon1"></span>
<span class="icon2"></span>
</body>
</html>
通过一张sprite表情包图片,利用span限定长款,加上位置迁移实现了两个小表情的加载:
首先span是一个行内元素,长宽设置不生效,因此这里要使用
display: block
将其修改为块元素然后两个icon类,分别对应第一个和第二个表情的加载
正常来讲,表情包sprite图的设计是提前搞好的,有明确的大小、间隔数据,这样前端在做移动的时候就非常好开发了
字体图标
字体图标是为了解决用图片展示产生的图片量大、加载慢的问题
此外,如果需要修改样式,例如到了公祭日需要修改为灰色,这时候每个图片修改就非常麻烦,用字体图标就很方便了
常用的字体图标比如阿里的矢量图标库
使用字体图标的好处在于:
可以使用css直接设置颜色
加载快,减少http网络请求
本质是字体,因此兼容很多新的浏览器
使用iconfont作为css资源的时候,要把图标加入购物车,选择下载代码
这里注意可以把一批矢量图标一起添加到购物车,一起下载,下载下来的源码中包含一个demo_index.html,其中提供了矢量图标的三种用法
以Font Class用法为例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./iconfont/iconfont.css">
<style>
span{
font-size: 50px;
}
</style>
</head>
<body>
<span class="iconfont icon-shouye"></span>
</body>
</html>
首先在<head>中增加了<link>标签,引用到iconfont.css文件
然后通过span class设置,引入·iconfont icon-shouye
,即下面这个地方的路径
但是预览图片发现了一个问题,使用span的css设置font-size :50px
并未生效,通过前端页面可以发现:
span css设置的50被其本身的类名覆盖了,可以通过新增类名再次覆盖从而修改其大小:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./iconfont/iconfont.css">
<style>
.icon{
font-size: 50px;
color: red;
}
</style>
</head>
<body>
<span class="iconfont icon-shouye icon"></span>
</body>
</html>
同时我们自己通过color属性修改了其颜色
评论区