Різниця між SRC та HREF


172

SRCІ HREFатрибути використовуються , щоб включити деякі зовнішні об'єкти , такі як зображення, файл CSS, в HTML - файл, будь-який інший веб - сторінку або файл JavaScript.

Чи є чітка диференціація між SRCі HREF? Де або коли використовувати SRCабо HREF? Я думаю, що їх не можна взаємозамінно використовувати.

Я наводжу нижче кілька прикладів, де використовуються ці атрибути:

  • Для посилання на файл CSS: href="cssfile.css"всередині тегу посилання.
  • Для посилання на JS-файл: src="myscript.js"всередині тегу сценарію.
  • Щоб віднести файл зображення: src="mypic.jpg"всередині тегу зображень.
  • Щоб звернутися до іншої веб-сторінки: href="http://www.webpage.com"всередині тега прив’язки.

Дякуємо кожному за ваші вкладення. Отже, схоже, що між цими двома чіткою відмінністю немає. Я хотів би зачекати ще деякий час, щоб отримати більше відповідей. Спостереження Одеда для мене виглядає дещо прийнятним.
Vijey

Існує відмінність між 2. Я детально написав свою відповідь, щоб пояснити це.
apnerve

Відповіді:


233

ПРИМІТКА: @ Джон-Інь відповідь більш доцільна з огляду на зміни в специфікаціях.


Так. Існує різниця між src і href, і вони не можуть бути взаємозамінними. Ми використовуємо src для замінених елементів у той час як href для встановлення зв'язку між референтним документом та зовнішнім ресурсом.

Атрибут href (Hypertext Reference) вказує розташування веб-ресурсу, визначаючи, таким чином, зв'язок або зв'язок між поточним елементом (у разі прив’язки a) або поточним документом (у випадку link) та кінцевим якорем або ресурсом, визначеним цим атрибутом. Коли ми пишемо:

<link href="style.css" rel="stylesheet" />

Браузер розуміє, що цей ресурс є таблицею стилів і обробкарозбір сторінки не призупиняється (візуалізація може бути призупинена, оскільки браузеру потрібні правила стилю для фарбування та візуалізації сторінки). Це не схоже на скидання вмісту файлу css всередині styleтегу. (Отже, доцільно використовувати linkзамість @importдодавання таблиць стилів до свого html-документа, а не замість цього .)

атрибут src (Source) просто вбудовує ресурс у поточний документ у місці визначення елемента. Наприклад, наприклад. Коли браузер знайде

<script src="script.js"></script>

Завантаження та обробка сторінки призупиняється, поки браузер не вибере, компілює та не виконає файл. Це схоже на скидання вмісту js-файлу всередині scriptтегу. Аналогічний випадок з imgтегом. Це порожній тег, і вміст, який повинен надходити всередині нього, визначається srcатрибутом. Браузер призупиняє завантаження, поки воно не отримає і не завантажить зображення. [так буває з iframe]

З цієї причини доцільно завантажувати всі файли JavaScript внизу (перед </body>тегом)


оновлення : див. відповідь на Джон-Інь для отримання додаткової інформації про те, як вона реалізована відповідно до специфікацій HTML 5.


4
Дякую за цей Apnerve. Це було для мене новиною.
Кайоте

наскільки ці мітки впливають на швидкість?
закінчився термін дії

4
@expiredninja srcзазвичай завантажує файл послідовно, а hrefпаралельно завантажує його. Отже, сприймається час завантаження збільшується при завантаженні ресурсів послідовно.
apnerve

То чому Google google PageSpeed ​​говорить про блокування зовнішніх посилань на CSS? developers.google.com/speed/docs/insights/OptimizeCSSDelivery
Freek

1
@Freek Так. Зовнішні посилання CSS блокують рендеринг і НЕ розбір , щоб уникнути FOUC (Flash Of Content) без стилів в більшості сучасних браузерів.
apnerve

59

Відповідь apnerve була правильною, перш ніж вийшов HTML 5, тепер це трохи складніше.

Наприклад, scriptелемент, згідно специфікації HTML 5 , має два глобальні атрибути, які змінюють спосіб srcфункціонування атрибута: asyncта defer. Вони змінюють спосіб виконання сценарію (вбудованого вбудований або імпортованого із зовнішнього файлу).

Це означає, що є три можливих режими, які можна вибрати за допомогою цих атрибутів:

  1. Коли asyncатрибут присутній, сценарій буде виконуватися асинхронно, як тільки він буде доступний.
  2. Якщо asyncатрибут відсутній, але deferатрибут присутній, сценарій виконується, коли сторінка закінчила розбір.
  3. Якщо жоден атрибут не присутній, сценарій виймається та виконується негайно, перш ніж користувальницький агент продовжить розбір сторінки.

Детальніше див. Рекомендацію HTML 5

Я просто хотів оновити новою відповіддю для тих, хто періодично відвідує цю тему. Деякі відповіді повинні перевіряти та архівувати stackoverflow та кожен із нас.


1
Існує велика різниця в тому, як <a> використовує 'href' та як <link rel = "stylesheet"> робить. <link> вимагає завантаження згаданого ресурсу, щоб він фактично став частиною сторінки, представленої користувачеві, тоді як <a> НЕ спричиняє завантаження цілі, поки ви не натиснете на посилання. Тож я б сказав, що <посилання> принаймні у випадку таблиць стилів ДОЛЖЕН (якщо це можливо) використовувати 'src', а не 'href'. Або ще краще, що <style> повинен приймати атрибут 'src', ЩО СПОСОБ <script> робить.
Panu Logic

17

Я думаю, що <src>додає деякі ресурси на сторінку і <href>є лише для надання посилання на ресурс (без додавання самого ресурсу на сторінку).


6

Просте визначення

SRC : (Source). To specify the origin of (a communication); document:     

HREF : (Hypertext Reference). A reference or link to another page, document...

1
Тож посилання не визначає походження?
BroDev

4

SRC ( S ou rc e) - я хочу завантажити цей ресурс для себе.

Наприклад:

Absolute URL with script element: <script src="http://googleapi.com/jquery/script.js"></script>   

Relative URL with img element : <img src="mypic.jpg">

HREF ( H ypertext REF erence ) - я хочу звернутися до цього ресурсу для когось іншого.

Наприклад:

Absolute URL with anchor element: <a href="http://www.google.com/">Click here</a>

Relative URL with link element: <link href="mystylesheet.css" type="text/css">

Люб'язно


3

H REF : Є REF разностная до інформації для поточної сторінки , тобто інформацію CSS для стилю сторінки або посилання на іншу сторінку. Розбір сторінки не зупинений.

SRC : Чи потрібно додавати / завантажувати повторно ДЖЕРЕЛЮ на сторінку, як на зображеннях чи JavaScript. Розбір сторінки може припинитися залежно від кодованого атрибуту. Ось чому краще додати скрипт перед тегом кінця тіла, щоб візуалізація сторінки не затримувалася.



2

Від W3:

Коли встановлено атрибут href елемента A, елемент визначає джерело якоря для посилання, яке може бути активоване користувачем для отримання веб-ресурсу. Якір джерела - це розташування екземпляра A, а кінцевий пункт призначення - веб-ресурс.

Джерело: http://www.w3.org/TR/html401/struct/links.html

Цей атрибут вказує розташування ресурсу зображення. Прикладами широко визнаних форматів зображень є GIF, JPEG та PNG.

Джерело: http://www.w3.org/TR/REC-html40/struct/objects.html


2

Просте визначення

  • SRC: Якщо ресурс можна розмістити всередині тегу body (для зображення, сценарію, рамки кадрів)
  • HREF: Якщо ресурс не може бути розміщений всередині тегу тіла, він може бути пов'язаний лише (для html, css)

2

Ви повинні пам'ятати, щоб використовувати всі , і що це HREF використовується з посиланнями

<a href="#"></a>
<link rel="stylesheet" href="style.css" />

SRC використовується з допомогою скриптів і зображень

<img src="the_image_link" />
<script type="text/javascript" src="" />

URL , як правило , використовується в CSS , щоб включати в себе що - то, для Exemple додати фонове зображення

selector { background-image: url('the_image_link'); } 

2

після перегляду документації HTML 5.1 (1 листопада 2016 року):


частина 4 (елементи HTML)

глава 2 (метадані документа)

у розділі 4 (елемент посилання) зазначено, що:

Призначення посилань (ив) визначається hrefатрибутом, який повинен бути присутнім і повинен містити дійсну не порожню URL-адресу, потенційно оточену пробілами. Якщо hrefатрибут відсутній, то елемент не визначає посилання.

не містить srcатрибута ...

відьма логічна, тому що це посилання.


Глава 12 (Сценарій)

у розділі 1 (елемент сценарію) зазначено, що:

Класичні сценарії можуть бути або вбудованими вбудованими, або можуть бути імпортовані із зовнішнього файлу за допомогою srcатрибута, який, якщо зазначено, дає URL-адресу зовнішнього ресурсу сценарію для використання. Якщо srcвказано, це повинна бути дійсна непорожня URL-адреса, потенційно оточена пробілами. Вміст елементів вбудованого сценарію або зовнішній ресурс скрипта повинен відповідати вимогам сценарію JavaScript специфікації для класичних сценаріїв.

він навіть не згадує hrefатрибут ...

це вказує на те, що при використанні тегів сценарію завжди використовуйте srcатрибут !!!


Глава 7 (Вкладений вміст)

розділ 5 (елемент img)

Зображення, задане атрибутами srcта srcsetатрибутами, та будь-якими попередніми srcsetатрибутами вихідного елемента брати, якщо батьківський pictureелемент, є вбудованим вмістом.

також не згадує hrefатрибут ...

це вказує на те, що при використанні imgтегів srcатрибут повинен бути використаний також ...


Посилання на Рекомендацію W3C


1

Вони не взаємозамінні - кожен визначається на різних елементах, як це видно тут .

Вони справді мають подібні значення, тому це непослідовність. Я б припускав, що в основному завдяки різним тегам, що впроваджуються різними постачальниками, для початку, а потім занурюється в специфікацію, щоб уникнути порушення сумісності.


1
Ні. Вони не мають подібних значень, і це не суперечливість. srcТег додає ресурс на сторінку , а hrefпросто дає посилання на ресурс і встановлює зв'язок з документом.
apnerve

1

Вони не мають подібних значень. 'src' вказує на ресурс, який браузер повинен отримати як частину поточної сторінки. HREF вказує на ресурс, який потрібно отримати, якщо користувач цього вимагає.


3
Не обов’язково:<link href="foo.css" rel="stylesheet" type="text/css">
Альваро Гонсалес

@EJP правильний, за винятком того, що hrefвказує ресурс, який потрібно отримати, якщо користувальницький агент його вимагає. Таблиця стилів не дістається як частина поточного документа.
apnerve

0

Я погоджуюся з тим, що говорить apnerve про відмінність. Але у випадку css це виглядає дивним. Оскільки css також завантажується клієнтом через браузер. Це не як тег прив’язки, який вказує на якийсь конкретний ресурс. Тож використання href мені здається дивним. Навіть якщо його не завантажено сторінкою без цієї сторінки, вона не може виглядати повною, тому її не просто співвідношення, а подібний ресурс, який, у свою чергу, відноситься до багатьох інших ресурсів, таких як зображення.


Якщо ви думаєте, що CSSце частина HTMLдокумента, тоді ви можете використовувати іти вперед і використовувати styleтег з @importправилом. Це може мати наслідки для продуктивності, але має належний сенс у цьому сценарії.
apnerve

0

src використовується для додавання цього ресурсу до сторінки, тоді як href використовується для посилання на певний ресурс із цієї сторінки.

Коли ви користуєтеся своєю веб-сторінкою, браузер бачить, що її аркуш стилів, а отже, продовжує відображення сторінки, коли аркуш стилів завантажується у паралельній формі.

Коли ви використовуєте на своїй веб-сторінці, він повідомляє браузеру вставити ресурс у цьому місці. Тож тепер браузер повинен отримати js файл, а потім завантажити його. Поки браузер не закінчить процес завантаження, процес візуалізації сторінки зупиняється. Саме тому YUI рекомендує завантажувати файли JS в самому низу веб-сторінки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.