HTML 基础知识 02

HTML5 的新特性

HTML5 是现行 HTML 的主流形态,为承载丰富的 Web 内容而设计,并且无需额外插件。它是跨平台的,被设计为在不同类型的硬件(PC、平板、手机、电视机等)之上运行。

一些有趣的新特性

  • 新的文档类型(DOCTYPE)声明:<!DOCTYPE html>

  • 更宽松的属性语法:布尔属性可以不写属性值;属性值在没有空格等特殊字符时可以不加引号。无引号写法不能包含空格,value=John Doe 会被解析成 value="John" 再加上一个名为 Doe 的属性。

    <input type="text" value="John Doe" disabled> <!-- 不需要指定属性值 -->
    <input type="text" value=John> <!-- 不需要引号(值里不能有空格) -->
    <input type="text" value="John Doe"> <!-- 双引号 -->
    <input type="text" value='John Doe'> <!-- 单引号 -->
    
  • 拖拽释放(Drag and drop)API。

  • 语义化更好的内容标签:headernavfooterasidearticlesection

  • 新的元素:canvassvgaudiovideo

  • 本地存储:localStorage 长期保存数据,浏览器关闭后数据不丢失;sessionStorage 随会话存在,关闭标签页即清除。二者都是 HTML5 提供的 Web Storage API。

  • 新的表单控件类型:datetimeemailurlsearch 等。没有 type="calendar" 这种取值;需要日期选择时用 datedatetime-local

  • 同期常用的相关技术:Web Worker、WebSocket、Geolocation。

IE6-8 支持通过 document.createElement 方法产生的标签,可以利用这一特性让这些浏览器识别 HTML5 新标签。浏览器识别新标签后,还需要补上标签的默认样式。

更省事的方式是直接使用成熟的兼容脚本,当时用得最多的是 html5shim(现行常见包名是 html5shiv)。现行浏览器已原生支持这些标签,只有必须兼容 IE8 及以下时才需要它。

删除的一些元素

acronymappletbasefontbigcenterdirfontframeframesetnoframesstrikett 等。

渐进增强和优雅降级

渐进增强:针对低版本浏览器构建页面,保证最基本的功能,再针对高级浏览器追加效果、交互,达到更好的用户体验。

优雅降级:一开始就根据高版本浏览器构建完整功能,再针对低版本浏览器做兼容。

labelinput 的关联

label 用来定义标签文本和表单控件的关系。用户选择该标签时,浏览器会把焦点转到与之关联的表单控件上。

labelinput 的配对方法有两种:

  • input 嵌套在 label 中(隐式)。
  • labelfor 属性与 inputid 关联(显式)。
<!-- 隐式 -->
<label>
  Name:
  <input type="text" name="name" />
</label>

<!-- 显式 -->
<label for="name">Name: </label>
<input type="text" id="name" name="name" />

注意:带有 type="submit"type="button"input 不强制需要 label,但其他表单控件(包括 textareaselect)都最好有 label

配对之后有此特性:点击 label 或其子元素(隐式关联时,无论与 input 是何种布局),都会执行关联 inputclick 事件。

此特性容易引出的 Bug:点击 label 时,click 事件被触发两次。

  • 触发条件labelinput 已配对(显式或隐式),并且监听的是它们上层元素的 click 事件。
  • 问题原因:点击 label 时事件冒泡一次,同时会触发关联 inputclick,该事件会再次冒泡。
  • 解决方案:不用 label;或在 click 处理里判断事件源,只处理来自 input 的那一次。

页面锚点偏移

锚点定位时,页面往往会把目标滚到窗口最顶部。上部若有导航条,或出于美观考虑,都希望定位后内容与顶部留出间距。浏览器默认的锚点定位做不到这一点。

  • Element.scrollIntoView() 滚动页面:该方法将当前元素滚动到浏览器窗口的可视区域内。

  • 利用 padding-top 把锚点「垫」下 100px,再用 margin-top: -100px 把视觉位置拉回去,抵消 padding-top 产生的 100px 偏移。

    .anchor {
      padding-top: 100px;
      margin-top: -100px;
    }
    

    类似地,也可以在元素前面新加一个元素并设置高度,本元素再设负的 margin-top

    现行也可以用 scroll-margin-top(或滚动容器上的 scroll-padding-top),专门给滚动定位留出顶部间距,不必再靠正负 margin 对冲。

  • 利用 CSS 的 :target 选择器。:target 只在现代浏览器可用,IE 从 IE9 起支持。

    .anchor:target {
      padding-top: 100px;
    }
    
  • 绑定 windowhashchange 事件,控制页面滑动。

    window.addEventListener('hashchange', function(e) {
        window.scrollBy(0, -100)
    }, false);
    

    页面初次带着 hash 打开时,不一定会触发 hashchange,需要的话还要在加载时单独处理一次。

© lizhao all right reserved,powered by Gitbook文件修订时间: 2026-08-25 22:27:11

results matching ""

    No results matching ""