Arhn - архитектура программирования

IE8 и Respond.js — включенный динамический CSS не применяется

У меня возникли проблемы с IE8, распознающим некоторый CSS, созданный из файла PHP, а затем включенный в заголовок моего сайта. Этот CSS отлично работает во всех других браузерах, которые я тестировал, но он просто не будет применяться в IE8.

Если я перемещаю динамический CSS в свои основные файлы CSS - он работает нормально.

Под динамическим я подразумеваю, что CSS генерируется из PHP. Я уже использую response.js для включения медиа-запросов в IE8, который работает, потому что, если я помещу этот CSS в свой основной файл, CSS сработает.

Однако если я поместил стили запросов, не относящиеся к мультимедиа, в тот же файл, они применяются. Так что это должно быть проблемой с response.js, который не видит этот отзывчивый CSS.

Когда я «Просмотр исходного кода», файл определенно включается, поскольку он напечатан там, но по какой-то причине IE8 не применяет стили. Не отображается в инструментах разработчика.

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

Вы можете увидеть полную информацию по адресу: http://sandbox.benpalmer.me/flow/test/

Заголовок моего документа выглядит так (это тема/шаблон Wordpress):

<!doctype html>

<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7 <?php if($theme_settings['modernizr-version'] != 'none'): echo 'no-js'; endif; ?>"> <![endif]-->
<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8 <?php if($theme_settings['modernizr-version'] != 'none'): echo 'no-js'; endif; ?>"> <![endif]-->
<!--[if IE 8]>    <html class="no-js lt-ie9 <?php if($theme_settings['modernizr-version'] != 'none'): echo 'no-js'; endif; ?>"> <![endif]-->
<!--[if IE 9]>    <html class="no-js lt-ie10 <?php if($theme_settings['modernizr-version'] != 'none'): echo 'no-js'; endif; ?>"> <![endif]-->
<!--[if gt IE 9]><!--> <html class="<?php if($theme_settings['modernizr-version'] != 'none'): echo 'no-js'; endif; ?>"> <!--<![endif]-->

<head>

<meta charset="<?php bloginfo('charset'); ?>">
<meta http-equiv="X-UA-Compatible" content="IE=edge">

<title><?php wp_title( '|', true, 'right' ) . bloginfo('name'); ?></title>

<meta name="viewport" content="width=device-width, initial-scale=1"> <?php

wp_head();

include(locate_template('assets/css/dynamic.css.php')); ?>

<!--[if lt IE 9]> <?php
    if($theme_settings['modernizr-version'] == 'none'): ?><script type="text/javascript" src="<?php echo get_template_directory_uri() ?>/assets/js/vendor/modernizr.min.js"></script><?php endif; ?>
    <script type="text/javascript" src="<?php echo get_template_directory_uri() ?>/assets/js/vendor/selectivzr.min.js"></script>
    <script type="text/javascript" src="<?php echo get_template_directory_uri() ?>/assets/js/vendor/respond.js"></script>
<![endif]-->

</head>

<body <?php body_class(); ?>>

Включаемый файл include(locate_template('assets/css/dynamic.css.php')); настроен следующим образом:

<?php

/*
| --------------------------------------------------------------------
| Primary Navigation
| --------------------------------------------------------------------
*/

/* Breakpoint
| -------------------------------------------------------------------- */ ?>

<style type="text/css">

@media all and (max-width: <?php echo get_theme_mod('nav-primary-breakpoint', '782px'); ?>) {

    #wrapper {
        margin-top: 42px;
    }

    .admin-bar #wrapper {
        margin-top: 88px;
    }

    #mobile-header {
        display: block;
    }

    #menu-primary {
        display: none;
    }

    .drawer {
        margin-top: 42px;
        padding-top: 42px;
        top: -42px;
    }

}
</style>

Это поставило меня в тупик - я гуглил в течение часа, что выдвинуло предложения изменить мой DOCTYPE, убедиться, что мои комментарии заканчиваются правильно и т. д., но пока ничего не сработало.


Ответы:


1

Я предполагаю, что под «динамическим CSS» вы подразумеваете медиа-запросы CSS. Если да, то ответ очень прост:

IE8 не поддерживает медиа-запросы.

Есть несколько полифилов JS, которые решают эту проблему, самый известный из них, пожалуй, respond.js.

РЕДАКТИРОВАТЬ

Из обсуждения в комментариях: похоже, проблема вызвана тем, что Respond.js может читать CSS только из связанных таблиц стилей, а не из встроенного CSS.

09.05.2014
  • Извиняюсь за путаницу - под динамическим я подразумеваю, что он сгенерирован из PHP. Я обновил свой вопрос, чтобы уточнить это. 09.05.2014
  • 0Neji, поправьте меня, если я ошибаюсь, но динамический CSS, который вы включаете include(locate_template), состоит только из медиа-запроса, верно? Так что это будет работать где угодно, НО IE8 и ниже. 09.05.2014
  • См. мое редактирование в основном сообщении - я использую response.js для включения медиа-запроса. Если я добавлю туда немедийный стиль запроса, он сработает, что укажет мне на проблему с response.js. 09.05.2014
  • Понятно, извините за невнимательность. Если вы используете respond.js, вам нужно включить его ДО CSS, на который вы хотите повлиять. 09.05.2014
  • Также рекомендуется всегда включать ваши скрипты с помощью правильно подключенных wp_enqueue_script function и добавьте хук wp_head прямо перед концом тега <head>. 09.05.2014
  • Я пробовал это до моего CSS, но это противоречит инструкциям авторов и также не работает. Большинство моих скриптов поставлены в очередь, но это файл PHP (для которого требуется доступ к функциям WP), что невозможно. Спасибо за помощь! 09.05.2014
  • Я вижу, Respond.js действительно должен быть включен ПОСЛЕ CSS ... Другое предположение, чем - я просмотрел файл response.js на их GitHub, и хотя Javascript не самая сильная моя сторона, кажется, что медиа-запросы распознаются только из связанных таблиц стилей, а не из встроенный CSS. Но поскольку вы разместили проблему на их форуме на GitHub, я думаю, они сами ее прояснят... 09.05.2014
  • Да, я думаю, это все. css3-media-queries.js также имеет ту же проблему, поэтому я думаю, что мне не повезло с этим. 09.05.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..