是否有已弃用的HTML元素在当前浏览器中失去支持的示例?

Bra*_*roy 7 html deprecated

我们大多数人都知道,现在有些标签会被弃用,这意味着它已经过时了.它后面跟着一个较新的HTML构造,或者它可以在CSS中完成(例如<center>).但是,我想知道的问题是:当标签或元素被弃用时,它将来会从浏览器支持中删除吗?换句话说,目前我所知道的所有浏览器都支持<center>,但我可以想象,浏览器继续支持已弃用的内容可能效率不高.因此,支持必须在一段时间后下降.

浏览器是否可能会删除对曾经非常常见的标记或元素的支持?为了提供一个更适合SO问答模板的问题,我将重新阐述以上所有内容:是否知道浏览器已经放弃了对曾经常见的属性或元素的支持?

我能找到的唯一一件事是在文档中,说明:

推荐使用弃用的元素或属性是较新构造已过时的元素或属性.不推荐使用的元素在参考手册中的适当位置定义,但明确标记为已弃用.在将来的HTML版本中,不推荐使用的元素可能会过时.

出于向后兼容性的原因,用户代理应继续支持已弃用的元素.

元素和属性的定义清楚地表明哪些被弃用.

我认为,这不是基于意见的.我想知道是否存在已经被浏览器实际上不再支持的标签的情况.这不受意见的约束.但我确实理解这个问题对此有一种开放的感觉.因此,我想澄清一下,我正在寻找浏览器放弃支持的实际和事实证据.我不是要求任何预见者站出来承认他们的神奇力量,我只是在寻找过去发生的案例.

请注意,欢迎提出有关我的问题有效性的评论 - 而不是简单地投票.

Ric*_*ock 11

下面的代码从不推荐的标签创建元素,并输出浏览器认为新创建的元素的真实内容:

var dep= 'acronym|applet|basefont|bgsound|big|blink|center|dir|font|frame|frameset|hgroup|isindex|listing|marquee|menu|multicol|nextid|nobr|noembed|noframes|plaintext|spacer|strike|tt|xmp'.split('|');

var s= '<table>';
dep.forEach(function(val) {
  var el= document.createElement(val),
      str= el.toString().slice(8,-1),
      style= 'HTMLElement HTMLPhraseElement HTMLBlockElement HTMLPreElement HTMLSpanElement HTMLDivElement'.indexOf(str)>-1 ? 'background:yellow' :
             str==='HTMLUnknownElement' ? 'background:orange' :
             '';
  el.innerHTML= val;
  document.body.appendChild(el);
  s+= '<tr style="'+style+'"><td>'+val+'<td>'+str;
});
s+= '</table>';
document.getElementById('list').innerHTML= s;
Run Code Online (Sandbox Code Playgroud)

小提琴

以下是当前版本的基于Windows的浏览器的输出:

在此输入图像描述

我们可以假设该浏览器支持以橙色突出显示的任何内容,以黄色突出显示的任何内容都是iffy,其余部分应完全支持.


为了确定通用"HTMLElements"的"iffyness"程度,我们可以将它们的默认CSS样式与a spandiv元素的默认样式进行比较.下面的代码片段通过在列表中添加一个新列来实现此目的,该列显示与每个不推荐使用的元素不同的样式.

"HTMLUnknownElement"类型的元素没有不同的样式(如预期的那样).大多数其他元素都有.对于那些不这样做的人,这并不一定意味着他们不支持不同的属性.例如,font元素的风格相匹配的默认样式的span-但font元素支持的属性sizeface,其中span没有支持.

function getStyles(el) {
  var gcs= getComputedStyle(el),
      st= gcs.cssText ? gcs.cssText.split(/; */) : el.currentStyle,
      obj= {},
      i, j, sp;
    
  for(var i = 0 ; i < st.length ; i++) {
    sp= st[i].split(':')[0];
    if(j = gcs.getPropertyValue(sp)) {
      obj[sp]= j;
    }
  }
  return obj;
} //getStyles

function compStyles(st1, st2) {
  var s= '';
  for(var i in st1) {
    if(st1[i] && st1[i] !== st2[i]) {
      s+= i+': '+st1[i]+' - '+st2[i]+'; ';
    }
  }
  return s;
} //compStyles

var dep= 'acronym|applet|basefont|bgsound|big|blink|center|dir|font|frame|frameset|hgroup|isindex|listing|marquee|menu|multicol|nextid|nobr|noembed|noframes|plaintext|spacer|strike|tt|xmp'.split('|'),
    s= '<table>',
    els= [],
    spanStyles=
      getStyles(
        document.body.appendChild(
          document.createElement('span')
        )
      ),
    divStyles=
      getStyles(
        document.body.appendChild(
          document.createElement('div')
        )
      );

dep.forEach(function(val) {
  var el= document.createElement(val),
      str= el.toString().slice(8,-1),
      display,
      style= 'HTMLElement HTMLPhraseElement HTMLBlockElement HTMLPreElement HTMLSpanElement HTMLDivElement'.indexOf(str)>-1 ? 'background:yellow' :
             str==='HTMLUnknownElement' ? 'background:orange' :
             '';

  document.body.appendChild(el);
  display= getStyles(el).display;
    
  el.innerHTML= val;
  els.push(el);
  s+= '<tr style="'+style+'">'+
        '<td>'+val+
        '<td>'+str+
        '<td>'+display+
        '<td>'+compStyles(
                 getStyles(el),
                 display==='block' ? divStyles : spanStyles
               )+
        '<td>';
  
});

s+= '</table>';
document.getElementById('list').innerHTML= s;

var td= document.querySelectorAll('td:last-child');
dep.forEach(function(val, idx) {
  td[idx].appendChild(els[idx]);
});
Run Code Online (Sandbox Code Playgroud)
table {
  font: 12px verdana;
  border-spacing: 0px;
  border: 1px solid black;
}

td {
  vertical-align: top;
  border-right: 1px solid #ddd;
  border-bottom: 1px solid #bbb;
}
Run Code Online (Sandbox Code Playgroud)
<div id="list"></div>
Run Code Online (Sandbox Code Playgroud)


psc*_*ler 7

它发生在以前.

<blink>HTML标签(见维基文档)曾经是很常见的,但它被认为是非常用户不友好,因而被废弃.Netscape,Opera和Firefox曾经支持它.Firefox是最后一个在23版中完全删除它的人.

<blink>元素非常突兀,变得非常不受欢迎,因此支持率的下降并不令人意外......但它也是向后兼容性的问题.删除某些东西的好处是否超过其功能的损失?<blink>可以在没有太多反响的情况下被移除(事情会停止眨眼).另一方面,<marquee>仍然支持类似的标签(其也经受了大量的负面印刷),很可能是因为删除它可能直接影响内容.

总而言之,我认为如果现有浏览器将删除已弃用的css/html(因为它是相对罕见的事件),而不是新的/未来的浏览器是否支持它们,问题就不是真的.向后兼容性只会到目前为止.

总结:是的,所以不要使用已弃用的功能.

  • 啊<blink>和<marquee>那些日子. (2认同)