Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Верстка stackoverflow, flex заменяется на inline-block

#javascript #html #css


Заметила, что верстка stackoverflow выполнена с помощью flex'ов

Пример меню в шапке:

.so-header .-main {
    height: 100%;
    width: 100%;
    display: -webkit-flex;
    display: flex;
    -webkit-flex-flow: row nowrap;
    flex-flow: row nowrap;
    -webkit-align-items: center;
    align-items: center;
}




А в ie9 (и я так понимаю в других более старых версиях браузеров) flex заменяется
на inline-block при чем стили встроенные, видимо js-ом. 

Пример того же меню в шапке, но для ie 9:



modernizer не вижу чтобы использовался.

Вопрос: Как можно такое реализовать с помощью js (задать для каких браузеров какие
стили задавать), потому как практически всегда используется css для такого?
    


Ответы

Ответ 1



Ковыряние в исходниках подсказывает, что в данном случае всё довольно примитивненько и костыльненько // https://cdn.sstatic.net/Js/full.ru.js?v=b200a9ef1cb2, line 2 lol "init": function() { // ... if (StackExchange.options.user.canSeeNewHeaderDesign) { var e = document.body.style; "justifyContent" in e || "WebkitJustifyContent" in e || $(".so-header *:visible").css({ "display": "inline-block", "white-space": "nowrap", "vertical-align": "middle" }).not(".-logo, .-logo *, svg, .-badges *").css("width", "auto"); // ... } }

Ответ 2



Такое можно реализовать не только с помощью js, например yandex имеет сервис (http://phd.yandex.net/detect) что бы через него узнать какой браузер и вообще какой тип устройство используется, и после этого можешь сразу подключить другие стили, скрипты и шаблоны. Вот пример кода в котором я сделал проверку на мобильные устройства, но можно сделать ту же самую проверку на те устройства которые вы хотите. $_SESSION['is_mobile'] = false; $query = http_build_query( array( 'user-agent' => $_SERVER['HTTP_USER_AGENT'], ) ); // TODO chenge sesion to config $ctx = stream_context_create(array('http' => array( 'timeout' => 1 // 30 sec ) )); $res = file_get_contents('http://phd.yandex.net/detect' . '?' . $query, null, $ctx); $s = $res; $s = << {$s} END; //уберите пробелы с начало этой строки кода скопируете код у вас $xml = simplexml_load_string($s); $error = $xml->{'yandex-mobile-info-error'}; //если тип устройства определить не удалось - возвращаем пусткю строку $is_ipad = $_SERVER['HTTP_USER_AGENT']; $is_ipad = explode('iPad', $is_ipad); $_SESSION['mobile'] = false; if ($res && $error != 'Unknown user agent and wap profile' || count($is_ipad) == 2) { $_SESSION['mobile'] = true; } else { $_SESSION['mobile'] = false; $_SESSION['is_mobile'] = false; }

Ответ 3



Вроде как ответ дан, но покажу ещё один способ без JS. Итак, Flexbox работает начиная с IE 10, условные комментарии работают до IE9 включительно. После основного файла стилей подключаем стили c float и/или inline-block:

Комментариев нет:

Отправить комментарий