剖析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 ...
随机推荐
- GMM高斯混合模型学习笔记(EM算法求解)
提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布.所以我们觉得不论什么样本分布都能够用混合模型来建模.由于高斯函数具有一 ...
- BGP拓扑正确配置
R1的配置 ----------------------------------------------------------------------------- sysname RT1# sup ...
- [android]APP启动界面——SplashActivity
概念 当前应用程序在启动的时候都会有一个展示自己公司LOGO和APP名字的界面.这个界面成为SplashActivity. 布局 <? xml version="1.0" e ...
- 2014年百度之星程序设计大赛 - 资格赛 第三题 Xor Sum
小记:艹蛋呢, 取long long的低30,32,34位都WA, 取31位才AC. .. 思路:依据求数组中两个数异或最大值.參考 代码: #include <stdio.h> #inc ...
- hdu5046(重复覆盖+二分)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意:要在n个城市里建造不超过k个机场覆盖所有城市,问机场城市之间最大距离最小为多少. 分析:二 ...
- adt-bundle-windows-x86_32-20140702
adt-bundle-windows-x86_32-20140702 Windows > Preference,在Android里没有NDK选项 法一:help->install new ...
- centos 6.5 升级内核 linux 3.12.17
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.el6.x86_64(Centos-6.5-x86_64-mi ...
- cocos2d-html5游戏图片资源选择
cocos2d-html5游戏图片资源能够选择,单张的图片作为一个精灵或者场景的载入对象.也能够把图片给做成plist文件.通过plist来訪问图片资源.其中优缺点.使用方式在个人的測试其中体现例如以 ...
- macbook连接linuxserver后不显示matlab桌面[问题]
macbook 登录远程linuxserver.Macbook今天,系统版本号10.9.4.这是更新,打开matlab当提醒x11不存在.一个接着安装Xquarz2.7.6. matlab它可以在本地 ...
- Android开发工具综述,开发人员必备工具
安卓开发工具汇总.开发者必备.安卓开发过程中须要用到各种工具,作为一名安卓开发者,有木有感到亚历山大,那么多工具! 今天给大家汇总了一下安卓开发工具,安卓开发者必备利器. 1.Draw 9-Patch ...