JavaScript
- JavaScript引擎等待宿主环境分配宏观任务,而在宏观任务中有包含了一个微观任务队列
- setTimeout()是浏览器API,它产生宏任务,Promise是JavaScript内部的微任务,所以promise先于setTimeout
- 函数调用时使用的引用,决定了函数执行时刻的this值。
- 箭头函数会继承外层函数调用的this绑定
- var/let等预处理会在当前作用域做申明,但是不会赋值
- 而function不同,在全局和var相似,不同的是不仅申明函数,还会赋值;而在if等语句中,只会申明而不会被提前赋值
HTML
- em还有重音的含义
- hgroup表示标题组,这样就不会产生上下层级
- 一个body中一般包含头部header,边栏aside,主体内容节(一个或者多个)section,footer尾部
<body>
<header>
<nav>
……
</nav>
</header>
<aside>
<nav>
……
</nav>
</aside>
<section>……</section>
<section>……</section>
<section>……</section>
<footer>
<address>……</address>
</footer>
</body>
- 而article是一种特别的结构,表示具有独立性质的文章。所以article和body具有相似的结构
<body>
<header>……</header>
<article>
<header>……</header>
<section>……</section>
<section>……</section>
<section>……</section>
<footer>……</footer>
</article>
<article>
……
</article>
<article>
……
</article>
<footer>
<address></address>
</footer>
</body>
- header和footer一般是放在article或body的直接子元素,footer也可以和aside,nav,section相关联
- aside表示和文章主体不那么相关的部分,可能包含导航,广告等工具性质的内容
- aside/header中都可能出现导航nav
- abbr表示缩写
<abbr title="World Wide Web">WWW</abbr>.
- hr表示故事走向的转变或者话题的转变,所以需要看语言来使用
- 有三个跟引述相关的标签 blockquote表示段落级引述,q表示行内的引述内容,cite表示引述的作品名
- 对于时间应该加上time标签,方便机器阅读
- figure用于表示与著文章相关的图像、照片等流内容
<figure>
<img src="https:
<figcaption>The NeXT Computer used by Tim Berners-Lee at CERN.</figcaption>
</figure>
- 对于定义应该使用dfn
The <dfn>Internet</dfn> is a global system of interconnected computer networks.
- ol/ul/li
<nav>
<h2>Contents</h2>
<ol>
<li><a href="...">History</a></li>
<li><a href="...">Function</a>
<ol>
<li><a href="...">Linking</a></li>
<li><a href="...">Dynamic updates of web pages</a></li>
...
</ol>
</li>
...
</ol>
</nav>
- pre表示预先排版过的,不需要进行排版
- samp标签表示一段用户应该对其没有什么其他解释的文本字符
html和CSS
带@的规则
- @charset用于提示css文件使用的字符编码方式,必须出现在最前面
- @import用于引入一个css文件
@import "mystyle.css";
@import url("mystyle.css");
- @media,能对设备的类型进行一些判断
- @page,用于分页媒体访问网页时的表现设置
- @counter-style,用于定义列表项的表现
@counter-style triangle {
system: cyclic;
symbols: ‣;
suffix: " ";
}
- @key-frames,定义动画关键帧
@keyframes diagonal-slide {
from {
left: 0;
top: 0;
}
to {
left: 100px;
top: 100px;
}
}
- @fontface,用于定义一种字体,iconfont即使就是利用这个特性实现的
- @support 与media类似
- @namespace,表示内部的css选择器都带上特定命名空间
- @viewport,多数时候被meta兼容
css 支持的计算型函数
- calc()
- max()/min()
- clamp()则是给一个值限定一个范围,超出范围外则使用范围的最大或者最小值
- toggle() 在规则选择中多余一个元素时生效,它会在几个元素之间切换
- attr() 允许CSS接受属性值的控制
head原信息
- 原信息head中的tittle可能会被用在浏览器收藏夹、微信推送卡片、微博各种场景
- base标签给页面上所有的URL相对地址提供一个基础,最多只有一个,会改变全局的地址链接,所以开发中建议通过JavaScript代替
- meta charset最前面指定编码格式
- meta viewport,可以指定宽高,初始化缩放比例,最小缩放比例,最大缩放比例,是否允许用户缩放
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
选择器
- :root匹配根元素,html中即是html
- :empty匹配没有子节点的元素,子节点为空白文本节点除外
- ::first-line,第一行;::first-letter第一个字母
超链接
- icon型link,表示页面的icon,在没有时浏览器会去根目录下的favicon.ico。
- 预处理类link,导航到一个网站需要经过DNS查询域名、建立连接、传输数据、加载进内存和渲染一系列的操作
- dns-prefetch 提前做域名查询,这样的link里面的href实际只有域名有意义
- preconnect提前建立tcp连接
- prefetch提前取指定url内容
- preload提前加载href指定URL
- prerender提前渲染
- modulepreload型的link,预加载js模块(放入内存,不会执行)
- stylesheet型link
<link rel="stylesheet" href="xxx.css" type="text/css">
- 如果加上alternate,成为rel="alternate stylesheet",此时必须加上title,此时变为了用于切换的变种样式
- area不是文本型的链接,而是区域型(圆形circle,矩形rect,多边形poly)的链接
<area shape=circle coords="200,75,50" href="green.html" alt="Green circle.">
- img
<img srcset="elva-fairy-320w.jpg 320w,
elva-fairy-480w.jpg 480w,
elva-fairy-800w.jpg 800w"
sizes="(max-width: 320px) 280px,
(max-width: 480px) 440px,
800px"
src="elva-fairy-800w.jpg" alt="Elva dressed as a fairy">
- picture 相比img更好
<picture>
<source srcset="image-wide.png" media="(min-width: 600px)">
<img src="image-narrow.png">
</picture>
- iframe 这个标签可以嵌入一个完整的网页,但是因为安全问题和显示问题而不推荐使用
颜色
- 颜色的分类方法
- RGB(红绿蓝)
- RGBA(红绿蓝透明度)
- CMYK(颜料的颜色,品红、黄、青、黑)
- HSL(色相、纯度/饱和度、明度/亮度)
- 线性渐变
linear-gradient(direction, color-stop1, color-stop2, ...);
- 放射性渐变
radial-gradient(shape size at position, start-color, ..., last-color);
浏览器工作原理
浏览器工作过程
- 使用http或https向服务端请求页面
- 把请求回来的html代码经过解析,构建成dom树
- 计算DOM树上的CSS属性
- 根据CSS属性对元素逐个进行渲染,得到内存中的位图
- 一个可选的步骤是对位图进行合成,这会极大的增加后续绘制的速度
- 合成之后,再绘制到界面上
性能优化
- 目前主流浏览器会根据position、transform等属性来决定合成策略,来猜测这些元素未来可能发生变化。但是准确性有限,目前新的css标准中规定了will-change属性,可以由业务代码来提示浏览器合成策略,运用这个特性可以大大提升合成策略效果
- 渲染就是把每一个元素的盒变成位图,这里的位图就是在内存中建立一张二维表格,把一张图片的每个像素对应的颜色保存进入(位图信息也是DOM树中占据内存最多的信息,做内存优化时,主要考虑这一部分)
- 合成就是为一些元素创建一个合成后的位图,是一个性能考量,不是必须的
- 绘制是把位图绘制到屏幕上的过程,一般是浏览器把位图交给操作系统来做
- 重排是指通过通过css来排版(正常流排版、flex排版等),重绘是指重新绘制(发生的频率比想象的高,鼠标滑过显示区域,每一次移动都会造成重新绘制
DOM
- 节点:dom的树形结构所有的节点有统一的接口Node
- 表示DOM关系
- parentNode
- childNodes
- firstChild
- lastChild
- nextSibling
- previousSibling
- 操作DOM
- appendChild
- insertBefore
- removeChild
- replaceChild
- CSSOM来创建样式表
document.styleSheets[0].insertRule("p { color:pink; }", 0)
document.styleSheets[0].removeRule(0)
- CSSOM的一个重要方法,可以用来获取一个元素最终经过css计算得到的属性
window.getComputedStyle(elt, pseudoElt)
- CSSOM View可以视为DOM API的扩展
moveTo(x,y)
resizeTo(x,y)
window.open("about:blank", "_blank" ,"width=100,height=100,left=100,right=100" )
scrollX
scrollY
scroll(x,y)
scrollBy(x,y)
scrollTop/scrollLeft/scrollWidth/scrollHeight 元素的属性
scroll(x,y)//使得元素滚动到特定的位置
- 布局API
- getClientRects()、getBoundingClientRect()。两者的区别
唠叨
- 不了解某个知识点记得多问度娘哦
- 如果本文对你有点作用,您的点赞、评论、关注是对我最大的鼓励 O(∩_∩)O