Difference between SRC and HREF
NOTE: @John-Yin's answer is more appropriate considering the changes in the specs.
Yes. There is a differentiation between src and href and they can't be used interchangeably. We use src for replaced elements while href for establishing a relationship between the referencing document and an external resource.
href (Hypertext Reference) attribute specifies the location of a Web resource thus defining a link or relationship between the current element (in case of anchor a
) or current document (in case of link
) and the destination anchor or resource defined by this attribute. When we write:
<link href="style.css" rel="stylesheet" />
The browser understands that this resource is a stylesheet and the processing parsing of the page is not paused (rendering might be paused since the browser needs the style rules to paint and render the page). It is not similar to dumping the contents of the css file inside the style
tag. (Hence it is advisable to use link
rather than @import
for attaching stylesheets to your html document.)
src (Source) attribute just embeds the resource in the current document at the location of the element's definition. For eg. When the browser finds
<script src="script.js"></script>
The loading and processing of the page is paused until this the browser fetches, compiles and executes the file. It is similar to dumping the contents of the js file inside the script
tag. Similar is the case with img
tag. It is an empty tag and the content, that should come inside it, is defined by the src
attribute. The browser pauses the loading until it fetches and loads the image. [so is the case with iframe
]
This is the reason why it is advisable to load all JavaScript files at the bottom (before the </body>
tag)
update : Refer @John-Yin's answer for more info on how it is implemented as per HTML 5 specs.
apnerve's answer was correct before HTML 5 came out, now it's a little more complicated.
For example, the script
element, according to the HTML 5 specification, has two global attributes which change how the src
attribute functions: async
and defer
. These change how the script (embedded inline or imported from external file) should be executed.
This means there are three possible modes that can be selected using these attributes:
- When the
async
attribute is present, then the script will be executed asynchronously, as soon as it is available. - When the
async
attribute is not present but thedefer
attribute is present, then the script is executed when the page has finished parsing. - When neither attribute is present, then the script is fetched and executed immediately, before the user agent continues parsing the page.
For details please see HTML 5 recommendation
I just wanted to update with a new answer for whoever occasionally visits this topic. Some of the answers should be checked and archived by stackoverflow and every one of us.
I think <src>
adds some resources to the page and <href>
is just for providing a link to a resource(without adding the resource itself to the page).