剖析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 ...
随机推荐
- VSTO学习笔记(八)向 Word 2010 中写入表结构
原文:VSTO学习笔记(八)向 Word 2010 中写入表结构 前几天公司在做CMMI 3级认证,需要提交一系列的Word文档,其中有一种文档要求添加公司几个系统的数据库中的表结构.我临时接到了这项 ...
- 我在开发网站后得出的asp.Net网站优化总结
原文:我在开发网站后得出的asp.Net网站优化总结 asp.Net网站优化总结: 1.数据库优化: 首先是对查询语句的优化,开发时为了图快可以不考虑,但是后期维护时就必须要优化(比如:你调用代码生成 ...
- CC 3-Palindromes(manacher)
传送门:3-Palindromes 题意:求为回文串且能整除3且不前导0的子串个数. 分析:由 manacher算法O(N)可算出以i为坐标的最长为p[i]回文子串,且Si-k,Si-k+1..... ...
- poj1459(最大流)
传送门:Power Network 题意:在一个网络图中有n个点,其中有np个发电站,nc个用户,m条电线;每个发电站,用户,和电线都对应有一个最大的电流;让求出该网络中最大的电流. 分析:最大流裸题 ...
- 京东商城招聘scala 高级开发工程师 T3级别
岗位级别:T3 岗位职责: 1.参与自动调价.匹配系统的设计和实现 岗位要求: 1. 一年以上scala开发经验2.良好的函数式编程能力3. JAVA基础扎实4.熟悉大数据处理,有hadoop/hba ...
- 【HDU】4888 Redraw Beautiful Drawings 网络流【推断解是否唯一】
传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因 ...
- python面向对象的继承
无话可说,继承主要是一些父类继承,代码是非常具体的 #!/usr/bin/env python #coding:utf-8 class Father(object):#新式类 def __init__ ...
- Knockout应用开发指南 第四章:模板绑定
原文:Knockout应用开发指南 第四章:模板绑定 模板绑定The template binding 目的 template绑定通过模板将数据render到页面.模板绑定对于构建嵌套结构的页面非常方 ...
- java.net.SocketException: Connection reset 解决方法
java.net.SocketException: Connection reset 解决方法 最近纠结致死的一个java报错java.net.SocketException: Connection ...
- Hot Days Codeforces Round #132 (Div. 2) D(贪婪)
Description The official capital and the cultural capital of Berland are connected by a single road ...