HTML
Doctype为何物
Doctype声明位于位于HTML文档中的第一行,用于告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD(文档类型定义),因为 HTML 4.01 基于 SGML(标准通用标记语言)。
HTML5 不基于 SGML,所以不需要引用 DTD。
XHTML vs HTML
HTML是一种基本的WEB网页设计语言,而XHTML是一个基于XML的置标语言。
最主要的不同:
- XHTML 元素必须被正确地嵌套;
- XHTML 元素必须被关闭;
- 标签名必须用小写字母;
- XHTML 文档必须拥有根元素。
script标签
defer属性
defer属性会将script脚本延迟到整个页面都解析完毕后再运行,相当于高速浏览器立即下载,但延迟执行。在现实当中,延迟脚本并不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发 前执行,因此最好只包含一个延迟脚本。
meta标签
移动端最标准的meta设置。
HTML5
video
vs audio
新增的元素,用于实现视频和音频功能。
这里想额外补充的是其实现原理实际基于Shadow DOM()。「Shadow DOM」会让DOM element subtree包含于document的呈现内容,但是却不会在main document DOM tree里。
另外还有一个相关的 source
标签,可为媒介元素(比如
拖放draggable
原生使用draggable
属性,搭配ondragstart
、ondragover
、ondrop
事件完成拖放。其中ondragover
需使用preventDefault()
阻止元素的默认处理方式,传递数据使用dataTransfer
。
插件实现个人推荐Sortable.js(vue版本使用vue-draggable)。
画布 vs SVG
Canvas
- 依赖分辨率
- 不支持事件处理器
- 弱的文本渲染能力
- 能够以 .png 或 .jpg 格式保存结果图像
- 最适合图像密集型的游戏,其中的许多对象会被频繁重绘
SVG
- 不依赖分辨率
- 支持事件处理器
- 最适合带有大型渲染区域的应用程序(比如谷歌地图)
- 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
- 不适合游戏应用
Web存储
HTML5 提供了两种在客户端存储数据的新方法:
- localStorage:没有时间限制的数据存储
- sessionStorage:针对一个session的数据存储
之前,这些都是由cookie完成的。但是cookie不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得cookie速度很慢而且效率也不高。
Web存储可用于自动保存、页面间的数据传递等功能。Tip
1.IE6/7不支持Web存储,可通过UserData实现本地存储
2.页面间的数据传递还可通过cookie、web Worker实现
CSS
选择器啊选择器
nth-child vs nth-of-type
|
|
浮动这个磨人的小妖精
特性
浮动的特性可以概括为包裹与破坏。
包裹可称为BFC(块级格式化上下文)。

清除浮动
|
|
Tip: .clearfix只应用在包含浮动子元素的父级元素上。
文字的那些事
文字溢出隐藏并显示省略号
单行文本
|
|
多行文本
|
|
文字大小
em与rem
em
是一个相对单位,参照物是父元素的font-size
,若父元素没有设置font-size
,会一直向上寻找。浏览器有一个默认设置:1em = 16px
。rem
与em
的区别在于,其参照物是html
的font-size
。
选中文字
通过::selection
来设置光标选中的文字
CSS盒子模型
标准模型下,总元素的宽度=内容宽度+左填充+右填充+左边框+右边框+左边距+右边距。
在怪异模式下,width属性是内容、内边距和边框的宽度的总和。
可通过设定box-sizing: border-box;
来实现后者,更符合我们对盒子的直觉认知。
比如要一个元素的宽度严格是其父元素的某个百分比,但是又要给其周边留出点空白,这样就很方便:
边界重叠
CSS的margin上下布局会出现边界塌陷或者说边界重叠(这里特别说明,水平布局是不会出现这个问题的T-T)。
垂直布局
垂直之间塌陷的原则是以两方最大的外边距为准,可直接针对一个来外边距来解决这个问题。
父子嵌套
这是出现比较多的情况,有以下几种解决方案。
- 给父元素指定一个边框,因为外层有border的话,父子就不是紧贴在一起的了,不会造成塌陷;
- 给父元素加溢出处理
overflow: hidden
; - 给父元素加padding。
FLEX布局
概念
布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。2009年,W3C提出了一种新的方案—-Flex布局,可以简便、完整、响应式地实现各种页面布局。
应用场景
网格布局
根据缩放值实现网格布局,通常采用元素class与样式的对应实现。
|
|
固定底栏
|
|
|
|
垂直居中
具体可见”垂直居中”部分。
get些常用小招
让我用border框住你
工作里经常会下面遇到这样的样式,特别是在导航之类的地方。即第一个元素没有左边框,之后的元素有左边框。

这种情况可以通过CSS中的相邻兄弟选择器进行实现。
|
|
上面的方式也可以用于解决相邻元素边框重叠导致像素变粗的问题,但却可能产生另一种问题,即当相邻的两个元素高度不一致的时候,会出现断线的现象(下图)。

这个时候可以使用一种方式解决这个问题。
|
|
Sticky Footer
如果页面内容不够长的时候,页脚块粘贴在视窗底部;如果内容足够长时,页脚块会被内容向下推送。
垂直居中
不定宽高的水平垂直居中
transform
|
|
父元素需要设置成relative,若元素本身的宽高确定,可采用负margin的方式(margin-left和margin-top设置为宽高的一半)
flex
|
|
css3新属性
table-cell
|
|