#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:
Комментариев нет:
Отправить комментарий