我们大多数人都知道,现在有些标签会被弃用,这意味着它已经过时了。它后面跟着一个较新的HTML构造,或者它可以在CSS中完成(例如<center>
)。但是,我想知道的问题是:当标签或元素被弃用时,它将来会从浏览器支持中删除吗?换句话说,目前我所知道的所有浏览器都支持<center>
,但我可以想象,浏览器可能无法继续支持已弃用的内容。因此,支持必须在一段时间后停止。
浏览器是否可能会删除对曾经非常常见的标记或元素的支持?为了提供一个更适合SO问答模板的问题,我将重新解释以上所有内容:是已知的情况,浏览器已经放弃了对曾经很常见的属性或元素的支持吗
我唯一能找到的是the docs,说明:
已弃用不推荐使用的元素或属性是较新构造已过时的元素或属性。不推荐使用的元素定义在 参考手册在适当的位置,但明确标记为 弃用。在以后的版本中,不推荐使用的元素可能会过时 HTML。
出于向后兼容的原因,用户代理应继续支持已弃用的元素。
元素和属性的定义清楚地表明了哪些是 弃用。
在我看来,这是不基于意见。我问的是,是否存在已经不再被浏览器支持的标签的情况。这不受意见的约束。但我确实理解这个问题对此有一种开放的感觉。因此,我想澄清一下,我正在寻找浏览器放弃支持的实际和事实证据。我不是要求任何前瞻者挺身而出,承认他们的神奇力量,我只是在寻找过去曾发生的案例。
请注意,欢迎提出有关我问题有效性的评论 - 而不是简单地投票。
答案 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;
以下是当前版本的基于Windows的浏览器的输出:
我们可以假设以橙色突出显示的任何内容都是而不是支持该浏览器,任何以黄色突出显示的内容都是iffy,其余内容应该完全支持。
为了确定通用“HTMLElements”的“iffyness”程度,我们可以将它们的默认CSS样式与span
或div
元素的默认样式进行比较。下面的代码片段通过在列表中添加一个新列来实现此目的,该列显示与每个已弃用元素不同的样式。
“HTMLUnknownElement”类型的元素没有不同的样式(如预期的那样)。大多数其他元素都有。对于那些没有的人,这并不一定意味着他们不支持不同的属性。例如,font
元素的样式与span
的默认样式匹配 - 但font
元素支持size
和face
属性{{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 wiki和docs)曾经很常见,但它被认为非常不友好,因此被弃用了。 Netscape,Opera和Firefox曾经支持它。 Firefox是最终在版本23中完全删除它的。
<blink>
元素非常突兀,变得非常不受欢迎,所以支持的下降并不令人意外......但它也是向后兼容性的问题。删除某些东西的好处是否超过其功能的损失? <blink>
可以在没有太多反响的情况下被移除(事情会停止眨眼)。另一方面,仍然支持像<marquee>
这样的标签(也会收到大量的负面新闻),很可能是因为删除它可能直接影响内容。
总而言之,我认为如果现有浏览器删除已弃用的css / html(因为它是相对罕见的情况),问题并非如此,而是新的/未来的浏览器是否会支持它们。向后兼容性只会到目前为止。
总结:是的,所以不要使用已弃用的功能。