HTML5记录

HTML5

MINE类型

多用途Internet邮件扩展(MIME)类型 是一种标准化的方式来表示文档的性质和格式。 它在IETF RFC 6838中进行了定义和标准化。互联网号码分配机构(IANA)是负责跟踪所有官方MIME类型的官方机构。
浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档;因此服务器设置正确以将正确的MIME类型附加到响应对象的头部是非常重要的。常用的MIME类型有
text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/octet-stream

multipart/form-data
multipart/byteranges

在缺失 MIME 类型或客户端认为文件设置了错误的 MIME 类型时,浏览器可能会通过查看资源来进行MIME嗅探。每一个浏览器在不同的情况下会执行不同的操作。因为这个操作会有一些安全问题,有的 MIME 类型表示可执行内容而有些是不可执行内容。浏览器可以通过请求头 Content-Type 来设置 X-Content-Type-Options 以阻止MIME嗅探。

html5新特性支持检测方法

  1. 检测全局对象,如window和navigator
  2. 创建元素,检测对象时候拥有属性
  3. 创建元素,检测是否拥有特定方法
function support_canvas_text(){
    if (document.createElement('canvas').getContext){
        var _canvas = document.creaeElement('canvas');
        var context = _canvas.getContext('2d')
        return typeof context.fillText == 'function'        
    }
    return false;
}
  1. 使用Modernizr库
    只要导入就可以提供检测,如
Modernizr.canvas //返回true或者false
具体特性检测
video支持编码方式检测
//h264.
function support_h264_video (){
    if (_video = document.createElement('video').canPlayType) {
        return _video('video/mp4; codecs="avc1.42E01E, mp4a40.2"');
     }
     return '';
}

//或用Modernizr
if (Modernizr.video){
    return Modernizr.video.h264;
}
本地存储
funtion support_localstorage(){
    return ('localStrorage' in window) && window['localStorage'] !== null;
}
离线web应用
function support_offline(){
    return !! window.applicationCache;
}

或用Modernizr
Modernizr.applicationCache
地理位置(非HTML5标准)
!!navigator.geolocation

html5 input类型

新的input Type
type='search'
type='number'
type='range'
type='color'
type='tel'
type='url'
type='email'
type='date'
type='month'
type='week'
type='time'
type='datetime'
time='datetime-local'
但浏览器不支持新类型时将type视为text
故判断可用:
return i.type !== "text"

或用Modernizr:
Modernizr.inputtypes.data
占位符(placeholder)
检测方法:
var i = createElement('input')
if (! ('placeholder' in i)){
    //do something
}

或用Modernizr:
if(!Modernizr.input.placeholder){
    //do somethng
}
自动聚焦(autofocus)

同上,将placeholder替换为autofocus

HTML5 head中的主要标签

<!DOCTYPE html>
<html lang='zh'>
<!--  lang可用的tags参见 http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry  -->
    <head>
        <meta charset="utf-8" />
        <!-- 或 charset="ISO8895-1"非中文 -->
        <!-- 在HTML4中的声明方法
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        -->
        <link rel="stylesheet" href="style.css" type="text/css" />
        <link rel="shortcut icon" href="/favicon.ico" />
    </head>
    <body>
    </body>
</html>

HTML5新增语义元素

<section>    段落,节
<nav>        导航栏
<article>    由页面中自成一体的内容组成
<aside>      通常为侧边栏
<hgroup>     段落或节的标题
<header>     导航辅助,可包含各节标题
<footer>     一般包括页脚内容
<time>       时间或日期,或附带时间以及时区偏移量
<mark>       高亮参考
通过hgroup包装标题
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <header>
      <hgroup>
        <h1>hello world</h1>
        <h2>this is a testing page</h2>
      </hgroup>
      <div>
        <h2>this is a level 2 head</h2>
      </div>
      <div>
        <h2>this is anothor level 2 head</h2>
      </div>
    </header>
  </body>
</html>
通过article形成子页面大纲
<!DOCTYPE html>
<html lang='zh'>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <h1>this is a title</h1>
    <article>
      <header>
        <h1>this is a title in an article tag</h1>
      </header>
      <p>contents</p>
    </article>
  </body>
</html>
日期和时间
//格式<time datetime='yyyy-mm-dd[Thh:mm:ss[+/-hh:mm]]' [pubdate]>可选内容</time>
//其中pubdate参数为可选,如果在article中表示文章发表日期,在其它地方表示文档发布日期

//在上文<article>中加入时间标签
<!DOCTYPE html>
<html lang='zh'>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <h1>this is a title</h1>
    <article>
      <header>
        <time datetime='2018-9-10T21:20:20+08:00' pubdate>option content</time>
        <h1>this is a title in an article tag</h1>
      </header>
      <p>contents</p>
    </article>
  </body>
</html>
导航栏(nav)
<nav>
    <ul>
        <li><a href='#'>home</li>
        <li><a href='#'>blog</li>
        <li><a href='#'>about</li>
    <ul>
<nav>
绘图canvas
var cvs = canvas.getContext('2d')
cvs.fillStyle()
cvs.fillRect()
cvs.strokeStyle()
cvs.strokeRect() <!-- 不填充只绘制边缘
cvs.clearRect()
//样例
<!DOCTYPE>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <script>
      var cvs = document.createElement('canvas');
      var b = document.getElementsByTagName('body');
      b[0].appendChild(cvs);
      c = cvs.getContext('2d');
      c.fillStyle='#123456';
      c.fillRect(2,3,200,200);
    </script>
  </body>
</html>

画坐标轴

<!DOCTYPE>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <canvas id='c' width:500 heigth:500></canvas>
    <script>
      var cvs = document.getElementById('c').getContext('2d');
      cvs.beginPath();
      for (var i=0; i<201; i+=5){
        cvs.moveTo(i+0.5,0);
        cvs.lineTo(i+0.5,100);
      }
      for (var i=0; i<101; i+=5){
        cvs.moveTo(0,i+0.5);
        cvs.lineTo(200,i+0.5);
      }
      cvs.strokeStyle="#dddddd";
      cvs.stroke();
      cvs.beginPath();

      cvs.moveTo(0,10);
      cvs.lineTo(200,10);
      cvs.lineTo(195,5);
      cvs.moveTo(200,10);
      cvs.lineTo(195,15);
      cvs.moveTo(10,0);
      cvs.lineTo(10,100);
      cvs.lineTo(5,95);
      cvs.moveTo(10,100);
      cvs.lineTo(15,95);
      cvs.strokeStyle='#111111';
      cvs.stroke();
      cvs.font = 'normal 9px sans-serif';
      cvs.fillText('y',2,65);
      cvs.fillText('x',115,7);S
    </script>
  </body>
</html>

渐变

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <canvas id='c' width='500' height='500' style='border:1px solid #d3d3d3;'></canvas>
    <script>
      var cvs = document.getElementById('c').getContext('2d');
      var my_gradient = cvs.createLinearGradient(0,0,500,500);
      my_gradient.addColorStop(0,'black');
      my_gradient.addColorStop(1,'white');
      cvs.fillStyle = my_gradient;
      cvs.fillRect(0,0,500,500);
      </script>
  </body>
</html>

canvas插入图像

<script>
  window.onload = function(){
    var cvs = document.getElementById('c').getContext('2d');
    var img = document.getElementById('commands');
    cvs.drawImage(img,0,0,300,400);
  }
</script>

video标签与常用视频容器及编码格式

视频:
视频容器格式:MPEG-4,Flash视频(FLV,F4V),Ogg,WebM,AVI
视频编解码格式:H.264(MPEG-4 AVC),H.265,VP3/Theora,VP8,VP9
音频:
音频编解码格式:MP3(MPEG-1 Audio Layer 3),AAC,Vorbis(常嵌入Ogg容器中)

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <video src='/video/ex_video.mp4' width='600' height='400' controls></video>
  </body>
</html>

video标签允许同一个视频有多种格式

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <video width='600' height='400' controls>
      <source src='/video/ex_video.mp4' type='video/mp4' >
      <source src='/video/ex_video.webm' type='video/webm' >
      <source src='/video/ex_video.ogv' type='video/ogg' >
    </video>
  </body>
</html>

地理位置geolocation

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <script>
      navigator.geolocation.getCurrentPosition(
        function show_location(position){
          alert('lat:'+String(position.coords.latitude)+'\n'+'lon:'+String(position.coords.longitude));
        },
        function handle_err(err){
          switch(err.code){
            case 0:
              alert("Unknown Error");
              break;
            case 1:
              alert("Permission Denied");
              break;
            case 2:
              alert("Location Unavailibal");
              break;
            case 3:
              alert("Time Out");
              break;
          }
        },
        {
          enableHighAccuracy:true,//开启高精度位置,可能失败
          timeout:60000,          //定位超时(ms)
          maximunAge:60000        //再次获取新的位置的最短时间间隔
        }
      );
    </script>
  </body>
</html>

本地存储localStorage

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <button type='button' onclick='clearItem()'>clear localStorage</button>
    <script>
      var foo = 12345;
      if (a = localStorage['bar']){
        alert('local storage exists, bar: ' + a);
      }
      else{
        localStorage["bar"] = foo;
        alert('add "bar" in local storage');
      }
      function clearItem(){
        localStorage.clear();
        alert('localStorage clear');
      }
    </script>
  </body>
</html>

自动聚焦autofocus

\\HTML5为所有表单内元素提供了autofocus属性
<form>
    <input name='q' autofocus>
    <input type='submit' value='Search'>
</form>

HTML5 input标签

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
    </head>
    <body>
        <form>
            <input type='email' placeholder='email'>
            <input type='url' placeholder='url'>
            <input type='number' min='0' max='20' step='2' value='0'>
            <input type='range' min='0' max='30' step='1' value='10'>
            <input type='date'>
            <input type='time'>
            <input type='color'>
            <input type='search' placeholder='Search' autofocus>
            <input type='submit' value='OK'>
        </form>
    </body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容