Замена стилей класса
Доброго дня! Есть такая проблема. Сделал верстку через flexbox, но в IE 10 и 9 все рассыпается, если меняю стили то сыпеться все в остальных браузерах. Решил попробовать написать костыль на фильтр по браузеру, то бишь если браузер IE, тогда к таким-то классам присвоить такие-то значения, ну а в остальных случаях оставить исходный вариант.
Изначально в стилях будет эта запись: .list{ display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; } .list_item{ display: -webkit-flex; display: -ms-flexbox; display: flex;} Для IE надо заменить класс list и отчистить класс list_item: .list{ display: -ms-flexbox; -ms-box-orient: horizontal; display: -webkit-flex; display: -moz-flex; display: -ms-flex; display: flex; -webkit-flex-flow: row wrap; -moz-flex-flow: row wrap; -ms-flex-flow: row wrap; flex-flow: row wrap; } list_item {} Для решения я написал вот такую штуку: var browser = navigator.appName; var list_for_IE = [ "display: -ms-flexbox;", "-ms-box-orient: horizontal;", "display: -webkit-flex;", "display: -moz-flex;", "display: -ms-flex;", "display: flex;", "-webkit-flex-flow: row wrap;", "-moz-flex-flow: row wrap;", "-ms-flex-flow: row wrap;", "flex-flow: row wrap;"] var list_item_for_IE = [ ] if (browser === "NetScape") { var list = document.getElementsByClassName('list'); list.classList.add("list_for_IE"); var list_item = document.getElementsByClassName('list_item'); list_item.classList.add("list_item_for_IE"); }; Помогите пожалуйста довести её до ума. |
if(/MSIE 9|10/.test(window.navigator.userAgent) {
var i, list = document.querySelectorAll('.list');
for(i = 0; i < list.length; i++) {
list[i].classList.add('list_for_IE');
}
}
.list {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.list.list_for_IE {
стили для IE
}
.list:not(.list_for_IE) .list_item {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
|
структуру в HTML мне оставить старую, то с классами стилей чуток запутался:
<ul class="list"> <li class="list_item">блабла</li> </ul> |
Павел Турченко, Вы опишите, что в итоге у Вас должно получиться? Может здесь вообще flex не нужен.
|
Ruslan_xDD,
http://myd.pe.hu/test.html - вот эта страница, она везде отображается хорошо, кроме IE10 если заменить стили, то в IE 10 она отображается так же хорошо, но только не выравнивает страницы по высоте, заказчик согласен на такеи условия. поэтому мне надо только пофиксить эту страницу, ну и 9 заодно. |
Павел Турченко, там и не нужен flex, как я и предполагал.
Вот, можете посмотреть на примере моего бесконечноуровнего меню на CSS:
<!DOCTYPE HTML>
<html>
<head>
<title>Многоуровневое/бесконечоуровневое меню на CSS (by Ruslan_xDD aka Black Shadow)</title>
<style type="text/css">
.menu {
background: #252525;
color: #AAA;
font-family: verdana, arial, helvetica;
font-size: 9pt;
height: 80px;
line-height: 80px;
}
.menu a {
color: inherit;
text-decoration: none;
}
.menu div {
cursor: pointer;
display: inline-block;
padding: 0 15px;
}
.menu div, .menu li, .menu li.menu-sub:after, .menu ul {
-webkit-transition: all 0.3s;
-moz-transition: all 0.3s;
-ms-transition: all 0.3s;
-o-transition: all 0.3s;
transition: all 0.3s;
}
.menu div:hover {
background: #333;
color: #DAAB5A;
position: relative;
text-shadow: 0 0 8px #FB954B;
}
.menu div:hover > ul, .menu li:hover > ul {
opacity: 0.9;
visibility: visible;
}
.menu li {
padding: 0 15px;
}
.menu li:hover, .menu li.menu-selected {
background: #222;
color: #DAAB5A;
}
.menu li ul {
left: 100%;
margin: -30px 0 0;
}
.menu li.menu-group {
border-top: 1px dashed #888;
margin-top: 5px;
}
.menu li.menu-sub { /*Or CSS4 selector: .menu $li ul:after*/
padding-right: 25px;
}
.menu li.menu-sub:after {
border: 6px solid transparent;
border-left-color: #888;
content: '';
margin-top: 8px;
position: absolute;
right: 0;
}
.menu li.menu-sub:hover:after {
border-left-color: #DAAB5A;
}
.menu ul {
background: #333;
color: #BBB;
line-height: 30px;
list-style: none;
margin: 0 0 0 -15px;
opacity: 0;
padding: 0;
position: absolute;
text-shadow: none;
visibility: hidden;
white-space: nowrap;
}
</style>
</head>
<body>
<div class="menu">
<div>Меню 1
<ul>
<li><a href="#">Меню 1.1</a></li>
<li><a href="#">Меню 1.2</a></li>
<li class="menu-sub">
<a href="#">Меню 1.3</a>
<ul>
<li><a href="#">Меню 1.3.1</a></li>
<li><a href="#">Меню 1.3.2</a></li>
<li class="menu-sub">
<a href="#">Меню 1.3.3</a>
<ul>
<li><a href="#">Меню 1.3.3.1</a></li>
<li><a href="#">Меню 1.3.3.2</a></li>
<li class="menu-sub">
<a href="#">Меню 1.3.3.3</a>
<ul>
<li><a href="#">Меню 1.3.3.3.1</a></li>
<li><a href="#">Меню 1.3.3.3.2</a></li>
<li><a href="#">Меню 1.3.3.3.3</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div>Меню 2
<ul>
<li><a href="#">Меню 2.1</a></li>
<li class="menu-sub">
<a href="#">Меню 2.2</a>
<ul>
<li><a href="#">Меню 2.2.1</a></li>
<li><a href="#">Меню 2.2.2</a></li>
<li><a href="#">Меню 2.2.3</a></li>
<li><a href="#">Меню 2.2.4</a></li>
<li><a href="#">Меню 2.2.5</a></li>
</ul>
</li>
<li class="menu-sub">
<a href="#">Меню 2.3</a>
<ul>
<li><a href="#">Меню 2.3.1</a></li>
<li><a href="#">Меню 2.3.2</a></li>
<li><a href="#">Меню 2.3.3</a></li>
<li><a href="#">Меню 2.3.4</a></li>
<li><a href="#">Меню 2.3.5</a></li>
</ul>
</li>
</ul>
</div>
<div>Меню 3
<!--Меню без ссылок-->
<ul>
<li>Меню 3.1</li>
<li>Меню 3.2</li>
<li>Меню 3.3</li>
<li>Меню 3.4</li>
<li onclick="alert('Hello world!')">Меню 3.5</li>
</ul>
</div>
<div>Меню 4
<ul>
<li><a href="#">Меню 4.1</a></li>
<li><a href="#">Меню 4.2</a></li>
<li class="menu-group"><a href="#">Меню 4.3</a></li>
<li><a href="#">Меню 4.4</a></li>
<li class="menu-sub">
<a href="#">Меню 4.5</a>
<ul>
<li><a href="#">Меню 4.5.1</a></li>
<li><a href="#">Меню 4.5.2</a></li>
<li><a href="#">Меню 4.5.3</a></li>
</ul>
</li>
</ul>
</div>
<div>Меню 5
<ul>
<li><a href="#">Меню 5.1</a></li>
<li><a href="#">Меню 5.2</a></li>
<li class="menu-selected"><a href="#">Меню 5.3</a></li>
</ul>
</div>
</div>
</body>
</html>
|
Задача изначально стояла в том, что бы блоки контента, не в зависимости от наполнения были одинаковой высоты, с помощью скрипта я не смог этого добиться, при загрузке они становились одинаковыми при ресайзе текст или выпадал или появлялся скролл, заказчика это не устраивало и я перестроил все на flex, везде он пашет нормально, но в IE10 полный трабл, если в стилях поменять вышеуказаные классы, то все показывают одинаково, только без вытягивания меньших блоков.
Потому решил сделать костыль, для всех браузеров - что бы показывало нормально, для IE - что бы хоть как-то. Если путано излагаю, извините |
Павел Турченко, это всё можно сделать без flex.
|
Ruslan_xDD, возможно, других вариантов я не знаю, пока еще, а переделывать 8 страниц, у меня нет времени. И к сожалению Ваш скрипт, мне не помог и я не знаю почему...
|
Вроде нашел решение, удалить строку с -ms- префиксом для list_item, в любом случае спасибо! + от меня
|
| Часовой пояс GMT +3, время: 16:46. |