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

时间:2015-03-28 17:19:27

标签: html deprecated

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

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

我唯一能找到的是the docs,说明:

  

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

     

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

     

元素和属性的定义清楚地表明了哪些是   弃用。

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

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

2 个答案:

答案 0 :(得分: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;

Fiddle

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

enter image description here

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


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

“HTMLUnknownElement”类型的元素没有不同的样式(如预期的那样)。大多数其他元素都有。对于那些没有的人,这并不一定意味着他们不支持不同的属性。例如,font元素的样式与span的默认样式匹配 - 但font元素支持sizeface属性{{1} 支持。

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]);
});
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;
}

答案 1 :(得分:7)

之前发生过。

<blink> HTML标记(see wikidocs)曾经很常见,但它被认为非常不友好,因此被弃用了。 Netscape,Opera和Firefox曾经支持它。 Firefox是最终在版本23中完全删除它的。

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

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

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