<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html>标签以前。告知浏览器的解析器,用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会致使文档以兼容模式呈现。
标准模式的排版 和JS运做模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点没法工做。javascript
HTML5 不基于 SGML,所以不须要对DTD进行引用,可是须要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);
而HTML4.01基于SGML,因此须要对DTD进行引用,才能告知浏览器文档所使用的文档类型。**css
首先:CSS规范规定,每一个元素都有display属性,肯定该元素的类型,每一个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
(1)行内元素有:a b span img input select strong(强调的语气)
(2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
(3)常见的空元素:
html
主要分红两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,而后会输出至显示器或打印机。浏览器的内核的不一样对于网页的语法解释会有不一样,因此渲染的效果也不相同。全部网页浏览器、电子邮件客户端以及其它须要编辑、显示网络内容的应用程序都须要内核。
JS引擎则:解析和执行javascript来实现网页的动态效果。
最开始渲染引擎和JS引擎并无区分的很明确,后来JS引擎愈来愈独立,内核就倾向于只指渲染引擎。html5
Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]
Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
Presto内核:Opera7及以上。 [Opera内核原为:Presto,现为:Blink;]
Webkit内核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)]java
绘画 canvas;
用于媒介回放的 video 和 audio 元素;
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除;
语意化更好的内容元素,好比 article、footer、header、nav、section;
表单控件,calendar、date、time、email、url、search;
新的技术webworker, websocket, Geolocation;web
移除的元素:
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
算法
IE8/IE7/IE6支持经过document.createElement方法产生的标签,
能够利用这一特性让这些浏览器支持HTML5新标签,
浏览器支持新标签后,还须要添加标签默认的样式。
固然也能够直接使用成熟的框架、好比html5shim;
<!--[if lt IE 9]>
<scriptsrc="http://html5shim.googlecode.com/svn/trunk/html5.js"> </script>
<![endif]-->canvas
用正确的标签作正确的事情。
html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
即便在没有样式CSS状况下也以一种文档格式显示,而且是容易阅读的;
搜索引擎的爬虫也依赖于HTML标记来肯定上下文和各个关键字的权重,利于SEO;
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。数组
在用户没有连网时,能够正常访问站点或应用,在用户与网络链接时更新用户机器上的缓存文件。
原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),经过这个文件上的解析清单离线存储资源,这些资源就会像cookie同样被存储了下来。以后当网络在处于离线状态下时,浏览器会经过被离线存储的数据进行页面展现。
如何使用:
页面头部像下面同样加入一个manifest的属性;
在cache.manifest文件的编写离线存储的资源;
CACHE MANIFEST
#v0.11
CACHE:
js/app.js
css/style.css
NETWORK:
resourse/logo.png
FALLBACK:
/ /offline.html
在离线状态时,操做window.applicationCache进行需求实现。浏览器
在线的状况下,浏览器发现html头部有manifest属性,它会请求manifest文件,若是是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源而且进行离线存储。若是已经访问过app而且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,而后浏览器会对比新的manifest文件与旧的manifest文件,若是文件没有发生改变,就不作任何操做,若是文件改变了,那么就会从新下载文件中的资源并进行离线存储。
离线的状况下,浏览器就直接使用离线存储的资源。
iframe会阻塞主页面的Onload事件;
搜索引擎的检索程序没法解读这种页面,不利于SEO;
iframe和主页面共享链接池,而浏览器对相同域的链接有限制,因此会影响页面的并行加载。
使用iframe以前须要考虑这两个缺点。若是须要使用iframe,最好是经过javascript
动态给iframe添加src属性值,这样能够绕开以上两个问题。
label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
<label for="Name">Number:</label> <input type=“text“name="Name" id="Name"/> <label>Date:<input type="text" name="B"/></label>
WebSocket、也能够调用localstorge、cookies等本地存储方式,还可使用页面的路有参数传递
localstorge另外一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,
咱们经过监听事件,控制它的值来进行页面信息通讯;
14.如何在页面上实现一个圆形的可点击区域?
map+area或者svg
border-radius
纯js实现 须要求一个点在不在圆上简单算法、获取鼠标坐标等等
title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;
strong是标明重点内容,有语气增强的含义,使用阅读设备阅读网络时:会重读,而是展现强调内容。
i内容展现为斜体,em表示强调的文本;
h5新增的属性
能够经过ele.dataset获取到标签上的data-x的属性
返回一个对象
解决:解决方案是作成PNG8.
解决:方案是加一个全局的*{margin:0;padding:0;}来统一。
解决:解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)
渐进识别的方式,从整体中逐渐排除局部。
首先,巧妙的使用“9”这一标记,将IE游览器从全部状况中分离出来。 接着,再次使用“+”将IE8和IE七、IE6分离开来,这样IE8已经独立识别。
css
.bb{ background-color:#f1ee18;/*全部识别*/ .background-color:#00deff\9; /*IE六、七、8识别*/ +background-color:#a200ff;/*IE六、7识别*/ _background-color:#1e0bd1;/*IE6识别*/ }
解决:解决方法:统一经过getAttribute()获取自定义属性.
解决方法:(条件注释)缺点是在IE浏览器下可能会增长额外的HTTP请求数。
解决:可经过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.
解决:方法是改变CSS属性的排列顺序:L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。
HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。
XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。
Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。
1)全部的标记都必需要有一个相应的结束标记
2)全部标签的元素和属性的名字都必须使用小写
3)全部的XML标记都必须合理嵌套
4)全部的属性必须用引号""括起来
5)把全部<和&特殊符号用编码表示
6)给全部属性赋一个值
7)不要在注释内容中使“--”
8)图片必须有说明文字
title是global attributes之一,用于为元素提供附加的advisory information。一般当鼠标滑动到元素上的时候显示。
alt是<img>的特有属性,是图片内容的等价描述,用于图片没法加载时显示、读屏器阅读图片。可提图片高可访问性,除了纯装饰图片外都必须设置有意义的值,搜索引擎会重点分析。
改版的时候更方便 只要改css文件。
页面加载速度更快、结构化清晰、页面显示简洁。
表现与结构相分离。
易于优化(seo)搜索引擎更友好,排名更容易靠前。
派生选择器(用HTML标签申明)
id选择器(用DOM的ID申明)
类选择器(用一个样式类名申明)
属性选择器(用DOM的属性申明,属于CSS2,IE6不支持,不经常使用,不知道就算了)
除了前3种基本选择器,还有一些扩展选择器,包括
后代选择器(利用空格间隔,好比div .a{ })
群组选择器(利用逗号间隔,好比p,div,#a{ })
那么问题来了,CSS选择器的优先级是怎么样定义的?
通常而言,选择器越特殊,它的优先级越高。也就是选择器指向的越准确,它的优先级就越高。
复杂的计算方法:
用1表示派生选择器的优先级
用10表示类选择器的优先级
用100标示ID选择器的优先级
div.test1 .span var 优先级 1+10 +10 +1
span#xxx .songs li 优先级1+100 + 10 + 1
xxx li 优先级 100 +1
那么问题来了,看下列代码,<p>标签内的文字是什么颜色的?
<style>
.classA{ color:blue;}
.classB{ color:red;}
</style>
<body>
<p class='classB classA'> 123 </p>
</body>
答案:red。与样式定义在文件中的前后顺序有关,便是后面的覆盖前面的,与在<p class=’classB classA’>中的前后关系无关。
块级元素(block)特性:
老是独占一行,表现为另起一行开始,并且其后的元素也必须另起一行显示;
宽度(width)、高度(height)、内边距(padding)和外边距(margin)均可控制;
内联元素(inline)特性:
和相邻的内联元素在同一行;
宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变(也就是padding和margin的left和right是能够设置的),就是里面文字或图片的大小。
那么问题来了,浏览器还有默认的天生inline-block元素(拥有内在尺寸,可设置高宽,但不会自动换行),有哪些?
答案:<input> 、<img> 、<button> 、<texterea> 、<label>。
外边距重叠就是margin-collapse。
在CSS当中,相邻的两个盒子(多是兄弟关系也多是祖先关系)的外边距能够结合成一个单独的外边距。这种合并外边距的方式被称为折叠,而且于是所结合成的外边距称为折叠外边距。
折叠结果遵循下列计算规则:
两个相邻的外边距都是正数时,折叠结果是它们二者之间较大的值。
两个相邻的外边距都是负数时,折叠结果是二者绝对值的较大值。
两个外边距一正一负时,折叠结果是二者的相加的和。
rgba()和opacity都能实现透明效果,但最大的不一样是opacity做用于元素,以及元素内的全部内容的透明度,
而rgba()只做用于元素的颜色或其背景色。(设置rgba透明的元素的子元素不会继承透明效果!)
* 1.id选择器( # myid) 2.类选择器(.myclassname) 3.标签选择器(div, h1, p) 4.相邻选择器(h1 + p) 5.子选择器(ul < li) 6.后代选择器(li a) 7.通配符选择器( * ) 8.属性选择器(a[rel = "external"]) 9.伪类选择器(a: hover, li: nth - child) * 可继承: font-size font-family color, UL LI DL DD DT; * 不可继承 :border padding margin width height ; * 优先级就近原则,样式定义最近者为准; * 载入样式以最后载入的定位为准;
优先级为:
!important > id > class > tag important 比 内联优先级高
CSS3新增伪类举例:
p:first-of-type 选择属于其父元素的首个 <p> 元素的每一个 <p> 元素。 p:last-of-type 选择属于其父元素的最后 <p> 元素的每一个 <p> 元素。 p:only-of-type 选择属于其父元素惟一的 <p> 元素的每一个 <p> 元素。 p:only-child 选择属于其父元素的惟一子元素的每一个 <p> 元素。 p:nth-child(2) 选择属于其父元素的第二个子元素的每一个 <p> 元素。 :enabled、:disabled 控制表单控件的禁用状态。 :checked,单选框或复选框被选中。
给div设置一个宽度,而后添加margin:0 auto属性
div{
width:200px; margin:0 auto;
}
居中一个浮动元素
肯定容器的宽高 宽500 高 300 的层 设置层的外边距
.div {
Width:500px ; height:300px;//高度能够不设
Margin: -150px 0 0 -250px;
position:relative;相对定位
background-color:pink;//方便看效果
left:50%;
top:50%;
}
* IE浏览器的内核Trident、 Mozilla的Gecko、google的WebKit、Opera内核Presto; * png24为的图片在iE6浏览器上出现背景,解决方案是作成PNG8. * 浏览器默认的margin和padding不一样。解决方案是加一个全局的*{margin:0;padding:0;}来统一。 * IE6双边距bug:块属性标签float后,又有横行的margin状况下,在ie6显示margin比设置的大。 浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;} 这种状况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别) 渐进识别的方式,从整体中逐渐排除局部。 首先,巧妙的使用“\9”这一标记,将IE游览器从全部状况中分离出来。 接着,再次使用“+”将IE8和IE七、IE6分离开来,这样IE8已经独立识别。
css
.bb{ background-color:#f1ee18;/*全部识别*/ .background-color:#00deff\9; /*IE六、七、8识别*/ +background-color:#a200ff;/*IE六、7识别*/ _background-color:#1e0bd1;/*IE6识别*/ } * IE下,可使用获取常规属性的方法来获取自定义属性, 也可使用getAttribute()获取自定义属性; Firefox下,只能使用getAttribute()获取自定义属性. 解决方法:统一经过getAttribute()获取自定义属性. * IE下,even对象有x,y属性,可是没有pageX,pageY属性; Firefox下,event对象有pageX,pageY属性,可是没有x,y属性. * (条件注释)缺点是在IE浏览器下可能会增长额外的HTTP请求数。 * Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, 可经过加入 CSS 属性 -webkit-text-size-adjust: none; 解决. 超连接访问事后hover样式就不出现了 被点击访问过的超连接样式不在具备hover和active了解决方法是改变CSS属性的排列顺序: L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
!important > id > class > 标签
!important 比 内联优先级高
可继承: font-size font-family color, ul li dl dd dt;
不可继承 :border padding margin width height ;
讲 DOM 先从 HTML 讲起,讲 HTML 先从 XML 讲起。XML 是一种可扩展的标记语言,所谓可扩展就是它能够描述任何结构化的数据,它是一棵树!
document.write只能重绘整个页面
innerHTML能够重绘页面的一部分
createDocumentFragment() //建立一个DOM片断
createElement() //建立一个具体的元素
createTextNode() //建立一个文本节点
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子节点前插入一个新的子节点
getElementsByTagName() //经过标签名称
getElementsByName() //经过元素的Name属性的值(IE容错能力较强,会获得一个数组,其中包括id等于name值的)
getElementById() //经过元素Id,惟一性
attribute是dom元素在文档中做为html标签拥有的属性;
property就是dom元素在js中做为对象拥有的属性。
因此:
对于html的标准属性来讲,attribute和property是同步的,是会自动更新的,
可是对于自定义的属性来讲,他们是不一样步的,
src用于替换当前元素,href用于在当前文档和引用资源之间确立联系。
src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,当浏览器解析到该元素时,会暂停其余资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,相似于将所指向资源嵌入当前标签内。这也是为何将js脚本放在底部而不是头部。
Src source,指向外部资源的位置,若是咱们添加<script src ="js.js"></script>浏览器会暂停其余资源的下载和处理,直到该资源加载,编译,执行完毕(图片和框架也是如此),这也就是为何js脚本要放在底部。
src用于替换当前元素,href用于在当前文档和引入资源之间创建联系。
cookie 自己不是用来作服务器端存储的(计算机领域有不少这种“狗拿耗子”的例子,例如 CSS 中的 float),它是设计用来在服务器和客户端进行信息传递的,所以咱们的每一个 HTTP 请求都带着 cookie。可是 cookie 也具有浏览器端存储的能力(例如记住用户名和密码),所以就被开发者用上了。
使用起来也很是简单,document.cookie = ....便可。
可是 cookie 有它致命的缺点:
存储量过小,只有 4KB
全部 HTTP 请求都带着,会影响获取资源的效率
API 简单,须要封装才能用
后来,HTML5 标准就带来了sessionStorage和localStorage,先拿localStorage来讲,它是专门为了浏览器端缓存而设计的。
存储量增大到 5MB
不会带到 HTTP 请求中
API 适用于数据存储 localStorage.setItem(key, value) localStorage.getItem(key)
sessionStorage的区别就在于它是根据 session 过去时间而实现,而localStorage会永久有效,应用场景不一样。例如,一些须要及时失效的重要信息放在sessionStorage中,一些不重要可是不常常设置的信息,放在localStorage中。
标签闭合、标签小写、不乱嵌套、提升搜索机器人搜索概率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更普遍的设备所访问、更少的代码和组件,容易维 护、改版方便,不须要变更页面内容、提供打印版本而不须要复制内容、提升网站易用性;