Сторона сервера включает разметку разрывов

Наконец-то я усовершенствовал свою веб-страницу, и она отлично работает в любом браузере.

Однако, когда я абстрагировал содержимое верхнего и нижнего колонтитула на стороне сервера, макет незначительно изменился в Firefox/Opera/Safari, но в IE изменения макета заставили страницу выглядеть сломанной.

Существуют ли какие-либо известные проблемы, которые могут привести к изменению макета при использовании SSI? Честно говоря, я удивлен, что использование SSI может иметь такой эффект. Я использую теги HTML5, библиотеку modernizr js, и страница проверяет, имеет ли это значение.

EDIT: я исправил свою проблему, изменив абстрагируемый код (я просто абстрагировал один родительский тег дальше, чем раньше). ОДНАКО, я все еще хочу точно знать, почему эта ошибка возникла в первую очередь. Есть ли кто-нибудь, кто мог бы пролить свет на то, что, в частности, могло вызвать это?


person Moses    schedule 03.01.2011    source источник
comment
Это не должно ничего менять, поскольку включения обрабатываются «на стороне сервера», и все, что возвращается в браузер, — это HTML. Наиболее вероятный кандидат на проблему находится в абстракции. Возможно, вам не хватает закрывающего тега или чего-то еще? Думаю, это наиболее вероятный ответ.   -  person Jamie Dixon    schedule 03.01.2011
comment
Как говорит Джейми, SSI не должны иметь никакого эффекта. Клиент не должен догадываться, что веб-страница сделана из лего, а не из одного большого кирпича. Вероятно, вы где-то ошиблись.   -  person Lightness Races in Orbit    schedule 04.01.2011


Ответы (4)


Скорее всего, это не SSI вызывает какие-либо проблемы.

Вполне возможно, что в коде HTML есть новые строки, из-за которых IE вставляет лишние пробелы, что приводит к нарушению макета.

Кроме того, убедитесь, что вы правильно разделили код, когда перемещали части во включаемые файлы. Вероятно, проще всего это проверить, пропустив HTML-код через валидатор.

person simshaun    schedule 03.01.2011
comment
Код был разделен просто отлично. Я ничего не добавлял и не менял, кроме вырезания и вставки html-кода в соответствующий SSI. Итак, если я ничего не добавлял, откуда берется дополнительное пространство? - person Moses; 04.01.2011
comment
capdragon покрыл то, о чем я говорил, когда сказал, что IE может добавлять лишние пробелы. IE особенно придирчив к добавлению дополнительного пробела в конце тегов, которые разделены несколькими строками в исходном коде. Это, скорее всего, ваша проблема. - person simshaun; 04.01.2011

У меня была аналогичная проблема, и я исправил ее следующим образом.

у меня было что-то вроде этого:

<div>
   <include>
</div>

и исправил его, изменив его на это:

<div><include></div>
person capdragon    schedule 03.01.2011
comment
Я обрезал пробелы в HTML и снова в SSI, но это не решило проблему. - person Moses; 04.01.2011

В конечном итоге проблема оказалась ошибкой в ​​том, как сервер анализировал HTML и теги HTML5. По какой-то причине, когда я добавил один дополнительный набор тегов в SSI, это сработало.

Мой оригинальный include выглядел так:

<header>
    <!--#Include File="/includes/header.shtm"-->
</header>

с включенным файлом:

<nav>
  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">Products</a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Contact</a></li>
  </ul>
</nav>

Но когда я удалил все теги HTML5 из ​​включения, как показано ниже, все заработало как обычно. Я не уверен, что это проблема старой версии apache или что-то еще, но это все исправило.

<header>
  <nav>
    <!--#Include File="/includes/header.shtm"-->
  </nav>
</header>
person Moses    schedule 03.01.2011

Это может быть проблема с кодировкой файла с UTF-8, вставкой символов спецификации в начале включаемого файла. Мое решение состояло в том, чтобы сохранить включаемый файл как UTF-8 без подписи спецификации.

Я заметил, что оператор include сразу после того, как тег body показал дополнительное пространство, но добавление тега html (любого?) вокруг оператора include скрывает его. Я предполагаю, что браузер игнорирует символы, когда они находятся «внутри» тела, а не в начале.

Моя конкретная ситуация связана с Visual Studio, но она проявляется с набором редакторов. Смотрите также

person goodeye    schedule 30.10.2014