HTML5中 标签的详细介绍

HTML5中<template>标签的详细介绍(图文)

这篇文章主要介绍了 HTML5中的template标签,是HTML5入门中的重要知识,须要的朋友能够参考 

1、HTML5 template元素初面php

<template>元素,基本上能够肯定是2013年才出现的。干吗用的呢,顾名思意,就是用来声明是“模板元素”。css

目前,咱们在HTML中嵌入模板HTML,每每是相似这样的写法:html

  1. 1
    2
    3
    < script type = "text/template" >
    // ...  
    </ script >

实际上,并不存在type="text/template"这样的标准写法,<template>元素的出现旨在让HTML模板HTML变得更加标准与规范。前端

之前,咱们可能还使用过<textarea>或者<xmp>(废止但依然可用)嵌套非转义的HTML标签代码,实现一些特定的前端功能,但,一样的,跟上面的流行用法同样,都是不规范的。从将来趋势来说,显然<template>标签才是王道。可是,兼容性是个不可忽略的问题,所以,就算扯得不少不多,实际价值有有限,所以,这里仅仅简单介绍下。
2、HTML5 template元素复面web

看下下面四种嵌套图片HTML,同时图片内容不显示,不会有请求的写法:面试

1
2
3
4
5
6
7
8
9
10
11
12
< script type = "text/template" >
< img src = "mm1.jpg" >
</ script >
< textarea style = "display: none;" >
< img src = "mm1.jpg" >
</ textarea >
< xmp style = "display: none;" >
< img src = "mm1.jpg" >
</ xmp >
< template >
< img src = "mm1.jpg" >
</ template >

1. 标签内容隐藏性浏览器

<script>自己的特定,让内部的HTML标签是按照字符串处理的,所以,天生内容不显示。可是,在DreamWeaver中,这种写法有个很大的问题,就是在script中书写模板HTML时候,标签自动闭合的永远是</script>这个很讨厌的。
<textarea>为文本域,里面嵌套的HTML片断会被当作文本域的值。但,文本域自己是可见的,所以须要额外的设置display: none;
<xmp>是个很老很特殊的属性,语义为example,示例。听说后来被<pre>标签取代而废止,实际上,目前,全部的浏览器都是支持的。可是,其跟<pre>标签不能划等号。<pre>里面有个<img>标签,显示的则是一张图片,而<xmp>呈现的就是一段HTML代码。不过,与<textarea>同样,内容不显示的话,还须要额外的设置display: none;
上面这个<template>标签上没有设置display: none;,注意到了没有。为什么?这只是发挥了<template>标签元素的本来特性,天生display:none,同时模板元素内部内容是死活不会呈现的。所以,无需设置隐藏。这就是HTML5 <template>标签元素特征之一:标签内容隐藏性.app

2. 标签位置任意性
除了上面<template>子元素自然隐藏外,<template>标签还有一个特性,就是位置任意性,这很是相似<script>或者<style>标签,能够在<head>中,也能够在<body>或者<frameset>中。框架

3. childNodes无效性
虽然,肉眼看上去是<template>标签里面还有不少子标签,这种惯性思惟在这里是不受用的。假设变量template是咱们得到的一个<template>标签DOM(里面一大堆HTML代码),你会发现:template.childNodes是个空大屁。咱们可使用template.innerHTML获取完整的HTML片断。若是你非得获取“伪子元素”。也是有办法的,OK,睁大眼睛,要使用content属性。spa

template.content会返回一个文档片断,你能够理解为另一个document,而后,使用document下的一些查询API就能够得到<template>标签里面的“伪子元素”了。例如,得到第一张图片元素则是:

CSS Code复制内容到剪贴板

1
var image_first = template.content.querySelector("img");
3、HTML5 template元素终面

您能够狠狠地点击这里:HTML5 template模板元素体验demo

模板元素与CSS
若是浏览器有眼不识泰山,认为<template>就是个普通的自定义元素,则显示的就会使下面这个样子,内部的标签按照通常的标签渲染了。

若是浏览器与时俱进,则显示会是下面这样,自身CSS渲染,内部标签直接异空间不渲染,例如Chrome:

也就是说,虽然从CSS的角度看,<template>就是个跟CSS打得火热的普通元素,可是,从HTML角度看,其犹如带土的写轮眼,可让内部标签转移到异空间,血迹界限般稀有。

默认状况下,<template>是隐藏的,实际是默认其display属性为none. 使用下面的代码一测便知:

1
window.getComputedStyle(template).display;    // 结果是"none"

所以,demo中才设置了以下的CSS声明:

CSS Code复制内容到剪贴板

1
template { display: block; ... }
模板的克隆
  1. 若是你是在HTML字符串上处理,相似于如今流行的MVC框架模板技术,则template.innerHTML足矣。然,<template>比<script>强大之处在于,<script>内部内容只能当作字符串来获取,而<template>虽然存在于异空间,可是,依然能够节点获取(上面有展现),以及完整克隆,语法相似下面:

CSS Code复制内容到剪贴板

1
var clone = document.importNode(template.content, true);
    1. 而后,你就能够用append节点(appendChild)的方式,加载模板内容了,而不是(没得选择)append字符串加载模板内容。标题是“简介”,所以,不展开,也不放具体的实例了(如有兴趣,可参考文末的参考文章),你们知道有这么回事就好。

4、HTML5 template面试小结

至此,<template>元素的行为、表现以及一些方法基本上有了大体的认识,若是这是场面试的话,则我对<template>的评价仍是挺高的,特殊场景使用的特殊利器,一些相似“异空间”的设计也是让人大开眼界,这个元素要比<hgroup>之类的HTML5元素更受欢迎更受关注也更有潜力。

临近最后,放上兼容性表,IE浏览器拖了好大的后腿,不过我表示很淡定,由于对IE早已麻木!

兼容性

相关文章
相关标签/搜索