Зачем - PullRequest
       32

Зачем

71 голосов
/ 19 августа 2011

Мой родственник, который начал изучать веб-разработку, задал мне этот вопрос.

Почему <script src="min.js"></script>, но <link rel="stylesheet" href="min.css">, почему не <style href="min.css"></style>, почему мы используем тег link для добавления внешнего CSS на страницу, но когда мы связываем CSS с страницей, но мы используем <style>...</style>, когда пишем CSS внутри <head>

Я сказал ему, что это из-за Спецификации. Есть ли еще информация, чтобы дать ему?

Ответы [ 6 ]

42 голосов
/ 19 августа 2011

Это историческое ... совпадение?Вы можете порекомендовать ему прочитать часть о Прошлом diveintohtml5.info , где есть несколько интересных историй, фактически почтовых переписок, между веб-разработчиками.Веб-разработчики означают, что фактически разрабатывали сеть, которую мы видим в настоящее время;)

То есть <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="...">

но наконец разработчики решили придерживаться <img>, который уже был реализован :

Мы не готовы поддержать INCLUDE / EMBED на данный момент.… Таким образом, мы, вероятно, собираемся пойти (не ICON, так как не все встроенные изображения могут быть значимо названы значками).В настоящее время встроенные изображения не будут явно иметь тип содержимого;в будущем мы планируем поддержать это (наряду с общей адаптацией MIME).На самом деле, процедуры чтения изображений, которые мы сейчас используем, определяют формат изображения на лету, поэтому расширение имени файла даже не будет значительным.

Я не знаю прямого ответа на ваш вопрос, но мне тоже очень интересно узнать тег <link>.Поиск ответа, вероятно, будет включать копание некоторых веб-архивов.

25 голосов
/ 19 августа 2011

Есть разница, по крайней мере, с точки зрения W3C.

Элемент <style> представляет блок правил CSS, которые применяются к текущему документу. Однако внешние таблицы стилей фактически рассматриваются как целые документы , связанные с текущей страницей, и пользовательские агенты могут по своему усмотрению игнорировать такие документы в зависимости от атрибутов type и media ссылки. Например:

<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 Атрибут указывает предполагаемый носитель визуализации или медиа. пользователь агенты могут сэкономить время, извлекая из сети только те стили листы, которые относятся к текущему устройству.

3 голосов
/ 19 августа 2011

Они оба имеют в основном одинаковое значение, и вы заметили некое несоответствие в HTML. Причиной этого является то, что стандарты были основаны на реализациях различных браузеров. Различные браузеры придумали атрибуты в разных тегах, и W3C просто решил оставить некоторые несоответствия для обеспечения обратной совместимости.

Элементы, которые используют src: script img iframe input video frame

Элементы, которые используют href: a link base

1 голос

Возможная причина для link ref против style:

link может идти только на head, где разрешено «Содержимое метаданных», обычно head,

style не может перейти в body до HTML5 (теперь вы можете использовать scoped, но все же не во внешних стилях).Поэтому выбор между link ref и style src является произвольным.

script, однако, уже может включать внешний скрипт в body до HTML5, поэтому должно быть script src.Но поскольку он должен был существовать, почему бы не разрешить его и в head (где уже разрешено script) и запретить link rel=script, чтобы избежать дублирования?

1 голос
/ 19 августа 2011

Это может объяснить вещи, я думаю: http://www.w3.org/TR/html4/struct/links.html

1 голос
/ 19 августа 2011

Тег <link> используется для «привязки» других документов к текущему и описания его отношений, или rel, с ним.

Вы также можете использовать <link> для ссылки на другиевещи к документу.Например, favicons:

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