Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Задержка выполнения css (https://javascript.ru/forum/dom-window/43615-zaderzhka-vypolneniya-css.html)

IndigoHollow 13.12.2013 17:55

Задержка выполнения css
 
На сайте есть двухуровневое меню:



Если навести курсор на пункт меню первого уровня, то появится подменю(сделано через css hover):



Как реализовать следующее: при отводе курсора подменю исчезает только через 1 секунду?

BETEPAH 13.12.2013 19:29

если для свежих браузеров, то http://htmlbook.ru/css/transition

IndigoHollow 16.12.2013 10:32

Цитата:

Сообщение от BETEPAH (Сообщение 286521)
если для свежих браузеров, то http://htmlbook.ru/css/transition

Пробовал уже применять это свойство, но что-то не выходит. Подскажите что я делаю не так? Вот упрощенный вариант кода:

Код:

<ul>
  <li>
      <a href="/">ГЛАВНАЯ</a>
  </li>
  <div class="catalog-menu">
      <li>
        <a href="/catalog">КАТАЛОГ</a>
            <div class="submenu">
                <a href="/catalog/analoi/">АНАЛОИ</a>
                <a href="/catalog/analoi/analoi_metallicheskie/"><span id="qwerty">металлические</span></a>
                <a href="/catalog/analoi/analoi_derevyannye/"><span id="qwerty">деревянные</span></a>
            </div>
    </li>
  </div>
</ul>

Код:

.catalog-menu a {
  padding: 10px 0;
}

.submenu {
  background: #654B36;
  position: absolute;
  width: 950px;
  height: 420px;
  text-decoration: none;
  font: normal 17px Arial;
  display: none;
  margin-top: 10px;
  margin-left: -492px;
  padding: 10px 0;
  z-index: 1;
  -webkit-transition: top 1s ease-out 0.5s;
  -moz-transition: top 1s ease-out 0.5s;
  -o-transition: top 1s ease-out 0.5s;
  transition: top 1s ease-out 0.5s;
}

.catalog-menu a:hover + div{
  display: block;
}

.submenu:hover {
  display: block;
}


BETEPAH 16.12.2013 11:49

Первым параметром значится свойство, на которое распространяется эффект. Если указано top, значит эффект накладывается на изменение положения сверху. На display этот эффект не будет действовать. Выход - использовать visibility, например
<style>
.catalog-menu a {
  padding: 10px 0;
}

.submenu {
  background: #654B36;
  position: absolute;
  width: 950px;
  height: 420px;
  text-decoration: none;
  font: normal 17px Arial;
  display: block;
visibility: hidden;
  margin-top: 10px;
  margin-left: -492px;
  padding: 10px 0;
  z-index: 1;
  -webkit-transition: visibility 1s ease-out 0.5s;
  -moz-transition: visibility 1s ease-out 0.5s;
  -o-transition: visibility 1s ease-out 0.5s;
  transition: visibility 1s ease-out 0.5s;
}

.catalog-menu a:hover + div{
visibility: visible;
}

.submenu:hover {
visibility: visible;
}
</style>
<ul>
   <li>
      <a href="/">ГЛАВНАЯ</a>
   </li>
   <div class="catalog-menu">
      <li>
         <a href="/catalog">КАТАЛОГ</a>
            <div class="submenu">
                 <a href="/catalog/analoi/">АНАЛОИ</a>
                 <a href="/catalog/analoi/analoi_metallicheskie/"><span id="qwerty">металлические</span></a>
                 <a href="/catalog/analoi/analoi_derevyannye/"><span id="qwerty">деревянные</span></a>
            </div>
     </li>
   </div>
</ul>

рони 16.12.2013 11:59

IndigoHollow,
вариант ...
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

.catalog-menu a {
  padding: 10px 0;
}

.submenu {
  background: #654B36;
  position: absolute;
  text-decoration: none;
  font: normal 17px Arial;
  height: 0px;
  width: 950px;
  margin-top: 10px;
  margin-left: -492px;
  padding: 0px;
  z-index: 1;
  -webkit-transition: all 5s ease-out 0.5s;
  -moz-transition: all 5s ease-out 0.5s;
  -o-transition: all 5s ease-out 0.5s;
  transition: all 5s ease-out 0.5s;
}

.catalog-menu a:hover + div{
  -webkit-transition: none;
  -moz-transition: none;
  -o-transition: none;
  transition: none;
  height: 420px;

}

.submenu:hover {
   -webkit-transition: none;
  -moz-transition: none;
  -o-transition: none;
  transition: none;
  height: 420px;
}

  </style>
</head>

<body>
<ul>
   <li>
      <a href="/">ГЛАВНАЯ</a>
   </li>
   <div class="catalog-menu">
      <li>
         <a href="/catalog">КАТАЛОГ</a>
            <div class="submenu">
                 <a href="/catalog/analoi/">АНАЛОИ</a>
                 <a href="/catalog/analoi/analoi_metallicheskie/"><span id="qwerty">металлические</span></a>
                 <a href="/catalog/analoi/analoi_derevyannye/"><span id="qwerty">деревянные</span></a>
            </div>
     </li>
   </div>
</ul>
</body>

</html>

IndigoHollow 16.12.2013 15:02

Цитата:

Сообщение от BETEPAH (Сообщение 286954)
Первым параметром значится свойство, на которое распространяется эффект. Если указано top, значит эффект накладывается на изменение положения сверху. На display этот эффект не будет действовать. Выход - использовать visibility

Отлично! Все супер работает! Большое спасибо за подсказку! :dance:

Цитата:

Сообщение от рони
вариант ...

Ваш вариант тоже годен, спасибо!


Часовой пояс GMT +3, время: 07:49.