HTML

基础

Doctype有什么作用?

声明文件类型定义(DTD),位于文档中最前面,作用是为了告知浏览器应该用哪种文档类型规范来解析文档。

如何区分严格模式和混杂模式?区分的意义是什么?

  • 定义

    • 严格模式(标准模式),浏览器按照W3C标准来解析;
    • 混杂模式,向后兼容的解析方法,浏览器用自己的方式解析代码。
  • 如何区分?

    用DTD来判断

    • 严格格式DTD——严格模式;
    • 有URL的过渡DTD——严格模式,没有URL的过渡DTD——混杂模式;
    • DTD不存在/格式不对——混杂模式;
    • HTML5没有严格和混杂之分
  • 区分的意义
    严格模式的排版和js运行模式以浏览器支持的最高标准运行。如果只存在严格模式,那么很多旧网站站点无法工作。

为什么HTML5只需要写<!DOCTYPE HTML>

HTML5不基于SGML(标准通用标记语言),因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为。

meta标签用来做什么?

提供给机器解读的一些元数据。页面搜索引擎优化,定义页面实用语言等等。
属性有两个

1)http-equiv+content

  • charset(编码格式)
  • expires(过期时间)
  • refresh(特定时间内自动刷新跳转)
  • pragma(禁止浏览器从本地计算机缓存中访问页面内容no-cache)
  • widows-target(设定页面在窗口中以独立页面展示,防止被当成frame页调用)
  • set-cookie(自定义cooke)、
  • ontent-Type(字符集)

2)name+content

  • keywords(关键字)
  • description(主要内容)
  • robots(none不被检索)
  • author、generator(使用的制作软件)
  • copyright
  • viewport(缩放比例)

src和href的区别

href 指向网络资源位置,建立当前文档和资源的连接,一般用于超链接

src将资源嵌入到当前文档中,在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也是如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

Ajax与Flash的优劣比较

  • Ajax的优势:

    • 可搜索性

      普通的文本网页会更有利于SEO。文本内容是搜索引擎容易检索的,而繁琐的swf字节码却是搜索引擎不愿触及的。虽然Google等一些大型的搜索引擎可以检索SWF内部的内容,但是仍然有很多麻烦存在。

    • 开放性

      Flash常年以来被Macromedia看的很死。包括Flex、FMS等辅佐技术一直都需要昂贵的安装、维护费用。而JS则没有这样的麻烦。没有人愿意承担法律和版权的风险。

    • 费用

      Flash开发是很昂贵的,因为FlashIDE等环境都是要收费的.而Ajax则不同.虽然有一些便宜的生成swf的工具,但是他们的工能实在无法满足复杂需求。

    • 易用性

      Ajax程序有更好的易用性。由于中间有一层Flashplayer代理层,因此许多辅助功能无法被Flash灵活利用。而且Flash在一些方面有着不好的口碑。比如弹出广告、比如恶意代码。

  • Ajax的劣势

    • 它可能破坏浏览器的后退功能
    • 使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中 ,不过这些都有相关方法解决。
  • Flash的优势

    • 多媒体处理

      Flash在音频、视频等多媒体领域相比HTML有绝对的优势。现在几乎所有的网站都包含有Flash内容。

    • 兼容性

      兼容性好:由于通过了唯一的FlashPlayer“代理”。人们不必像调试JS那样,在不同的浏览器中调试程序。

    • 矢量图形

      最大的优势,同样处在这一领域的SVG、Canvas element以及Direct完全不能与Flash相比。

    • 客户端资源调度

      能够更容易的调用浏览器以外的外部资源。比如摄像头、麦克风等。然而这是普通的HTML无法完成的。

  • Flash的劣势

    • 二进制格式
    • 格式私有
    • flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间
    • 性能问题

HTML5

新特点

很多语义化的标签

  • canvas js绘图

  • draggable属性 可拖动

  • geolocationAPI 获取用户地理位置

  • audio/video 音频 视频元素

  • input类型增多,color、date、datetime、datetime-local、email、month、range、search、tel、time、url、week

  • 表单元素增强

    datalist 与input配合使用规定输入域的选项列表;keygen密钥;output定义不同类的输出。

  • Web存储,sessionStorge针对一个session进行数据存储,关闭浏览器创港口后清除,localStorage没有事件限制,不过它可能会因为本地时间修改失效。不过大量复杂数据结构一般用indexDB

  • Web worker 页面中执行脚本时,页面状态不可响应,直到脚本完成。在后台运行,独立于其他脚本,不会影响页面的性能。(相当于多线程并发)

  • SSE server-sent-event 网页自动获取来自服务器的更新。用于接收服务器发送时间通知

  • WebSocket 在单个TCP连接上进行全双工通讯的协议。只需要握手一次,形成快速通道,传输数据。客户端和服务器可以直接通过TCP交换数据。获取连接之后,可以用send发送数据,用onmessage接收服务器返回的数据。

  • 新API

    History、Command、Application cache ……

什么是shadow DOM

Shadow DOM是浏览器的一种功能,能自动添加子元素,比如radio元素的controls,这些相关元素由浏览器生成。

Canvas有什么用

相当于在页面上新建了一个画布,可以用JS画图。只写一些基本的。

获取DOM,创建画布 getContext('2d');

  • 矩形

    fillRect(x,y,width,height) 填充

    strokeRect(x,y,width,height) 边框

    clearRect(x,y,width,height)清除指定区域

  • 路径

    创建起始点,画图,闭合路径。路径绘制完成,可以描边或者填充。

    beginPath()新建路径

    closePath()闭合路径

    stroke()描边

    fill()填充

  • 移动笔触

    moveTo(x,y) 移动到某点

  • 绘制直线

    lineTo(x,y) 从当前位置绘制到(x,y)的一条直线

  • 绘制圆

    arc(x,y,radius,startAngle,endAngle,anticlockwise) 以(x,y)为圆心,radius为半径,startAngle和endAngle以X轴为准开始结束的弧度,anticlockwise为true顺时针,false逆时针。

不改变图片原始大小画到canvas上面

第一种,直接在坐标上画图,如果图片大小超出了画布也不缩放

drawImage(image,x,y);

第二种,绘制开始位置,缩放位置,图片会变形

drawImage(image,x1,y1,x2,y2);

第三种,从图片的某个坐标开始截图,截取m*n的大小。然后截的图片从canvas的x1,y1画到x2,y2。

drwaImage(image,xi,yi,m,n,x1,y1,x2,y2)