Вы, вероятно, хотите изменить !(IE)
на (!IE)
Кроме того, «нормальный» тег <body>
, о котором вы говорите, находится в условном комментарии. Тот факт, что он находится в другой строке, не имеет значения, он все еще находится внутри тега условного комментария, поэтому на него влияют как таковые.
Условные комментарии для IE работают с использованием обычных HTML-комментариев <!-- -->
, поэтому любой код внутри «ложного» условия просто закомментирован; <!-- <body class="ie6"> -->
IE тогда имеет собственный синтаксис внутри этого. Таким образом, браузеры без IE просто видят закомментированную строку, и IE рассматривает ее как оператор для выполнения.
Из-за этого отображается только один тег body и используется только один.
Более подробное объяснение
<!--[if (gt IE 9)|!(IE)]><!-->
<body>
<!--<![endif]-->
Для IE это говорит:
<if greater than ie9, or not ie> (ie conditional comment)
<!--> (empty comment) (--> putting this here to stop SO ruining syntax highlighting :D)
<body>
<end if> (ie conditional comment)
Если вы не понимаете, почему, прочитайте параграф, начинающийся с «Условные комментарии для работы IE ...».
Этот же блок для любого другого браузера выглядит так:
<!--[if (gt IE 9)|!(IE)]><!--> (this is just one comment, containing the text "[if (gt IE 9)|!(IE)]><!")
<body>
<!--<![endif]--> (again, just one comment, containing "<![endif]")