剖析html对标准标签和自定义标签闭合与不闭合渲染问题
昨天在修改去年写的系统的时候无意中看到了当时写的一个利用标准标签未闭合在单元格内把整个单元格颜色渲染成红色的效果,如下:
当时的问题是从后台返回来的是个int整数而%是写在页面上的如图
这 时候就出现怎么把后面的%也渲染成红色的问题,当时我用的是标签label未闭合跟了一个只有闭合的自定义标签来实现的,看到这个我突然有些疑惑浏览器对 标签的闭合渲染到底是怎么的处理方式,为啥这个错误的闭合方式却没有引起布局的错乱,于是我做了一个研究实验来剖析下浏览器对标准标签和自定义标签闭合与 不闭合渲染的问题。为了使条理更清晰我整理了一下实验顺序,一步步来剖析下出现的几个问题。
第一:浏览器以什么样的方式来渲染标签
div之外span之前span之后
代码如下:
<div style='color:green;'>div之后span之前
<span style='color:red;'>紧跟span
</div>
div之外span之前</span>span之后
差异对比效果代码如下(不好意思这里编辑器老是改变我的代码只能截图了):
IE10.

IE9.

<span style='color:blue;'>span之后div之前
<div style='color:green;'>div之后span之前
<span style='color:red;'>紧跟span
</span>
span闭合1之外闭合2之前</span>
span之外闭合div之前
</div>
div之外
从上面的对比可以看出浏览器应该是从外到内以开始标签为起点依次查找成对的标签做渲染, 有点绕人,可以这么理解浏览器从上到下先把标签入组,然后从最外的起始标签开始查找他的闭合标签渲染,依次执行,页面显示的总是最后渲染出来的所有最内的 总是最后渲染的最后显示的(这里ie9没有找到闭合的就放弃了渲染)。明白这个我们接下来做第二个实验.
实验二:标准标签闭合与不闭合渲染
| 3 | label标准标签闭合里标准标签之外 | 分隔区分的单元格啥也没有 | 标准标签span之后label结束之前标准标签label结束之后,后面啥也没有了span没有闭合 |
代码如下:
<table style='width:100%;border:1px solid black;'>
<tr>
<td>3</td>
<td>
<label style="color: red;">label标准标签闭合里</label>标准标签之外</td>
<td>分隔区分的单元格啥也没有</td>
<td><span style="color: red;">标准标签span之后label结束之前</label>标准标签label结束之后,后面啥也没有了span没有闭合</td>
</tr>
</table>
本实验还和实验一说明的是一个问题,这里主要是和下面几个做对比的但被我现在拆开了结束会给出总体对比效果与代码。
实验三:自定义标签标签之内闭合

代码如下:
<table style='width:100%;border:1px solid black;'>
<tr>
<td>2</td>
<td>
<label style="color: red;">label标准标签带闭合之内</label>标准标签闭合之外</td>
<td>分隔区分的单元格啥也没有</td>
<td>
<la style="color: red;">自定义标签la之内</la>
</td>
</tr>
</table>
由上可以看出自定义标签闭合浏览器像标准标签一样渲染
实验三:不同的自定义标签开始和结束组合以及不同浏览器的渲染方式
IE10效果如下

IE9和谷歌火狐效果如下

为啥没有提到ie78因为他们对自定义的不渲染忽略他们不做研究,代码如下:
<table style='width:100%;border:1px solid black;'>
<tr>
<td>4</td>
<td>
<label style="color: red;">标准标签label闭合之内</label>闭合之外</td>
<td>分隔区分的单元格啥也没有</td>
<td>
<la style="color: red;">
自定义标签la开始之后自定义标签lab结束之前</lab>lab之后没有了la没有结束fff注意这里分别在ie火狐谷歌中看效果</td>
</tr>
<tr>
<td>5</td>
<td>
<label style="color: red;">标准标签label闭合了</label>标准标签闭合之外</td>
<td>分隔区分的单元格啥也没有</td>
<td>
<la style="color: red;">自定义标签la开始之后自定义标签lab没有开始lab结束之前</lab>lab结束之后la结束之前</la>
fff注意这里分别在ie火狐谷歌中看效果</td>
</tr>
</table>
由此看出:1.IE9和谷歌和火狐浏览器对非标准标签渲染是查找对称性,如<la></la>和<la></lab></la>这是一组相同的渲染
2.IE10查找自定义标签两两成对不要求对称(这里没有提到里面插入标准标签在自定义标签里面下面实验将涉及)
实验四:自定义标签和标准标签组合
IE10效果如下:

IE9和谷歌火狐效果如下:

代码如下:
<table style='width:100%;border:1px solid black;'>
<tr>
<td>1</td>
<td>
<label style="color: red;">label标准标签带闭合里</label>标准标签之外</td>
<td>分隔区分的单元格啥也没有</td>
<td>
<la style="color: red;">la自定义标签la和标准标签label结束之前</label>标准标签结束之后自定义标签lab之前</lab>自定义标签lab之后最后自定义标签la闭合</la>
fff注意这里分别在ie火狐谷歌中看效果</td>
</tr>
</table>
结合上一个实验看出浏览器对自定义标签和标准标签渲染方式:1.IE9和谷歌和火狐浏览器对非标准标签渲染是查找对称性,如<la></la>和<la></lab></la>这是一组相同的渲染
2.ie10
对标准标签和非标准标签是分开渲染,非标准标签渲染方式是查找不认识的对子进行渲染,如:<la></la>
和<la></lab>和<la></label></lab>这三个就是相同的一组渲染
总效果图:
IE10如下:

IE9效果如下:

谷歌火狐效果如下:

总结:
1.浏览器从外到内以开始标签为起点依次查找成对的标签做渲染
2.IE9和谷歌和火狐浏览器对非标准标签渲染是查找对称性,如<la></la>和<la></lab></la>这是一组相同的渲染
3.ie10
对标准标签和非标准标签是分开渲染,非标准标签渲染方式是查找不认识的对子进行渲染,如:<la></la>
和<la></lab>和<la></label></lab>这三个就是相同的一组渲染
以上纯属个人拙见,如有错误欢迎指正,谢谢。
剖析html对标准标签和自定义标签闭合与不闭合渲染问题的更多相关文章
- [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Django框架(七)—— 模板层:变量、过滤器、标签、自定义标签和过滤器
目录 模板层:变量.过滤器.标签.自定义标签和过滤器 一.模板层变量 1.语法 2.使用 二.模板层之过滤器 1.语法 2.常用过滤器 3.其他过滤器 三.模板值标签 1.for标签 2.if标签 3 ...
- 从零开始学spring源码之xml解析(二):默认标签和自定义标签解析
默认标签: 上一篇说到spring的默认标签和自定义标签,发现这里面东西还蛮多的.决定还是拆开来写.今天就来好好聊聊这两块是怎么玩的,首先我们先看看默认标签: private void parseDe ...
- JSP标签:jsp内置标签、jstl标签、自定义标签
一.jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1 ...
- Jsp开发自定义标签,自定义标签将字符串转成指定的时间格式显示
本例以将 字符串格式的时间转成指定的时间格式显示. 第一步.定义一个标签处理程序类,需要集成javax.servlet.jsp.tagext.TagSupport,代码如下: import java. ...
- 一、JSP标签介绍,自定义标签
一.JSP标签介绍 1. 标签库有什么作用 自定义标签库是一种优秀的表现层技术,之前介绍的MVC模式,我们使用jsp作为表现层,但是jsp语法嵌套在html页面,美工还是很难直接参与开发,并且jsp脚 ...
- Django框架(六)--模板层:变量、过滤器、标签、自定义标签和过滤器
将页面的设计和Python的代码分离开会更干净简洁更容易维护. 我们可以使用 Django的 模板系统 (Template System)来实现这种模式 # django模板修改的视图函数 def c ...
- Django框架之第五篇(模板层) --变量、过滤器、标签、自定义标签、过滤器,模板的继承、模板的注入、静态文件
模板层 模板层就是html页面,Django系统中的(template) 一.视图层给模板传值的两种方法 方式一:通过键值对的形式传参,指名道姓的传参 n = 'xxx'f = 'yyy'return ...
- (三十)JSP标签之自定义标签
创建一个类,引入外部jsp-api.jar包(在tomcat 下lib包里有),这个类继承SimpleTagSupport 重写doTag()方法. jspprojec包下的helloTag类: 1 ...
随机推荐
- 沙朗javascript总结一下(一)---基础知识
我也听说过Javascript这东西.我一直感觉很神奇,但它并没有去太懂.今天,牛腩哥哥随后的初步研究,一些浅显的认识.就先总结一下. 首先,什么是javascript? javascript是一种直 ...
- c#中的jQuery——HtmlAgilityPack
原文:c#中的jQuery--HtmlAgilityPack c#中是否有javascript中的jQuery类库? jQuery在访问和操作HTML 的DOM的便捷是前端开发工程师的一种福音,在c# ...
- [品质生活] 舒适 Schick HYDRO 5剃须刀
[品质生活] 舒适 Schick HYDRO 5剃须刀 [品质生活] 舒适 Schick HYDRO 5剃须刀
- 基于CefGlue的桌面应用开发
原文地址:http://johnnyfee.github.io/csharp/2013/12/21/cef-glue/ 前言 如果你想使用WEB技术来开发桌面客户端,并且是想使用的语言也是C#时,那请 ...
- adm下载器
netdisk;5.2.7;PC;PC-Windows;6.2.9200;WindowsBaiduYunGuanJia
- Android中怎样在应用A中启动或安装应用B
看到别人做的游戏攻略,想着自己的游戏攻略也加入新的功能,即Android中怎样在应用A中启动或安装应用B.就查了一些资料整理下来. 启动或安装对应的应用的方法: Step1:推断是否安装目标应用.仅仅 ...
- leetcode 之 Permutation Sequence
Permutation Sequence The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and ...
- Creating Contextual Menus创建上下文菜单
A contextual menu offers actions that affect a specific item or context frame in the UI. You can pro ...
- SQL Server Compact免安装部署
原文:SQL Server Compact免安装部署 情况 应用程序中的EF使用了SQL Server Compact,打包部署到客户机器上后提示数据库连接异常,信息类似”配置节“.”Provider ...
- SWT中的Tree中 添加右键弹出菜单
先看一下效果: 如图:在树上单击鼠标右键会弹出 弹出式菜单.做法其实很简单,先做一个树: final TreeViewer treeViewer = new TreeViewer(group, SWT ...