В чем разница между этими двумя методами привязки html-страницы к файлу css?

Я прочитал несколько руководств по css и увидел два разных способа указать, какой файл css следует использовать для стилизации страницы:

<style type = "text/css">@import url("style.css");</style>

и

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

В чем разница между ними? Какой мне использовать?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
15
0
2 618
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

первый - это, по сути, встроенный CSS, который ссылается на другой файл; а второй - прямая ссылка из HTML на CSS.

я не могу придумать причину использовать первую.

правило @import - это в основном взлом. Все современные браузеры понимают правило @import, тогда как ранние браузеры - нет. Итак, если ваш сайт вылетает в ранних браузерах из-за правила css (это не обычное явление, но пока ...), у вас может быть простой CSS для более старых версий (в элементе ссылки), который они поймут и проанализируют и поместите его над правилом @import

Обновлено: поскольку правило @import создает несколько проблем с кешированием (как уже упоминалось другими), вы можете @import (styles.php) и в styles.php сделать что-то вроде

ob_start ("ob_gzhandler");
header("Content-type: text/css");
header("Cache-Control: must-revalidate");
$offset = 60 * 60 ;
$ExpStr = "Expires: " . gmdate("D, d M Y H:i:s",time() + $offset) . " GMT";
header($ExpStr);    
echo ("@import url(style1.css);\r");
echo ("@import url(style2.css);\r");
echo ("@import url(style3.css);\r");

Значит, я должен использовать оба?

liewl 26.11.2008 20:33

нет, я считаю, что лучше использовать ссылку. И если вы стремитесь к высокой производительности, ссылайтесь только на один внешний css, чем меньше HTTP-запросов, тем лучше

Kostis 26.11.2008 20:43

Но, пожалуйста, НИКОГДА не используйте это на рабочем сервере. Он сообщает браузеру повторно запрашивать этот файл каждый раз на каждой странице и отказываться использовать его в автономном режиме. Это серьезно ухудшает отзывчивость веб-сайта (как и несколько правил @import).

Kornel 26.11.2008 21:01

Как было сказано, первая - это встроенная таблица стилей (что также может быть выполнено во внешних таблицах стилей). Это может привести к более организованным таблицам стилей при внешнем использовании, но имейте в виду, что когда таблица стилей встроена, браузер не будет кэшировать ее.

Исторически сложилось так, что я считаю, что первый часто использовался, чтобы не дать Netscape 4 уловить ваши стили (хотя я мог ошибаться; когда Netscape 4 все еще оставался проблемой, я не очень знал о кроссбраузерном кодировании, так что это очень нечеткая память).

В наши дни люди иногда используют <link> для включения одной таблицы стилей с веб-страницы, а затем @import, чтобы получить кучу других с этого единственного листа. Это позволяет вам разделить ваши стили на layout.css, typography.css и т. д., Если вам нравится это делать.

Как упоминал Tungle, кеширование становится проблемой с @import, но только для IE.

Ответ принят как подходящий

Нет большой разницы, если вы не используете старые браузеры очень (netscape 4.x и т.е. 3.x). Вы можете прочитать полную информацию о том, что каждый означает здесь.

From a standards viewpoint, there is no difference between linking to an external style sheet or importing it. Either way is correct, and either way will work equally well (in most cases).

Различия в наследовании сохраняются и сегодня. На этой странице говорится только об очень старых браузерах, потому что это очень старая страница :)

Eli 26.11.2008 20:46

Согласно "Рекомендации Yahoo по ускорению работы вашего веб-сайта", использование @включают ведет себя как размещение <link> внизу страницы в Internet Explorer.

Загрузка CSS в конце страницы приводит к повторной отрисовке страницы. Это означает, что страница сначала отображается без CSS, а затем перерисовывается с помощью CSS. Это немного замедляет загрузку страницы.

Это хорошая причина не использовать его, но не по этой причине. Это просто типичная реализация потенциально полезной функции IE с ошибками.

Eli 26.11.2008 20:42

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

liewl 26.11.2008 21:07

Дело в приоритете. если вы @import foo.css, правила CSS будут вести себя так, как если бы вы поместили содержимое foo.css непосредственно в этот блок <style>. Это означает, что они имеют более высокий приоритет, чем файл css, в который записан <link>.

Итак, если вы должны были @импортировать файл, который устанавливает font-size: 12pt, И связать файл, который устанавливает font-size: 14pt, вы получите текст размером 12 пунктов.

Каскад CSS и почему вам стоит беспокоиться

Все сводится к Специфика CSS и каскадированию CSS. Действуйте осторожно и знайте, что вы делаете, и CSS Specificity может быть вашим другом.

// bring CSS into the Page
<style type = "text/css">@import url("importedStyles.css");</style>

/// Link to CSS Style Sheet
<link rel = "stylesheet" type = "text/css" href = "linkedStyles.css" />

Поскольку @import вносит стиль на эту страницу, эти правила будут отвергать Внешними или «связанными» таблицами стилей. Встроенный CSS превосходит либо из-за более высокого Специфика CSS:

<span style = "color: red;">I am DEFINITELY RED</span>

Однако это работает только тогда, когда правила имеют одинаковую специфику.

Возьмите следующее:

<div class = "error">I am an error message</div>

Если у меня есть правило в importStyles.css:

.error { color: blue; } /* specificity = 10 */

И правило в externalStyles.css примерно так:

div.error { color: red; } /* specificity = 11 */

Потребуется версия externalStyles

Примечание. Специфика CSS встроенного стиля - 1000, поэтому он превосходит все, кроме тега! Important, который равен 10000. Другая статья о специфике CSS

Справка по специфике CSS

  • ! important = 10,000
  • встроенный стиль = 1000
  • каждый #id в правиле = 100 -например, это 200:

    #content #footer {цвет: красный; } / * 200 * /

  • каждый класс = 10

  • каждый элемент html = 1

Итак, несколько примеров:

body .selected { color: red; } /* 11 */
ul li { color: red; } /* 2 */
ul li.selected { color: blue; } /* 12 */

#content ul li.selected a { color: red; } /* 113 */

/* Careful, can't override this, ever */ 
a { color: blue; !important } /* 10,000 - Override everything */

Итак ... Каскад применяется только к элементу такая же специфичность. Каскады применяются ПОСЛЕ применения правил специфичности.

Другие вопросы по теме