Подтвердить что ты не робот

Может ли HTML содержать два HEAD-тега

В моем веб-приложении я получил файл Header.jsp, который содержит содержимое заголовка по умолчанию. Im включая его во всех других страницах, используя jsp: включить тег внутри тега тела для каждой отдельной страницы.

Header.jsp содержит свой собственный тег HEAD, чтобы указать метатеги по умолчанию, таблицы стилей ссылок, скрипты и некоторые элементы HTML. В то же время у меня будет еще один набор тегов HEAD на всех других отдельных страницах, чтобы определить заголовок, специальные страницы script и таблицы стилей.

Например:

Header.jsp

<head>
   <link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
   <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
   <script src="js/jquery.js"></script>
   <link rel=stylesheet type="text/css" href="dashboard.css" >
</head>
<h2>Dashboard</h2>

main.jsp

<!DOCTYPE html> 
<html>
   <head>
      <title>Main page</title>
      <script src="main.js"></script>
   </head>
   <body>
      <jsp:include page="Header.jsp" flush="true" />
      .....
      other HTML contents specific to main page
      .....
   </body>
</html>

действительно ли это сделать?

4b9b3361

Ответ 1

Недействительно в соответствии со стандартом

Релевантная часть:

4.2.1 Элемент head

Категории:     Никто.

Контексты, в которых этот элемент может использоваться:     В качестве первого элемента в элементе html.

Второй элемент <head> не будет первым элементом в документе html.

Ответ 2

Краткий ответ - ДА.

Это не очень хорошее решение, но оно обязательно сработает.

Люди обычно отвечают на эти вопросы теоретически, например, "нет, потому что это не соответствует стандартам". Это верно, это не так. Будущие браузеры могут не поддерживать его, некоторые исходные парсеры могут запутаться, специалисты по персоналу/ИТ, проверяющие ваше портфолио, могут подумать, что вы знаете меньше, чем Джон Сноу, и всякие плохие вещи. В теории. Но это происходит в реальном мире, и браузеры не глупы: они знают, что вы имеете в виду, они будут использовать теги head и работать как положено.

И это не случайно.
У них есть очень веские причины:

1. Заголовок не является обязательным. (см. примечания под статьей!)
Браузеры принимают содержимое, похожее на заголовок, даже за его пределами, поэтому фактически они полностью игнорируют сам тег. И если они проигнорируют одно, они, вероятно, тоже проигнорируют несколько.

2. Посетители драгоценны.
Браузеры хотят, чтобы вы наслаждались своим временем. Они хотят показать вам наилучшую страницу, которую они могут составить из беспорядка, который у них есть. Они хотят показать вам, как работает интернет, а не учить, насколько плох ваш любимый сайт. Если они смогут выяснить, что хочет выразить HTML-код (и в структуре нет смертельной неоднозначности), они сделают все возможное, чтобы исправить страницу.

3. Плохая толерантность разметки - вещь.
Браузеры не просто терпеливы и прощают, но иногда они делают акробатические шаги, чтобы заставить ваши вещи работать. Посмотрите на этот ужасный беспорядок:

<!-- no doctype! -->
<!-- no HTML tag! we're all gonna die! -->
<head>
    <style>
        body {background:#002233;}
    </style>
</head>
<head><!-- let twist again! -->
    <style>
        body {color:white}
    </style>
<!-- we didn't even close the second one!! -->

See this text?<br>
With the background AND color properly set?<br>
<br>
Your browser quite a badass.

О толерантности к браузеру, здесь гораздо больше с безобразными примерами - убедитесь, что вы забыли все, что видели, когда вернулись!)

Так что да, конечно, принцип "будь хорошим другом вашего браузера", независимо от того, насколько умно он исправляет ваши ошибки. Но если вы просыпаетесь в темной темнице с голодными львами вокруг, и ваш единственный выход - использовать две метки & lt; head> - ну, не стесняйтесь! Это не нарушенный синтаксис, это не серьезное нарушение правил HTML5 - это не более чем удобный чит. И не поддавайтесь распространенному мифу о том, что нестандартные, не аккуратные сайты процветают намного хуже: люди обычно просто не знают наверняка и хотят оставаться на безопасной стороне. Как правило, именно они описывают ад как место, куда отправляются веб-авторы, не прошедшие валидатор.

TLDR: на практике работают два тега head.

Теперь, пожалуйста, используйте только один вариант.


ДОПОЛНИТЕЛЬНЫЕ ЗАМЕЧАНИЯ

Как отметил @StanislavBerkov, как W3C, так и MDN предполагают, что тег HEAD подразумевается, то есть, вероятно, лучше просто оставить тег head полностью. Я бы не рекомендовал этот подход, если у вас есть стандартный вариант использования только одного из них, но, очевидно, лучше не иметь ни одного, а два. Документация не очень понятна по этой теме, поэтому убедитесь, что вы протестировали все в основных браузерах - но опять же, на практике, у вас не возникнет никаких проблем.

Ответ 3

Хороший ответ @Gwenc37. Вы можете иметь любые теги в любых других тегах, но всегда лучше придерживаться стандартов и спецификаций W3C. Позже в проекте вы можете добраться до точки, где ваш HTML-код не анализируется корректно в браузере или даже хуже.

Чтобы быть в безопасности, скорее придерживайтесь стандартов W3C. Таким образом, вы не ошибетесь. Надеюсь, это поможет.

Ответ 4

Вот идея, которую вы могли бы попробовать

В вашей основной голове сделайте это

<!DOCTYPE html> 
<html>
<head>
   <link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
   <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
   <script src="js/jquery.js"></script>
   <link rel=stylesheet type="text/css" href="dashboard.css" >

Заметьте, что я оставил тег конечной головки. Затем во всех ваших файлах вы должны либо закрыть тег заголовка, либо добавить дополнительный материал заголовка, а затем закрыть свой тег заголовка, например

      <title>Main page</title>
      <script src="main.js"></script>
   </head>
   <body>
      <jsp:include page="Header.jsp" flush="true" />
      .....
      other HTML contents specific to main page
      .....
   </body>
</html>

Что касается названия вашей страницы, вы можете запустить немного php, чтобы определить, на какой странице вы находитесь.

Ответ 5

Согласно стандартам W3C, нет! вы не можете этого сделать.

В вашем случае вы используете JSP как скрипт на стороне сервера. Проблема может быть решена с помощью CONSTANTS для стилей/скриптов/других элементов html.

Вам просто нужно добавить условие в файл "main.jsp" в соответствии с требованиями к странице.

Ответ 6

В соответствии со стандартами W3C вы не можете иметь два HEAD-тега.

Что касается вашей проблемы, вы можете вызвать файл header.jsp без тега HEAD, или вы можете переименовать его в scripts.jsp или constants.jsp

Например:

Header.jsp

<link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<script src="js/jquery.js"></script>
<link rel=stylesheet type="text/css" href="dashboard.css" >

main.jsp

<!DOCTYPE html>
<html>
<head> 
<title>Main page</title>
<script src="main.js"></script>
<jsp:include page="Header.jsp" flush="true" />
</head>
<body> 
..... 
other HTML contents specific to main page
..... 
</body>
</html>