《HTML5与CSS3权威指南》读书笔记

《HTML5与CSS3权威指南》 机械工业出版社

Chapter 2 - HTML5与HTML4的区别

1.DOCTYPE声明

  html4: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  html5: <!DOCTYPE html>

 

  上面这些代码我们称做DOCTYPE声明。DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本。

 

  其中的DTD(例如上例中的xhtml1-transitional.dtd)叫文档类型定义,里面包含了文档的规则,浏览器就根据你定义的DTD来解释你页面的标识,并展现出来。

 

  要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都不会生效。

 

2.指定字符编码

  html4: <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

  html5: <meta charset="UTF-8">

 

3.HTML5中元素标记规则

  不允许写结束标记的元素有:area、base、br、col、command、embed、hr、img、input、keygen、link、meta、param、source、track、wbr; (例:<img />)

  可以省略结束标记的元素有:li、dt、dd、p、rt、rp、optgroup、option、colgroup、thead、tbody、tfoot、tr、td、th; (例:<li>)

  可以省略全部标记的元素有:html、head、body、colgroup、tbody; (例:元素隐式存在,不写head标签也是会存在文档中)

 

4.具有boolean值的属性

  html4: <input type='checkbox' checked='checked'>

  html5: <input type='checkbox' checked>

  类似的还有:readonly、disabled

 

5.属性省略引号

  html4:<input type='text'>

  html5:<input type=text>

  注意:当属性不包括空字符串、<、>、=、'、"时才可以省略

 

6.HTML5废除元素

  basefont、big、center、font、s、strike、tt、u、frame

  只有部分浏览器支持:

  applet、bgsound、blink、marquee

 

7.全局属性

  contentEditable

    boolean 允许用户编辑元素中的内容  默认继承(父元素为true,子元素为true)

    <ul contentEditable='true'></ul>

  designMode

    指定整个页面是否可以被编辑,只能用js开启

    document.designMode = "on"; (off)

  hidden

    所有元素都允许使用hidden属性,true则不显示,但元素是存在的

  spellcheck

    针对input和textarea的拼写和语法检查

  tabindex

    按tab键获取焦点的顺序,特别的应用-设置tabindex=-1,使得该元素不会在按tab键时取得焦点

 

 

Chapter 4 - 表单与文件

1.新增表单属性

  form

    <textarea form="testform"></textarea>

    元素可以不被<form>包含,只要设置form属性为表单id即可

  formaction

    <input type="submit" formaction="test.jsp">

    formaction指定提交表单到达的页面

  formmethod

    <input type="submit" formaction="test.jsp" formmethod="post">

    formmethod指定提交表单的方法(get/post)

  list

    <input type="submit" list="greetings">

    <datalist>

      <option value="good moring">Good moring</option>

      <option value="good afternoon">Good afternoon</option>

    </datalist>

    用于自动补全,为了兼容不支持html5的浏览器,可以设置datalist  display:none

 

2.input类型

  search

  tel - 只允许输入数字和横杠

  url - 要求用户正确输入url的地址

  email - 要求用户正确输入email的地址

  number - 只可以输入数字

  range - 显示成滑动条,输入一个范围的数字,有min和max属性

  color - 选择颜色,得到的值为16进制颜色(#000000 - 黑色)

 

  关于range类型的样式修改:

  滑条:

  input[type="range"] {

    -webkit-appearance: none;

    -webkit-box-shadow:

      0 1px 0 0px #424242,

      0 1px 0 #060607 inset,

      0px 2px 10px 0px black inset,

      1px 0px 2px rgba(0, 0, 0, 0.4) inset,

      0 0px 1px rgba(0, 0, 0, 0.6) inset;

    margin-top: 2px;

    background-color: #272728;  

    border-radius: 15px;

    width: 400px;

    outline: none;

    cursor: pointer;
  }

  滑块:

  input[type="range"]::-webkit-slider-thumb {

    -webkit-appearance: none;

    cursor: default;top: 1px;

    height: 9px;

    width: 20px;

    background: none repeat scroll 0 0 #777;

    border-radius: 15px;

    -webkit-box-shadow: 0 -1px 1px black inset;

  }

  

3.新增output元素

  <input name="range" type=range min=0 max=100 step=5 />

  <output onforminput="value=range.value">50</output>

  显示出滑动条的值,必须从属于某个表单

 

4.表单验证

  required

    <input name='username' required>

    如果元素中内容为空则不允许提交

  pattern

    <input pattern="[0-9][A-Z]{3}" name="test" placeholder="请输入一个数字和三个大写字母">

    要求元素中内容匹配正则表达式

  自定义错误信息(

    checkValidity() - 验证方法,返回boolean值(form,input,select,textarea)

    setCustomValidity() - 设置自定义提示方法

    var email = document.getElementById("email");

    if(!email.checkValidity()) email.setCustomValidity(“请输入正确的Email地址”);

    

5.新增元素

  figure

    独立内容

  figcaption

    <figure>

      <figcaption>HTML5</figcaption>

      <img src="http://www.update8.com/uploads/131022/1-131022094155105.jpg">

    </figure>

    figure元素内的标题

  details

    <details>

      <summary>点这里进行展开或收起</summary>

      <img src="http://www.update8.com/uploads/131022/1-131022094155105.jpg">

    </details>

    具备展开和伸缩功能的内容块

  mark

    <mark>高亮的文本</mark>

    高亮突出文本

  ol(改良)

    <ol start="20" type="A" reversed>

      <li>kkk</li>

      <li>mmm</li>

    </ol>

     start属性指定起始的序号,type指定序号的类型(1、A、a、I、i),reversed倒序

  dl、dt、dd

    <dl>

      <dt>作者</dt>

      <dd>vincent</dd>

    </dl>

    用于定义文章或网页上的术语解释,dl定义列表,dt定义中的术语,dd定义中的具体部分

  cite

    我最喜欢的电影是<cite>精武风云</cite>

    用于表示作者和书名、文章名、歌曲等

 

6.文件API

  多文件选择

    <input type="file" id="file" multiple/>

  FileList文件列表对象

    document.getElementById("file").files;  // 返回文件对象数组

  accept

    <input type="file" id="file" multiple accept="image/*"/> 

    默认选择image类型的文件,其实就是用file.type属性值匹配accept的值 

  FileReader接口

    方法:

      readAsBinaryString(source)  二进制码

      readAsText(source, encode) 读取文本文件的内容 encode是编码参数,默认UTF-8 

      readAsDataUrl(source)  读取文件作为url地址

      abort()  中断读取操作

    事件:

      onabort  中断时

      onerror  出现错误时

      onloadstart  开始读取时

      onprogress  读取中

      onload  读取成功时

      onloadend  读取完成时,无论成功或失败

  

7.拖放API

  draggable

    <div draggable="true"></div>

    只有设置为true才允许拖放

  拖放事件:

    dragstart  被拖放的元素  开始拖放

    drag  被拖放的元素  拖放过程中

    dragenter  鼠标经过的元素  被拖放的元素开始进入本元素的范围内

    dragover  鼠标经过的元素  被拖放的元素正在本元素范围内移动

    dragleave  鼠标经过的元素  被拖放的元素离开本元素的范围

    drop  拖放的目标元素  有其他元素被拖放到了本元素中

    dragend  拖放的对象元素  拖放操作结束

 

Chapter 5 - 绘制图形

1.canvas基础

  <canvas id="canvas" width="400" height="300" />

  注意:canvas通过css来修改长宽的话会影响视觉效果,它只认width属性和height属性

  

  var canvas = document.getElementById("canvas");

  var context = canvas.getContext('2d');

  画图之前要先取图形上下文(context)

 

  context.fillStyle = 'red'; // 填充样式

  context.strokeStyle = 'blue'; // 边框样式

  context.lineWidth = 1; // 线的宽度

  设置绘图样式、线宽

 

2.绘制矩形

  context.fillRect(x,y,width,height)

  填充矩形

  context.strokeRect(x,y,width,height)

  绘制矩形

  context.clearRect(x,y,width,height)

  清除矩形

 

3.绘制圆形

 

  context.beginPath()

  创建路径

  context.arc(x,y,raidus,startAngle,endAngle,anticlockwise)

  startAngle - 起始角度 endAngle - 结束角度 anticlockwise - 是否顺时针绘制

  context.closePath()

  关闭路径

  弧/曲线

  图释:context.arc(0,0, 10, 0, Math.PI*3/2, false)

  

 

4.绘制直线、曲线

  context.moveTo(x,y)

  将光标移动到点(x,y)

  context.lineTo(x,y)

  画直线到点(x,y),并且光标移动到当前位置

  context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

  绘制三次贝塞尔曲线 (cp1x, cp1y) - 第一个控制点坐标 (cp2x, cp2y) - 第二个控制点坐标 (x,y) - 终点坐标

  context.quadraticCurveTo(cpx, cpy, x, y)

  绘制二次贝塞尔曲线 (cpx, cpy)

 

5.线性渐变

  var g = context.createLinearGradient(xStart, yStart, xEnd, yEnd)

  创建线性渐变对象LinearGradient

  g.addColorStop(offset, color)

  增加渐变点, offset - 偏移量(0-1之间) color - 渐变的颜色值

  context.fillStyle = g;

  context.fill();

  使用渐变样式来绘制

 

6.径向渐变

  var g = context.createRadialGradient(xStart, yStart, radiusStart, xEnd, yEnd, radiusEnd)

  创建径向渐变对象RadialGradient

  

7.坐标变换

  context.translate(x,y)

  坐标轴平移

  context.scale(x,y)

  缩放

  context.rotate(angle)

  旋转

  context.setTransform(m11, m12, m21, m22, dx, dy)

  设置变换矩阵

  变换矩阵对应关系:

  setTransform(1, 0, 0, 1, x, y) || setTransform(0, 1, 1, 0, x, y) == translate(x,y)

  setTransform(x, 0, 0, y, 0, 0) || setTransform(0, y, x, 0, 0, 0) == scale(x,y)

  setTransform(Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), 0, 0) == ratate(angle)

  

8.图形组合

  context.globalCompostiteOperation = type

  类型介绍:

  source-over - 覆盖在原有图形之上(默认)

  destination-over - 在原有图形之下绘制新图形

  source-in - 只显示新图形中与原有图形重叠的部分

  destination-in - 只显示原有图形中与新图形重叠的部分

  source-out - 只显示新图形与原有图形不重叠的部分

  destination-out - 只显示原有图形与新图形不重叠的部分

  source-atop - 只显示原有图形和新图形中与原有图形重叠的部分

  desintation-atop - 只显示新图形和原有图形中与新图形重叠的部分

  lighter - 原有图形和新图形重叠的部分高亮

  xor - 只显示新图形中与原有图形不重叠的部分,重叠的部分变透明

  copy - 只绘制新图形,原有图形中未与新图形重叠的部分不显示

  

  

  

 

9.绘制阴影

  context.shadowOffsetX - 水平偏移

  context.shadowOffsetY - 纵向偏移

  context.shadowColor - 阴影颜色

  context.shadowBlur - 阴影边缘模糊范围

 

10.使用图像

  context.drawImage(image, x, y)

  context.drawImage(image, x, y w, h)

  context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)

  image - 可以是一个img元素、一个video元素或者一个js中的Image对象

  第三种方法用于复制图像中某区域的内容到新的区域,可用于缩放(特写)

 

11.平铺图像

  var pattern = context.createPattern(image, type)

  context.fillStyle = pattern

  type - (repeat, no-repeat, repeat-x, repeat-y)

  

12.图像裁剪

  创建好路径之后调用:

  context.clip()

  

13.像素处理

  获取数据:

  var imagedata = context.getImageData(sx, sy, sw, sh);

  得到如下数组:

  [r1,g1,b1,a1,r2,g2,b2,a2,r3……]

  rn - 第n个像素点的红色值

  gn - 第n个像素点的绿色值

  bn - 第n个像素点的蓝色值

  an - 第n个像素点的透明度

  设置像素:

  context.putImageData(imagedata, dx, dy)

 

14.绘制文字

  绘制文字

  context.fillText(text, x ,y, [maxWidth])

  context.strokeText(text, x, y, [maxWidth])

  文字属性:

  context.font - 字体

  context.textAlign - 水平对齐方式

  context.textBaseline - 垂直对齐方式

  计算文字宽度:

  context.measureText(text)

  

15.绘制状态的保存与恢复

  context.save()

  context.restore()

 

16.保存文件

  canvas.toDataURL(type)

  type - MIME类型

  

  

 

 

 

 

 

 

  

 

  

 

posted @ 2015-03-20 18:42  Vincent的web小站  阅读(500)  评论(0编辑  收藏  举报