个人博客地址 www.codermjjh.cn/ 大家走过路过不要错过
CSS的注释
-
CSS代码也可以添加注释来方便阅读:
-
CSS的注释和HTML的注释是不一样的;
-
/* 注释内容 */

link元素
- link元素是外部资源链接元素,规范了文档与外部资源的关系
- link元素通常是在head元素中
- 最常用的链接是样式表(CSS);
- 此外也可以被用来创建站点图标(比如 “favicon” 图标);
- link元素常见的属性:
- href:此属性指定被链接资源的URL。 URL 可以是绝对的,也可以是相对的。
- rel:指定链接类型,常见的链接类型:developer.mozilla.org/zh-CN/docs/…
- icon:站点图标;
- stylesheet:CSS样式;
link元素性能优化
在link中的rel设置preload优化前端加载 速度,会尽快加载浏览器所需资源计算机进制
script会阻塞浏览器的解析,所以import会阻塞解析,而link会单独加载,不会阻塞解析
认识进制
-
进制的概念
- 维基百科:进位制是一种记数方式,亦称进位计数法或位值计数法。
- 通俗理解:当数字达到某个值时,进一位(比如从1位变成2位)。
-
按照进制的概念,来理解一下十进制:
- 当数字到9的时候,用一位已经表示不了了,那么就进一位变成2位。
- 在东北没有什么是一顿烧烤不能解决的,如果有,那就两顿。
-
按照上面的来理解,二进制、八进制、十六进制:
- 二进制:当数字到1的时候,用一位已经表示不了了,那么就进一位。
- 八进制:当数字到7的时候,用一位已经表示不了了,那么就进一位。
- 十六进制:等等,用一位如何表示十六个数字呢?a(10)、b(11)、c(12) 、 d(13) 、 e(14) 、 f(15) ◼
人类的十进制
- 我们平时使用的数字都是十进制的,当我写下一个数字的时候,你会默认当做十进制来使用。
- 从发明数字的开始,人类就使用十进制,原因可能是人类正好十根手指。
- 如果人类有八根手指,现在用的可能是八进制。

计算机中的进制
- 为什么计算机更喜欢二进制呢?
- 前面我们已经介绍过了为什么计算机更喜欢二进制了;
- 和其底层的原理有关系;
- 如何表示二进制、八进制、十六进制?
- 二进制(0b开头, binary):其中的数字由0、1组成,可以回顾之前学习过的机器语言。
- 八进制(0o开头, Octonary):其中的数字由0~7组成。
- 十六进制(0x开头, hexadecimal):其中的数字由0~9和字母a-f组成(大小写都可以)
- 十进制 or 二进制:
- 虽然计算机更喜欢二进制, 但是编程中我们还是以十进制为主.
- 因为高级编程语言的目的就是更加接近自然语言, 让我们人类更容易理解.
进制之间的转换
- 十进制转其他进制:
- 整除, 取余数.
- 其他进制转十进制:
- 比如二进制的1001转成十进制: 1 * 2³ + 0 * 2² + 0 * 2 + 1 = 9
- 比如八进制的1234转成十进制: 1 * 8³ + 2 * 8² + 3 * 8 + 4 = 668
- 比如十六进制的522转成十进制: 5 * 16² + 2 * 16 + 2 = 1314
- 二进制转八进制:
- 三位转成一位八进制
- 二进制转十六进制:
- 四位转成一位十六进制
- 如果520情人节忘记了,给大家一个建议,在522那天过,因为十六进制的522,对应的十进制是1314。
css颜色
CSS表示颜色
- 在CSS中,颜色,有以下几种表示方法:
- 颜色关键字(color keywords):
- 是不区分大小写的标识符,它表示一个具体的颜色;
- 可以表示哪些颜色呢?
- developer.mozilla.org/zh-CN/docs/…
- RGB颜色:
- RGB是一种色彩空间,通过R(red,红色)、G(green,绿色)、B(blue,蓝色)三原色来组成了不同的颜色;
- 也就是通过调整这三个颜色不同的比例,可以组合成其他的颜色;
- RGB各个原色的取值范围是 0~255;
- RGB是一种色彩空间,通过R(red,红色)、G(green,绿色)、B(blue,蓝色)三原色来组成了不同的颜色;
RGB的表示方式
- RGB颜色可以通过以#为前缀的十六进制字符和函数(rgb()、rgba())标记表示。
- 方式一:十六进制符号:#RRGGBB[AA]
- R(红)、G(绿)、B (蓝)和A (alpha)是十六进制字符(0–9、A–F);A是可选的。
- 比如,#ff0000等价于#ff0000ff;
- R(红)、G(绿)、B (蓝)和A (alpha)是十六进制字符(0–9、A–F);A是可选的。
- 方式二:十六进制符号:#RGB[A]
- R(红)、G(绿)、B (蓝)和A (alpha)是十六进制字符(0–9、A–F);
- 三位数符号(#RGB)是六位数形式(#RRGGBB)的减缩版。
- 比如,#f09和#ff0099表示同一颜色。
- 四位数符号(#RGBA)是八位数形式(#RRGGBBAA)的减缩版。
- 比如,#0f38和#00ff3388表示相同颜色。
- 方式三:函数符: rgb[a](R, G, B[, A])
- R(红)、G(绿)、B (蓝)可以是(数字),或者(百分比),255相当于100%。
- A(alpha)可以是0到1之间的数字,或者百分比,数字1相当于100%(完全不透明)。
边框的形状
-
border主要是用来给盒子增加边框的, 但是在开发中我们也可以利用边框的特性来实现一些形状:

-
假如我们将border宽度设置成50会是什么效果呢?
- 如果我们进一步, 将另外三边的颜色去除呢?
- 如果我们将这个盒子旋转呢?
-
所以利用border或者CSS的特性我们可以做出很多图形:
Web字体
认识Web字体
-
在之前我们有设置过页面使用的字体: font-family
- 我们需要提供一个或多个字体种类名称,浏览器会在列表中搜寻,直到找到它所运行的系统上可用的字体。
- 这样的方式完全没有问题,但是对于传统的web开发人员来说,字体选择是有限的;
- 这就是所谓的 Web-safe 字体;
- 并且这种默认可选的字体并不能进行一些定制化的需求;
-
比如下面的字体样式, 系统的字体肯定是不能实现的

-
那么我们是否依然可以在网页中使用这些字体呢? 使用Web Fonts即可.
Web fonts的工作原理
- 首先, 我们需要通过一些渠道获取到希望使用的字体(不是开发来做的事情):
- 对于某些收费的字体, 我们需要获取到对应的授权;
- 对于某些公司定制的字体, 需要设计人员来设计;
- 对于某些免费的字体, 我们需要获取到对应的字体文件;
- 其次, 在我们的CSS代码当中使用该字体(重要):
- 具体的过程看后面的操作流程;
- 最后, 在部署静态资源时, 将HTML/CSS/JavaScript/Font一起部署在静态服务器中;
- 用户的角度:
- 浏览器一个网页时, 因为代码中有引入字体文件, 字体文件会被一起下载下来;
- 浏览器会根据使用的字体在下载的字体文件中查找、解析、使用对应的字体;
- 在浏览器中使用对应的字体显示内容;
使用Web Fonts
-
课堂上为了给大家演示,通过如下的方式获取到了字体文件:
-
第一步:在字体天下网站下载一个字体
- www.fonts.net.cn/fonts-zh-1.…
- 默认下载下来的是ttf文件;
-
第二步:使用字体;
-
使用过程如下:
- 将字体放到对应的目录中
- 通过@font-face来引入字体, 并且设置格式
- 使用字体
-
注意: @font-face 用于加载一个自定义的字体;
web-fonts的兼容性
- 我们刚才使用的字体文件是 .ttf, 它是TrueType字体.
- 在开发中某些浏览器可能不支持该字体, 所以为了浏览器的兼容性问题, 我们需要有对应其他格式的字体;
- TrueType字体:拓展名是 .ttf
- OpenType/TrueType字体:拓展名是 .ttf、.otf,建立在TrueType字体之上
- Embedded OpenType字体:拓展名是 .eot,OpenType字体的压缩版
- SVG字体:拓展名是 .svg、 .svgz
- WOFF表示Web Open Font Format web开放字体:拓展名是 .woff,建立在TrueType字体之上
- 这里我们提供一个网站来生产对应的字体文件:
- font.qqe2.com/# 暂时可用
web fonts兼容性写法
-
如果我们具备很强的兼容性, 那么可以如下格式编写:

-
这被称为"bulletproof @font-face syntax(刀枪不入的@font-face语法)“:
- 这是 Paul Irish早期的一篇文章提及后@font-face开始流行起来 (Bulletproof @font-face Syntax)。
-
src用于指定字体资源
- url指定资源的路径
- format用于帮助浏览器快速识别字体的格式;
字体图标
认识字体图标
- 思考:字体可以设计成各式各样的形状,那么能不能把字体直接设计成图标的样子呢?
- 当然可以,这个就叫做字体图标。
- 字体图标的好处:
- 放大不会失真
- 可以任意切换颜色
- 用到很多个图标时,文件相对图片较小
- 字体图标的使用:
- 登录阿里icons(www.iconfont.cn/)
- 下载代码,并且拷贝到项目中
- 将字体文件和默认的css文件导入到项目中
字体图标的使用
- 字体图标的使用步骤:
- 第一步: 通过link引入iconfont.css文件
- 第二步: 使用字体图标
- 使用字体图标常见的有两种方式:
- 方式一: 通过对应字体图标的Unicode来显示代码;
- 方式二: 利用已经编写好的class, 直接使用即可;

精灵图
认识精灵图 CSS Sprite
- 什么是CSS Sprite
- 是一种CSS图像合成技术,将各种小图片合并到一张图片上,然后利用CSS的背景定位来显示对应的图片部分
- 有人翻译为:CSS雪碧、CSS精灵
- 使用CSS Sprite的好处
- 减少网页的http请求数量,加快网页响应速度,减轻服务器压力
- 减小图片总大小
- 解决了图片命名的困扰,只需要针对一张集合的图片命名
- Sprite图片制作(雪碧图、精灵图)
- 方法1:Photoshop, 设计人员提供
- 方法2:www.toptal.com/developers/…
精灵图的使用
- 精灵图如何使用呢?
- 精灵图的原理是通过只显示图片的很小一部分来展示的;
- 通常使用背景:
- 设置对应元素的宽度和高度
- 设置精灵图作为背景图片
- 调整背景图片的位置来展示
- 如何获取精灵图的位置
cusor鼠标指针
- cursor可以设置鼠标指针(光标)在元素上面时的显示样式
- cursor常见的设值有
- auto:浏览器根据上下文决定指针的显示样式,比如根据文本和非文本切换指针样式
- default:由操作系统决定,一般就是一个小箭头
- pointer:一只小手,鼠标指针挪动到链接上面默认就是这个样式
- text:一条竖线,鼠标指针挪动到文本输入框上面默认就是这个样式
- none:没有任何指针显示在元素上面
CSS属性 - white-space
- white-space用于设置空白处理和换行规则
- normal:合并所有连续的空白,允许单词超屏时自动换行
- nowrap:合并所有连续的空白,不允许单词超屏时自动换行
- pre:阻止合并所有连续的空白,不允许单词超屏时自动换行
- pre-wrap:阻止合并所有连续的空白,允许单词超屏时自动换行
- pre-line:合并所有连续的空白(但保留换行),允许单词超屏时自动换行

CSS属性 - text-overflow
-
text-overflow通常用来设置文字溢出时的行为
- clip:溢出的内容直接裁剪掉(字符可能会显示不完整)
- ellipsis:溢出那行的结尾处用省略号表示
-
text-overflow生效的前提是overflow不为visible
-
常见的是将white-space、text-overflow、overflow一起使用:
white-space: nowrap; text-overflow: ellipsis; overflow: hidden;
CSS中的函数
- 在前面我们有使用过很多个CSS函数:
- 比如rgb/rgba/translate/rotate/scale等;
- CSS函数通常可以帮助我们更加灵活的来编写样式的值;
- 下面我们再学习几个非常好用的CSS函数:
- var: 使用CSS定义的变量;
- calc: 计算CSS值, 通常用于计算元素的大小或位置;
- blur: 毛玻璃(高斯模糊)效果;
- gradient:颜色渐变函数;
CSS函数 - var
-
CSS中可以自定义属性
-
属性名需要以两个减号(--)开始;
-
属性值则可以是任何有效的CSS值;
div { --why-color: red; }
-
-
可以通过var函数来使用:
span { color: var(--why-color) } -
规则集定义的选择器, 是自定义属性的可见作用域(只在选择器内部有效)
- 所以推荐将自定义属性定义在html中,也可以使用 :root 选择器;
CSS函数 -calc
-
calc() 函数允许在声明 CSS 属性值时执行一些计算。
- 计算支持加减乘除的运算;
- 和 - 运算符的两边必须要有空白字符。
- 通常用来设置一些元素的尺寸或者位置;
.box .container2 { display: inline-block; width: calc(100% - 60px); height: 100%; background-color: #0ff; } - 计算支持加减乘除的运算;
CSS函数 - blur
-
blur() 函数将高斯模糊应用于输出图片或者元素;
- blur(radius)
- radius, 模糊的半径, 用于定义高斯函数的偏差值, 偏差值越大, 图片越模糊;
-
通常会和两个属性一起使用:
-
filter: 将模糊或颜色偏移等图形效果应用于元素;
-
backdrop-filter: 为元素后面的区域添加模糊或者其他效果;

-
CSS函数 – gradient
-
是一种
CSS数据类型的子类型,用于表现两种或多种颜色的过渡转变。
-
CSS的
数据类型描述的是2D图形;
-
比如background-image、list-style-image、border-image、content等;
-
常见的方式是通过url来引入一个图片资源;
-
它也可以通过CSS的 函数来设置颜色的渐变;
-
-
常见的函数实现有下面几种:
- linear-gradient():创建一个表示两种或多种颜色线性渐变的图片;
- radial-gradient():创建了一个图像,该图像是由从原点发出的两种或者多种颜色之间的逐步过渡组成;
- repeating-linear-gradient():创建一个由重复线性渐变组成的
;
- repeating-radial-gradient():创建一个重复的原点触发渐变组成的
;
- 等等;
linear-gradient的使用
-
linear-gradient:创建一个表示两种或多种颜色线性渐变的图片;
background-image: linear-gradient(blue,red); background-image: linear-gradient(to right,blue,red); background-image: linear-gradient(to right bottom,blue,red); background-image: linear-gradient(45deg,blue,red); background-image: linear-gradient(to right,blue,red 10%,purple 40px,orange); -
radial-gradient:创建了一个图像,该图像是由从原点发出的两种或者多种颜色之间的逐步过渡组成;
background-image: redial-gradient(blue,red); background-image: redial-gradient(at 0% 50%, red,tellow);

FC – Formatting Context (格式化上下文)
-
什么是FC呢?

-
FC的全称是Formatting Context,元素在标准流里面都是属于一个FC的;

- 所有盒子在标准流中是属于一个fc(格式化上下文),可能使用块级(block)或者行内(inline),但是不会同时属于这两个。块级元素,div、p、h1、h2等都属于一个BFC(块级格式化上下文)。行内元素a、span、i、img等都属于一个IFC(行内格式化上下文)。
-
块级元素的布局属于Block Formatting Context(BFC)
- 也就是block level box都是在BFC中布局的;
-
行内级元素的布局属于Inline Formatting Context(IFC)
- 而inline level box都是在IFC中布局的;
BFC – Block Formatting Context
-
block level box都是在BFC中布局的,那么这个BFC在哪里呢?拿出来给我看看。

-
MDN上有整理出在哪些具体的情况下会创建BFC:
- 根元素()
- 浮动元素(元素的 float 不是 none)
- 绝对定位元素(元素的 position 为 absolute 或 fixed)
- 行内块元素(元素的 display 为 inline-block)
- 表格单元格(元素的 display 为 table-cell,HTML表格单元格默认为该值),表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)
- 匿名表格单元格元素(元素的 display 为 table、table-row、 table-row-group、table-header-group、table-footer-group(分别是HTML table、
- row、tbody、thead、tfoot 的默认属性)或 inline-table)
- overflow 计算值(Computed)不为 visible 的块元素
- 弹性元素(display 为 flex 或 inline-flex 元素的直接子元素)
- 网格元素(display 为 grid 或 inline-grid 元素的直接子元素)
- display 值为 flow-root 的元素
BFC有什么作用呢?
-
我们来看一下官方文档对BFC作用的描述:

-
简单概况如下:
- 在BFC中,box会在垂直方向上一个挨着一个的排布;
- 垂直方向的间距由margin属性决定;
- 在同一个BFC中,相邻两个box之间的margin会折叠(collapse);
- 在BFC中,每个元素的左边缘是紧挨着包含块的左边缘的;
-
那么这个东西有什么用呢?
- 解决margin的折叠问题;
- 解决浮动高度塌陷问题;
BFC的作用一:解决折叠问题(权威)
-
在同一个BFC中,相邻两个box之间的margin会折叠(collapse)
-
官方文档明确的有说
-
The vertical distance between two sibling boxes is determined by the 'margin' properties. Vertical margins between adjacent block-level boxes in a block formatting context collapse.
-
那么如果我们让两个box是不同的BFC呢?那么就可以解决折叠问题。

-
BFC的作用二:解决浮动高度塌陷(权威)
-
网上有很多说法,BFC可以解决浮动高度塌陷,可以实现清除浮动的效果。
- 但是从来没有给出过BFC可以解决高度塌陷的原理或者权威的文档说明;
- 他们也压根没有办法解释,为什么可以解决浮动高度的塌陷问题,但是不能解决绝对定位元素的高度塌陷问题呢?
-
事实上,BFC解决高度塌陷需要满足两个条件:
- 浮动元素的父元素触发BFC,形成独立的块级格式化上下文(Block Formatting Context);
- 浮动元素的父元素的高度是auto的;
-
BFC的高度是auto的情况下,是如下方法计算高度的
-
如果只有inline-level,是行高的顶部和底部的距离;
-
如果有block-level,是由最底层的块上边缘和最底层,块盒子的下边缘之间的距离
-
如果有绝对定位元素,将被忽略;
-
如果有浮动元素,那么会增加高度以包括这些浮动元素的下边缘

-
overflow属性
- overflow用于控制内容溢出时的行为
- visible:溢出的内容照样可见
- hidden:溢出的内容直接裁剪
- scroll:溢出的内容被裁剪,但可以通过滚动机制查看
- 会一直显示滚动条区域,滚动条区域占用的空间属于width、height
- auto:自动根据内容是否溢出来决定是否提供滚动机制
css样式不生效问题总结
-
为何有时候编写的CSS属性不好使,有可能是因为
- 选择器的优先级太低
- 选择器没选中对应的元素
- CSS属性的使用形式不对
- 元素不支持此CSS属性,比如span默认是不支持width和height的
- 浏览器不支持此CSS属性,比如旧版本的浏览器不支持一些css module3的某些属性
- 被同类型的CSS属性覆盖,比如font覆盖font-size
- 建议
- 充分利用浏览器的开发者工具进行调试(增加、修改样式)、查错
