网景和微软的浏览器之战早已淡去多年,最终以微软的IE浏览器胜出,特别是IE6的出现,一度成为世界浏览器的霸主,至今无人能敌。去年IE6荣获“终身成就奖”,真是实至名归。本文涉及的两个标签abbr和acronym,与这两家公司渊源颇深,让我们一起来通过它们去回顾那段风云岁月,更深入地去了解它们吧!

  从用法上来说,abbr和acronym并没有多大区别,它们作为缩写标签在HTML4.0就已经被引入。abbr缩略的范围更为广泛,可以是短语、单词首字母、甚至中文,acronym当然也都可以用,但是更精确的用法应该是用来缩写单词首字母。它们在浏览器上的表现形式主要有两点:

  1.   文本下方有类似border-style:dotted样式的虚线;
  2.   鼠标移到文本时,会有pop弹出,pop里面的文字即标签title属性的值。

  其实这两点表现形式,正好把缩略标签的作用体现出来:一个是重点提示,另外就是缩略功能。

  刚开始,网景发明了abbr,人们通过鼠标移到文本上方,就能看到对文本更加详细的注释。但是在IE6及其以下版本不会出现这样的效果。为什么?因为当年网景和微软在竞争白热化的情况下,微软的IE浏览器索性直接忽略abbr标签。那微软也想通过一个标签,能够实现上述那样的效果,怎么办?

  在那个浏览器市场决定生杀大权的时代,无人能够阻止微软的“霸道”,于是另一个缩写标签应运而生,它就是acronym。acronym的出现当然能够解决IE6及其以下版本不显示问题,但是从此web开发中有了两个缩写标签,它们都能够通过w3c的验证,而开发人员经常是傻傻分不清楚两者的区别了。

  都说三十年河东三十年河西,当年网景败给微软,网景的许多工程师纷纷离职,他们中的许多人又纷纷加入目前为大家所熟知的IT公司,如google、apple、w3c组织、mozilla,这些工程师先后开发出firefox、chrome、safari等目前世界上主流的浏览器;另一方面,由于微软IE浏览器渐显老态龙钟,不管是漏洞或者启动速度,还是访问体验。用户的抱怨越来越多,终于有一天,用户大规模地逃离,让微软意识到需要对IE6进行升级了。所以大家会发现,从06年以后,微软对IE浏览器的升级越来越频繁。

  微软的“霸道”在十多年后,终于是受到了惩罚。w3c组织在HTML5明确提出,acronym将作为废弃标签而不再被应用到web开发中了。

  所以,通过这段历史的阐述,我想说明的是:所有存在的东西都是由当时的历史决定的,有些东西最终被历史淘汰,跟它自身的局限性息息相关。人们渴望大一统,正所谓合久必分,分久必合。

  现在,我们可以不必理会acronym了,把心放到abbr上来。先给行简单的代码:

<abbr title="Cascading Style Sheet">CSS</abbr>

  将这行代码放在body结构里,在各浏览器下查看效果。你会发现,使用ie7以上版本的trident浏览器,webkit和gecko浏览器,当鼠标移到“CSS”文字上时,会有pop弹出,其中IE和谷歌浏览器的文本下方没有虚线,而火狐和opera则有虚线。前面说过,abbr在IE6下直接被忽略,所以什么效果都没有。

  为了让虚线效果都一致,你可以添加这样一段样式:

abbr,acronym,span.abbr{
cursor : help;
border-bottom : 1px dotted #;
}

  这时候,再查看,除了虚线一致外,鼠标移到文本上还有一个问号提示呢。

  如何解决IE6忽略abbr标签的问题?有两个办法。

  1.   通过嵌套无语义的span标签,来模拟acronym。具体实现代码如下:

    <abbr title="Cascading Style Sheet">
       <span class="abbr" title="Cascading Style Sheet">CSS</span>
    </abbr>

      这时候,你再结合上面的样式,就会发现问题已经解决。但是这种方法不够好,代码不够健壮。如何不添加额外标签而让abbr实现应有的表现?

  2. 脚本实现

  追加脚本代码:

function styleAbbr() {
var oldBodyText, newBodyText, reg
if (isIE) {
oldBodyText = document.body.innerHTML;
reg = /<ABBR([^>]*)>([^<]*)<\/ABBR>/g;
newBodyText = oldBodyText.replace(reg, '<ABBR $1><SPAN class=\"abbr\" $1>$2</SPAN></ABBR>');
document.body.innerHTML = newBodyText;
}
} window.onload = function(){
styleAbbr()
}; isIE = (document.all) ? true:false;

  把这段代码添加到head头部里,同样可以解决IE6不兼容abbr标签的问题。该段脚本很简单,相信大家都看得懂。不作解释...

  希望本文对你有帮助,up!

  申明:后半部分的代码参考自网上。

   

   

   

   

   

▲历史回眸--abbr和acronym的渊源的更多相关文章

  1. 引用、引用和术语定义<abbr><acronym><address><bdo><blockquote><q><cite><dfn>

    <abbr>-缩写 <acronym>-首字母缩写  <address>-地址 <bdo>-文字方向 <blockquote>-长的引用 & ...

  2. 【HTML基础】<acronym>和<abbr>的区别

    缩写标签<acronym> <abbr>的区别 大家都知道HTML定义缩写有<acronym> <abbr>两种标签,但是经常分不清楚他们.这两个标签虽 ...

  3. 学习笔记 第十二章 CSS3+HTML5网页排版

    第12章   CSS3+HTML5网页排版 [学习重点] 正确使用HTML5结构标签 正确使用HTML5语义元素 能够设计符合标准的网页结构 12.1  使用结构标签 在制作网页时,不仅需要使用< ...

  4. Css中的两个重要概念:块状元素和内联元素

    一.display:block display:block就是将元素显示为块级元素,一般是其他元素的容器,可容纳内联元素和其他块状元素,块状元素排斥其他元素与其位于同一行,宽度(width)高度(he ...

  5. CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  6. 【干货分享】前端面试知识点锦集01(HTML篇)——附答案

    一.HTML部分 1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层分别是:HTML.CSS.JavaScript作用:HTML实现页面结构,CSS完成页面的表现与风格 ...

  7. 我的博客CSS

    这个是按照custom标准模板来做的,博客园已经有模版了,有些细节不是很好,这个是源CSS,喜欢的可以自由DIY,完善更好. @charset "utf-8"; /* CSS Do ...

  8. CSS 清除默认样式

    通常有以下几句就够了: *{margin:0;padding:0} li{list-style:none} img{vertical-align:top;border:none} 如果你想写全也可以: ...

  9. HTML元素基础学习

    HTML元素 HTML文档是由HTML元素定义的.HTML元素是指从start tag(opening tag)到end tag(closing tag)的所有代码,即start tag + cont ...

随机推荐

  1. Bash String Manipulation Examples – Length, Substring, Find and Replace--reference

    In bash shell, when you use a dollar sign followed by a variable name, shell expands the variable wi ...

  2. 在文件地理数据库中使用 SQL 进行报告和分析 (转)

    ================以下摘自ArcGIS10.1帮助=================== 文件地理数据库允许在 QueryDef 中通过 SubFields(字段列表)方法使用表达式和别 ...

  3. Android开发——避免内存泄露

    本文翻译自Avoiding memory leak——Post by Romain Guy 著作权归原作者所有.转载请注明出处,由JohnTsai翻译 Android应用被分配的堆的大小限制为16MB ...

  4. oracle Form Builer:FIND_FORM Built-in

    Description Searches the list of forms and returns a form module ID when it finds a valid form with ...

  5. Flume简介与使用(一)——Flume安装与配置

    Flume简介与使用(一)——Flume安装与配置 Flume简介 Flume是一个分布式的.可靠的.实用的服务——从不同的数据源高效的采集.整合.移动海量数据. 分布式:可以多台机器同时运行采集数据 ...

  6. Fragment碎片频繁来回切换的时候报java.lang.IllegalStateException: No activity

    出现这个问题的原因是因为使用的transcation.replace(fragmentTwo);的方式进行碎片切换的. 解决方案是使用add和show.hide方法组合实现碎片的切换(应该是显示.隐藏 ...

  7. 介绍SmartUpload很好的网站

    附带链接:http://www.cnblogs.com/elleniou/archive/2012/09/24/2700583.html

  8. 20151212Jquery 工具函数代码备份

    $(function () { /*var str=' jquery '; alert(str); alert($.trim(str));*/ /*var arr=['张三','李四','王五','麻 ...

  9. Jquery CheckBox复选框 全选/取消全选 最佳实现方式 参考案例

    <input id="chkAll" type="checkbox" />全选/取消全选</div> <asp:Repeater ...

  10. phaser源码解析(一) Phaser.Utils类下shuffle方法

    /** * #一个 基于 费雪耶茨排列 洗牌方法 * A standard Fisher-Yates Array shuffle implementation. * @method Phaser.Ut ...