Які найкращі практики замовлення елементів у <head>?


90

може використовувати що завгодно в будь-якому порядку? робить розміщення <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">важливо перед<title>

це найбільш часто використовується, чи найкращий спосіб?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">

<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Title Goes Here</title>
    <link rel="stylesheet" href="http://sstatic.net/so/all.css?v=5912">
    <link rel="shortcut icon" href="http://sstatic.net/so/favicon.ico">
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
    $(function() {

        $("#wmd-input").focus();
        $("#title").focus();
        $("#revisions-list").change(function() { window.location = '/posts/1987065/edit/' + $(this).val(); });

    });        
</script>


</head>

<body>
<p>This is my web page</p>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/mootools.js"></script>
</body>

</html>

цей сайт http://stackoverflow.com не має кодування та<meta>

Я використовую CMS, що має компонент SEO, який додає всі <meta>для SEO після всіх js та css. файлів. чи може розміщення будь-яких елементів у будь-якому порядку, які дозволено <head>впливати на сумісність та кодування документів?


Куди поділися всі коментарі?
Пекка

Цей веб-сайт (stackoverflow.com) має набір кодування (до UTF-8), це просто в заголовках HTTP, де він належить. Визначення набору символів у мета-тезі - це своєрідний обхідний спосіб.
jpsimons

2
Правильно. Бажано визначати набір символів у заголовках HTTP, але в деяких ситуаціях ви не можете встановити їх (наприклад, завантажувати файли з локального диска), тому <meta>тег є обхідним шляхом для цих випадків, але не важливим.
Брайан Кемпбелл,

Тут була купа коментарів, принаймні дев’ять чи десять. Вони не були нічим особливим, але в них теж не було нічого образливого. Куди вони всі поділись? Хто має право видаляти коментарі і чому?
Пекка

Ми всі маємо право видаляти власні коментарі; деякі люди видаляли свої? Я ніколи не бачив коментарів щодо цього питання, оскільки був зайнятий складанням своєї відповіді. Ви впевнені, що не думаєте про інше питання?
Брайан Кемпбелл,

Відповіді:


111

В HTML DOCTYPEпершим повинен бути must, за яким слід один <html>елемент, який повинен містити <head>елемент, що містить <title>елемент, а потім <body>елемент. Див. Опис глобальної структури документа HTML у HTML 4.01 та чернетку HTML5 ; фактичні вимоги здебільшого однакові, крім тих DOCTYPE, але вони описуються по-різному.

Фактичні теги ( <html>, </html>, <head>і т.д.) НЕ є обов'язковими; елементи будуть створені автоматично, якщо теги не існують. <title>є єдиним обов’язковим тегом у HTML. Найкоротшим дійсним документом HTML 4.01 (принаймні, який я міг би створити) є (потрібне, <p>тому що в <body>дійсному має бути щось ):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><title></title><p>

І найкоротший дійсний документ HTML5:

<!DOCTYPE html><title></title>

Зверніть увагу, що в XHTML всі теги повинні бути вказані явно; жодні елементи не будуть вставлені неявно.

Браузери виконують обнюхування типу вмісту за деяких обставин, щоб визначити тип ресурсу, який не був вказаний за допомогою Content-Typeзаголовка HTTP, а також обнюхування кодування символів, якщо Content-Typeзаголовок не було надано або не містить charset(загалом спробуйте включити ці заголовки та переконатися, що вони правильні, але існують деякі обставини, за яких ви не можете, наприклад, локальні файли, не передані через HTTP). Вони лише нюхають обмежену кількість байтів на початку документа для цих цілей, однак, тому все, що призначене для впливу на нюх вмісту або кодування символів, має знаходитись на початку документа.

З цієї причини HTML5 вказує, що будь-який metaтег, який використовується для зазначення набору символів ( <meta http-equiv="Content-type" content="text/html; charset=...">або просто, або просто <meta charset=...>), повинен знаходитися в межах перших 1024 байт файлу, щоб набути чинності. Отже, якщо ви збираєтеся включати інформацію про кодування символів у свій документ, вам слід помістити тег на початку файлу, можливо, навіть перед <title>елементом. Але пам’ятайте, що цей тег непотрібний, якщо ви правильно вказали Content-typeзаголовок.

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

З міркувань продуктивності може бути гарною ідеєю розмістити сценарії внизу сторінки, безпосередньо перед </body>, оскільки завантаження скриптів блокує візуалізацію сторінки.

Очевидно, <script>теги слід упорядковувати так, щоб сценарії, які залежать від кожного замовлення, отримували залежності, завантажені першими.

Загалом, крім обмежень, які я вже вказав, упорядкування тегів всередині <head>не повинно мати великого значення, крім як для читабельності. Я, як правило, люблю бачити <title>вгорі, а інші <meta>теги розміщувати в якомусь логічному порядку.

Найчастіше порядок, який ви повинні розміщувати в тілі документа HTML, повинен бути таким, в якому вони повинні відображатися, або порядком, до якого слід отримувати доступ. Ви можете використовувати CSS для перестановки речей, але зчитувачі екрана, як правило, читають речі у вихідному порядку, індекси пошуку витягають речі у вихідному порядку тощо.


5
Те, що TITLE є обов’язковим, для мене було новиною і здається трохи дивним. Але перевіряючи офіційні характеристики, ви, звичайно, абсолютно праві. Живи й учись!
Карл Смотрич,

Мене здивувало те, що це єдиний обов’язковий тег ... Я насправді стверджував, що його слід зробити необов’язковим також у HTML5 (оскільки це насправді не потрібно для таких речей, як гаджети, які завжди будуть у iframeта ніколи не мають видимого заголовка ), але цього разу вони вирішили не змінювати цього.
Брайан Кемпбелл,

@Brian - дякую Брайану за це приємне пояснення. ТАК ніколи мене не розчаровував. на цьому сайті є натхненники. і ще одна річ: У добре розуміє питання, тоді дуже добре даєш відповідь. чудова робота.
Jitendra Vyas

1
@Jitendra Ха-ха! Я відповів на купу ваших останніх запитань, чи не так? Я трохи напідпитку від новорічної вечірки. Але я можу спробувати ... Однак я просто не гарантую, що моя відповідь буде такою ж хорошою, як і остання пара.
Брайан Кемпбелл

3
Сучасний підхід поставити <script>мітки з asyncабо deferатрибутом <head>. Див stackoverflow.com/questions/436411 / ...
joshreesjones

31

Це шаблон, який я використовую, просто видаліть все, що вам не потрібно для нового проекту.

<!doctype html>
<html class="no-js" lang="en">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title></title>

    <meta name="description" content="">
    <meta name="keywords" content="">
    <meta name="author" content="">

    <meta name="robots" content="index, follow">
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="default">

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

    <!-- http://realfavicongenerator.net/ -->

    <meta property="fb:page_id" content="">
    <meta property="og:title" content="">
    <meta property="og:image" content="">
    <meta property="og:description" content="">
    <meta property="og:url" content="">
    <meta property="og:site_name" content="">
    <meta property="og:type" content="website">

    <meta name="twitter:card" content="summary">
    <meta name="twitter:url" content="">
    <meta name="twitter:title" content="">
    <meta name="twitter:description" content="">
    <meta name="twitter:image" content="">
    <meta name="twitter:site" content="">

    <script src="js/vendor/modernizr.js"></script>
  </head>
  <body>
  </body>
</html>

6
X-UA-Compatible повинен бути першим тегом у голові через stackoverflow.com/questions/3449286/…
Денис

@Denis, ти знаєш, що <html class="default"> означає?
shaijut

3
@stom ви маєте на увазі, чому існують атрибути класу? Для видалення цього класу після завантаження сторінки потрібен додатковий код JavaScript. Роблячи це - ви дізнаєтесь, чи увімкнено JavaScript у браузері. Якщо цей атрибут все ще існує - це означає, що JavaScrips вимкнено, тому ви можете показати якесь повідомлення користувачеві за допомогою CSS, якщо вам потрібно
Денис

@Denis використовує <noscript> </noscript>, щоб перевірити, чи увімкнено javascript
TheCrazyProfessor

1
Чи можете ви прокоментувати свої аргументи щодо цього замовлення?
2540625

7

Додаючи декілька пропозицій щодо ефективності до відповіді Брайана, найвищим пріоритетом мають бути речі, які потрібно буде завантажити, щоб браузер міг почати завантажувати їх якомога швидше, а також речі, які вплинуть на те, як представлена ​​сторінка. Тож я б запропонував:

  • Мети, що впливають на зовнішній вигляд, такі як коди (потрібні на початку і специфікації), область перегляду, підтримка apple-mobile-web-app
  • Заголовок вгорі, щоб браузер міг зробити його якомога швидше, а користувач відчув, що щось відбувається
  • Favicon і сенсорні іконки
  • CSS (принаймні CSS для верхньої частини сторінки; інші CSS можна завантажити в нижній колонтитул, якщо ви хочете пофантазувати). Цей крок, як правило, блокує продовження всього іншого, саме тому я розмістив попередні пункти над ним, оскільки вони забезпечують певний зворотний зв’язок під час затримки CSS.
  • Критичні сценарії (наприклад, обнюхування агента користувача, що може вплинути на макет), які неможливо завантажити в нижній колонтитул
  • Все інше (наприклад, необхідні метадані у вигляді посилань та мета-тегів)

Ви також можете розглянути можливість вставлення будь-якого CSS та JS, завантаженого в голову, особливо якщо його невеликий розмір і зовнішній скрипт / аркуш навряд чи будуть кешовані відповідно до вашого профілю типового відвідувача. І якщо ви зробите це вбудовано, ви в ідеалі захочете стиснути його.

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


7

Відповідно до W3 повинно бути:

  • Мета-набір символів
  • Заголовок
  • Мета назва = "опис"
  • Мета ім'я = "ключові слова"
  • Таблиця стилів
  • Файли JavaScript

Пов’язана стаття переспрямовує, і, здається, нічого не говорить про порядок.
2540625

Таблиці стилів блокують візуалізацію, а завантажують js async перед CSS.
Нуль

6

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

Рекомендації для IE7 + вимагають , щоб charset, X-UA-Compatibleі baseзаяви відбуваються перш ніж що - небудь ще в headіншому випадку браузер запускається знову і повторно розбирає всі , що було до.


5

Спочатку вам потрібен тип вмісту, оскільки він позначає кодування символів, інакше, якщо воно з’явиться пізніше, деякі браузери намагаються вгадати кодування. (Я не пам’ятаю особливості, але, думаю, IE здогадається, чи не знайде кодування в перших 75 символах документа?)

Більшість веб-серверів надсилають кодування в заголовки HTTP, але якщо користувач зберігає вашу сторінку, заголовки не зберігаються разом із нею.

Я б поставив посилання на CSS на друге місце, щоб браузер завантажував їх якомога швидше.

JavaScript, який я б не вкладав у голову, він повинен знаходитися внизу ваших сторінок, оскільки завантаження блокує візуалізацію сторінок.


0

IIRC, деякі браузери перезавантажують документ при зустрічі з content-typeелементом. Отже, цей елемент, ймовірно, повинен бути першим у headелементі документа.

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