Абсолютное позиционирование Chrome

У меня проблема с абсолютным позиционированием в Chrome. Я прочитал все подобные вопросы в SO и не смог найти подходящего обходного пути.

Я создаю сайт, используя тему Headway для Wordpress. На этом сайте у нас есть макет с сеткой и фон во всю ширину. Тема предоставила мне только фиксированный макет сетки, поэтому я должен использовать jQuery для фона во всю ширину.

Рассматриваемый сайт: http://www.mochilao.syncmobile.com.br/

Что я сделал: я использую jQuery, чтобы добавить элементы div с полной шириной и сместить их так, чтобы слева = 0. Это очень хорошо работает с верхним и нижним колонтитулами.

Проблема: браузеры Webkit, похоже, имеют проблемы с абсолютным позиционированием. Поэтому мне пришлось задать смещение для средних блоков, чтобы все работало правильно. Но я наткнулся на баг. Всякий раз, когда вы щелкаете логотип заголовка, чтобы вернуться домой или перезагрузить страницу, фоновое окно во всю ширину разрывается. Кажется, в этих случаях условное смещение не требуется. Но как я могу решить эту проблему?

Сценарий jQuery: http://www.mochilao.syncmobile.com.br//wp-content/themes/headway/custom.js


person gverri    schedule 26.02.2012    source источник


Ответы (1)


Первая мысль:

Разве вы не должны использовать ".each" для вызова функции:

$(".game").load(compose(".game", "yellow"));

так как есть несколько элементов с классом «игра»? Просто мысль. Кроме того, присоединение вашей функции к загрузке элемента кажется потенциальной проблемой, потому что вам нужна ширина окна, а не ширина элемента. Элемент загрузится до того, как загрузится все окно. Вместо этого попробуйте использовать window.onload. (Вы получите вспышку нестилизованного контента, но это отдельная проблема.)

Но есть и другие связанные проблемы: загрузите страницу шириной 1300 пикселей, затем растяните ее до 1500, и вы увидите аналогичную ошибку справа как в Webkit, так и в FF10. Есть и другие странные ошибки внизу, также в разделе «уведомления». Проблема, вероятно, заключается в ошибке с событием onresize, которое jquery (в основном) нормализовало, но никто не идеален.

Хомбре, это МНОГО работы, чтобы обойти ограничение шаблона. Я думаю, что вы, возможно, в первую очередь ошиблись, и даже если вы можете заставить его работать, он явно зависит от js, что не нужно. Это действительно проблема CSS, а не проблема js. И даже тогда вы создаете сайт так, чтобы он никогда не реагировал на узкие области просмотра, что, возможно, является плохой идеей.

Почему бы просто не использовать чистый CSS-подход? Установите обертки на 100% ширину, без отступов. Затем также установите для своих сторон ширину 100% с некоторым внутренним контейнером, который имеет максимальную ширину. Оставьте циклы WP такими же, просто оберните их в новые элементы div, расположенные по центру. Затем установите

background-size:cover

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

ИЛИ... просто установите сумасшедшие широкие фоновые изображения (достаточно большие, чтобы покрыть любую реалистичную ситуацию) на теле или #whitewrap? Или, если это слишком сложно, просто добавьте фиктивные дочерние элементы div внутри различных разделов, которые выдвинуты абсолютно за пределы каждой области, чтобы закрыть поля. А затем установите для контейнера значение overflow:hidden, чтобы ничего не торчало. Это уродливо семантически, но более прямолинейно. Есть гораздо более простые способы исправить это с помощью css, которые не создают проблем с переформатированием документов. Вы реально никогда не напишете js, который бы соответствовал всем особенностям css браузеров!

person Ben    schedule 26.02.2012
comment
Существует только один экземпляр каждого .class. Причина в том, что тема Headway использует классы вместо идентификаторов для идентификации блоков. Я знаю, что это кажется большой работой, но я пытался сделать это на 100% css раньше, и поверьте мне, это еще больше работы. Я делаю это только js, потому что не могу изменить элементы div #whitewrap и .grid-container. Но, как вы указали, мне удалось решить первую ошибку, используя $(window).load вместо $(document).ready. Другую обнаруженную вами ошибку «изменения размера» я попытаюсь решить позже с помощью события изменения размера. - person gverri; 27.02.2012