Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.10.2015, 12:04
Аспирант
Отправить личное сообщение для Павел Турченко Посмотреть профиль Найти все сообщения от Павел Турченко
 
Регистрация: 18.04.2015
Сообщений: 47

Замена стилей класса
Доброго дня! Есть такая проблема. Сделал верстку через 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");
};
Помогите пожалуйста довести её до ума.

Последний раз редактировалось Павел Турченко, 30.10.2015 в 12:29.
Ответить с цитированием
  #2 (permalink)  
Старый 30.10.2015, 12:30
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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;
}
Ответить с цитированием
  #3 (permalink)  
Старый 30.10.2015, 12:49
Аспирант
Отправить личное сообщение для Павел Турченко Посмотреть профиль Найти все сообщения от Павел Турченко
 
Регистрация: 18.04.2015
Сообщений: 47

структуру в HTML мне оставить старую, то с классами стилей чуток запутался:
<ul class="list">
<li class="list_item">блабла</li>
</ul>
Ответить с цитированием
  #4 (permalink)  
Старый 30.10.2015, 13:39
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Павел Турченко, Вы опишите, что в итоге у Вас должно получиться? Может здесь вообще flex не нужен.
Ответить с цитированием
  #5 (permalink)  
Старый 30.10.2015, 13:44
Аспирант
Отправить личное сообщение для Павел Турченко Посмотреть профиль Найти все сообщения от Павел Турченко
 
Регистрация: 18.04.2015
Сообщений: 47

Ruslan_xDD,
http://myd.pe.hu/test.html - вот эта страница, она везде отображается хорошо, кроме IE10 если заменить стили, то в IE 10 она отображается так же хорошо, но только не выравнивает страницы по высоте, заказчик согласен на такеи условия. поэтому мне надо только пофиксить эту страницу, ну и 9 заодно.
Ответить с цитированием
  #6 (permalink)  
Старый 30.10.2015, 13:51
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Павел Турченко, там и не нужен 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>
Ответить с цитированием
  #7 (permalink)  
Старый 30.10.2015, 13:59
Аспирант
Отправить личное сообщение для Павел Турченко Посмотреть профиль Найти все сообщения от Павел Турченко
 
Регистрация: 18.04.2015
Сообщений: 47

Задача изначально стояла в том, что бы блоки контента, не в зависимости от наполнения были одинаковой высоты, с помощью скрипта я не смог этого добиться, при загрузке они становились одинаковыми при ресайзе текст или выпадал или появлялся скролл, заказчика это не устраивало и я перестроил все на flex, везде он пашет нормально, но в IE10 полный трабл, если в стилях поменять вышеуказаные классы, то все показывают одинаково, только без вытягивания меньших блоков.
Потому решил сделать костыль, для всех браузеров - что бы показывало нормально, для IE - что бы хоть как-то.
Если путано излагаю, извините
Ответить с цитированием
  #8 (permalink)  
Старый 30.10.2015, 14:17
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Павел Турченко, это всё можно сделать без flex.
Ответить с цитированием
  #9 (permalink)  
Старый 30.10.2015, 14:39
Аспирант
Отправить личное сообщение для Павел Турченко Посмотреть профиль Найти все сообщения от Павел Турченко
 
Регистрация: 18.04.2015
Сообщений: 47

Ruslan_xDD, возможно, других вариантов я не знаю, пока еще, а переделывать 8 страниц, у меня нет времени. И к сожалению Ваш скрипт, мне не помог и я не знаю почему...
Ответить с цитированием
  #10 (permalink)  
Старый 30.10.2015, 15:24
Аспирант
Отправить личное сообщение для Павел Турченко Посмотреть профиль Найти все сообщения от Павел Турченко
 
Регистрация: 18.04.2015
Сообщений: 47

Вроде нашел решение, удалить строку с -ms- префиксом для list_item, в любом случае спасибо! + от меня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена класса serdef Элементы интерфейса 2 01.01.2014 21:44
Замена класса элемента razorg1991 Элементы интерфейса 8 23.09.2013 21:08
Возможна замена класса (для работы с фреймворком css)? Faab jQuery 4 16.06.2013 03:39
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17
Замена CSS класса каждого четвертого div iGusse jQuery 4 17.12.2009 23:51