语义化的主要目的可以概括为用正确的标签做正确的事
HTMl语义化可以让页面的内容结构化,以便于浏览器解析和搜索引擎解析,
并且提高了代码的可读性便于代码维护,
Canvas绘图以及SVG绘图。
拖放(Drag and drop)API
语义化标签(header、nav、footer、article、section)
音频、视频(audio、video)API
地理定位(Geolocation)
本地离线存储(localStorage),长期存储数据,关闭浏览器后不丢失。
会话储存(sessionStorage),数据在关闭浏览器后自动删除。
表单控件(calendar、date、time、email、url、search)
保存方式
cookie存放在客户的浏览器上。
session都在客户端中保存,不参与服务器通讯。
生命周期
cookie可设置失效时间
localStorage除非手动清除否则永久保存
sessionStorage关闭当前页面或浏览器后失效
存储的大小
cookie 4kb左右
session 5M
易用性
cookie需自己封装
session可以接受原生接口
因为cookie每次请求都会携带在http请求中,所以它的主要用来识别用户登录,localStorage可以用
来跨页面传参,sessionStorage可以用来保留一些临时数据。
id选择器 => #myId {}
类选择器 => .myClass {}
标签选择器 => p,h1 {}
后代选择器 => div h1 {}
子选择器 => div>h1 {}
兄弟选择器(所有的兄弟) => ul~h1 {}
相邻兄弟选择器 => ul+h1 {}
属性选择器 => li[name='sss'] {}
伪类选择器 => h1:hover {}
伪元素选择器 => h1::before{}
通配符选择器* => * {}
!important>内联样式(非选择器)>ID选择器>类选择器>标签选择器>通配符选择器(*)
块元素:div、h1~h6、ul、li、table、p、br、form。
特征:独占一行,换行显示,可以设置宽高,可以嵌套块和行
行内元素:span、a、img、textarea、select、option、input。
特征:只有在行内显示,内容撑开宽、高,不可以设置宽、高(img、input、textarea等除外)。
父级div定义overflow:hidden(如果父级元素有定位元素超出父级,超出部分会隐藏,)
给浮动元素父级增加标签(由于新增标签会造成不必要的渲染,不建议使用)
伪元素清除浮动:给浮动元素父级增加 .clearfix::after(content: ‘’; display: table;
clear: both;)(不会新增标签,不会有其他影响,)
圆角(border-radius)
阴影(box-shadow)
文字特效(text-shadow)
线性渐变(gradient)
变换(transform)
更多的CSS选择器
更多背景设置(background)
色彩模式(rgba)
伪元素(::selection)
媒体查询(@media)
多栏布局(column)
图片边框(border-image)
绝对长度单位:px
百分比: %
相对父元素字体大小单位: em
相对于根元素字体大小的单位: rem
相对于视口*宽度的百分比(100vw即视窗宽度的100%): vw
相对于视口*高度的百分比(100vh即视窗高度的100%): vh
display:none:隐藏元素,在文档布局中不在给它分配空间(从文档中移除),会引起回流(重排)
visibility:hidden: 隐藏元素,但是在文档布局中仍保留原来的空间(还在文档中),
不会引起回流(重绘)
某个dom节点的颜色,背景颜色变了,字体大小,只影响自己,不影响其他元素。
注意:table及其内部元素可能需要多次计算才能确定好其在渲染树中节点的属性,比同等元素要多花两倍时间,这就是我们尽量避免使用table布局页面的原因之一。
某个dom节点的宽高,布局,隐藏等发生改变,不仅自身发生了改变,而且其他元素也会受到影响随之发生改变。每个页面最少一次回流,就是页面第一次加载的时候。
页面初始化渲染(无可避免)
添加或删除可见的DOM元素
元素尺寸的改变------大小,外边距;边框
浏览器窗口尺寸的变化
填充内容的改变,比如文本的改变或图片大小改变而引起的计算值宽度和高度的改变
读取某些元素属性:(offsetLeft/Top/Height/Width, clientTop/Left/Width/Height,
scrollTop/Left/Width/Height, width/height, getComputedStyle(),
currentStyle(IE) )
1.重绘不一定重排,但是重排一定会重绘
2.重绘和重排的成本都是非常高的,要尽量减少dom的增删改
不要直接操作样式,先设置好class,然后修改DOM的className;
position:absolute 与flex 不会导致重排
不要把DOM 节点的属性放在一个循环当成循环的变量;
需要动画的元素脱离文档流;
不使用table 布局,
尽量不修改影响范围比较大的DOM;
如果要多次添加DOM,先使用 document.createDocumentFragment() 创建一个盒子,
完盒子里面先添加子元素,添加完成在插入元素中;
link属于html标签,而@import是css提供的。
页面被加载时,link会同时被加载,而@import引用的css会等到页面被加载完再加载的。
兼容性问题:@import只在IE5以上才能识别,而link是html标签,无兼容性问题。
权重问题:@import的权重要高于link。
DOM操作:DOM可以操作link中的样式,而不可以操作@import中的样式。
<!-- html 文件 -->
<!-- link 方式,推荐 -->
<link rel="stylesheet" type="text/css" href="style.css" media="screen" />
<!-- @import 方式 -->
<style type="text/css" media="screen">
@import url(style.css);
</style>
将当前组件的