我们大多数人都知道,现在有些标签会被弃用,这意味着它已经过时了.它后面跟着一个较新的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 span
或div
元素的默认样式进行比较.下面的代码片段通过在列表中添加一个新列来实现此目的,该列显示与每个不推荐使用的元素不同的样式.
"HTMLUnknownElement"类型的元素没有不同的样式(如预期的那样).大多数其他元素都有.对于那些不这样做的人,这并不一定意味着他们不支持不同的属性.例如,font
元素的风格相匹配的默认样式的span
-但font
元素支持的属性size
和face
,其中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)
它发生在以前.
在<blink>
HTML标签(见维基和文档)曾经是很常见的,但它被认为是非常用户不友好,因而被废弃.Netscape,Opera和Firefox曾经支持它.Firefox是最后一个在23版中完全删除它的人.
该<blink>
元素非常突兀,变得非常不受欢迎,因此支持率的下降并不令人意外......但它也是向后兼容性的问题.删除某些东西的好处是否超过其功能的损失?<blink>
可以在没有太多反响的情况下被移除(事情会停止眨眼).另一方面,<marquee>
仍然支持类似的标签(其也经受了大量的负面印刷),很可能是因为删除它可能直接影响内容.
总而言之,我认为如果现有浏览器将删除已弃用的css/html(因为它是相对罕见的事件),而不是新的/未来的浏览器是否支持它们,问题就不是真的.向后兼容性只会到目前为止.
总结:是的,所以不要使用已弃用的功能.