为什么<script src =“min.js”> </script>但<link rel =“stylesheet”href =“min”/>为什么不<style href =“min.css”> </style>

时间:2011-08-19 13:45:53

标签: javascript html css html5 w3c

我的一位亲戚开始学习Web开发问我这个问题。

为什么<script src="min.js"></script><link rel="stylesheet" href="min.css">为什么不<style href="min.css"></style>为什么我们使用link标记在页面中添加外部css但是当我们将css链接到页面但我们使用{{ 1}}当我们在<style>...</style>内写css时?

我告诉他这是因为规格。还有更多信息要提供给他吗?

6 个答案:

答案 0 :(得分:42)

这是历史......巧合?你可以推荐他阅读part about Past of diveintohtml5.info,其中有一些有趣的故事,实际上是网络开发人员之间的邮件通信。 Web开发人员意味着他们实际上是,正在开发我们现在看到的Web;)

即。我们习惯于<img>标记:

<IMG SRC="file://foobar.com/foo/bar/blargh.xbm">

可能是:

<ICON name="NoEntry" href="http://note/foo/bar/NoEntry.xbm">

<A HREF="..." INCLUDE>See photo</A>

<INCLUDE HREF="...">

但是finally devs decided to stick with <img>, which was already implemented

  

我们暂时不准备支持INCLUDE / EMBED。 ......所以我们   可能会去(不是ICON,因为不是全部   内联图像可以有意义地称为图标)。暂且,   内联图像不会显式内容类型;在路上,我们   计划支持(以及MIME的一般改编)。   实际上,我们目前使用的图像读取程序已经找到了   动态的图像格式,因此文件扩展名甚至不会   显著。

我不知道你问题的直接答案,但我对<link>标签也很好奇。找到答案可能包括一些网络档案挖掘。

答案 1 :(得分:25)

至少从W3C的角度来看,存在差异。

<style>元素引入了一组适用于当前文档的CSS规则。但是,外部样式表实际上被视为当前页面的整个文档related,用户代理可以自由忽略此类文档,具体取决于链接的typemedia属性。例如:

<link rel="stylesheet" type="text/css" media="screen" href="screen.css" />
<link rel="stylesheet" type="text/css" media="print" href="print.css" />

在这种情况下,用户代理通常只会跟随其中一个链接,screen一个(用于正常渲染)或print一个(用于打印)。我们的想法是仅通过下载适当的资源来保留带宽,而不是在以后获取所有内容并过滤媒体类型。

规范中提到了这一点:

  

LINK元素将外部样式表链接到文档时,   type属性指定样式表语言和media   attribute指定预期的渲染媒体或媒体。用户   代理可以通过仅从网络中检索那些样式来节省时间   适用于当前设备的工作表。

答案 2 :(得分:3)

它们都具有基本相同的含义,并且您发现了HTML中的一种不一致性。原因是标准基于不同浏览器的实现。不同的浏览器在不同的标签中提出了属性,而W3C只是决定保留一些不一致性以保持向后的兼容性。

使用src的元素:script img iframe input video frame

使用href的元素:a link base

答案 3 :(得分:1)

<link>标记用于将其他文档“链接”到当前文档,并用它来描述它与rel的关系。

您还可以使用<link>将其他内容与文档相关联。例如,favicons:

<link rel="shortcut icon" href="favicon.ico" />

答案 4 :(得分:1)

这可能解释了一些事情,我想:http://www.w3.org/TR/html4/struct/links.html

答案 5 :(得分:1)

link ref vs style的可能原因:

link只能访问head,其中&#34;元数据内容&#34;是允许的,通常是head

style无法进入HTML5之前的body(现在您可以使用scoped,但仍然不能使用外部样式)。因此,link refstyle src之间的选择是任意的。

但是,

script可能已经在HTML5之前的body中包含了一个外部脚本,因此必须有script src。但由于它必须存在,为什么不在head中允许它(已经允许script),并禁止link rel=script以避免重复?