Почему стили добавляем в тег head, а script в тег body

Ответ

Стили добавляют в <head>, чтобы они загружались и применялись до отображения контента, предотвращая FOUC (Flash of Unstyled Content). Это улучшает восприятие страницы пользователем.

Скрипты обычно помещают перед закрывающим </body>, чтобы:

  1. Не блокировать загрузку и отрисовку DOM (скрипты могут блокировать парсинг HTML).
  2. Гарантировать доступ к DOM-элементам (к моменту выполнения скрипта DOM уже построен).

Исключение — скрипты с атрибутами async или defer, их можно размещать в <head>, так как они не блокируют рендеринг.

Пример:

<head>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <!-- контент -->
  <script src="app.js"></script>
</body>

Ответ 18+ 🔞

Да ты посмотри, какие тут, блядь, правила игры! Стили-то, сука, в <head> пихают, чтобы эта ваша страничка не вылезла голая, как младенец из бани, пока браузер мозги собирает. Это называется FOUC, если по-умному, а по-простому — пиздец как некрасиво, когда сначала текст мелькает, а потом уже шрифты и цвета подъезжают.

А вот скрипты, эти ёбаные выскочки, их в самый низ, перед </body>, засовывают. Почему, спрашивается? А потому что, сука, они жадные! Начнёшь их в начале грузить — они всю очередь парсинга HTML заблокируют, пока сами не выполнятся. А пользователь сидит, ждёт, как лох на дождь. Не, так не пойдёт.

Вот кидаешь ты скрипт в конец тела — и всё, красота: страница уже отрисовалась, пользователь доволен, а потом уже твои скрипты тихонько подползают и делают свои тёмные делишки. DOM к этому моменту уже готов, можно его ебашить как хочешь.

Ну, кроме, конечно, этих хитрожопых скриптов с async или defer. Их, сука, можно и в <head> воткнуть — они умные, не будут мешать. async — это как "грузись когда хочешь, но как загрузился — сразу впрыгивай и выполняйся". А defer — "грузись спокойно, но жди, пока весь HTML не проглотим, и только потом делай своё дело, по порядку".

Короче, вот тебе пример, как это выглядит в жизни, чтобы ты, блядь, не запутался:

<head>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <!-- всякая хуйня, контент там, картинки -->
  <script src="app.js"></script>
</body>

Вот и вся магия, ёпта. Стили сверху — чтобы сразу красиво. Скрипты внизу — чтобы не мешали жить. А если скрипт умный — можешь и в голову его запихнуть, он не обидится.