Форум программистов, компьютерный форум, киберфорум
HTML, CSS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
 Аватар для Singleton
179 / 74 / 8
Регистрация: 27.12.2012
Сообщений: 432

Анимация нескольких объектов: img + ul/li

23.10.2016, 21:41. Показов 5020. Ответов 7

Студворк — интернет-сервис помощи студентам
Пытаюсь разместить img (class="menu_picture") по центру родителя так что бы при наведении на него срабатывала анимации смещения вверх и появлялось подменю из маркированого списка. Вместо этого при наведении на img сразу появляется подменю и начинается анимация. Как можно "прикрутить её сразу и к img и к ul/li?
Для удобства скопировал в редактор: https://jsfiddle.net/a2xck9m7/
Пробовал:
.menu_picture:hover, li
.menu_picture:hover ~ li
.menu_picture:hover + li
.menu_picture:hover, ul
.menu_picture:hover ~ ul
.menu_picture:hover + ul
Пробовал отдельно создавать класс и присваивать его нужным пунктам:
CSS
1
2
3
4
5
6
7
8
9
.move_li:hover{
    -webkit-transform: translate(0,-75px);
    -o-transform: translate(0,-75px);
    -moz-transform: translate(0,-75px);
    transition: all 2s ease-in-out;
    -webkit-transition: all 2s ease-in-out; /** Chrome & Safari **/
    -moz-transition: all 2s ease-in-out; /** Firefox **/
    -o-transition: all 2s ease-in-out; /** Opera **/
}
Пробовал добавлять анимацию в li a:hover и li:hover ul. Не работает

И вопрос "в догонку": почему подменю с годами в firefox, opera и dreamweaver cc вылазит в разных местах относительно родителя?

Код:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Документ без названия</title>
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
 
<body>
 
<!-- Страница выбора конкурса -->
<div class="flex-container">
 
<!-- Intel Techno -->
<ul><li><div class="div_center" style="background-color:#F48FB1"><img class="menu_picture" src="media/logo_isef_techno.png" />
    <ul class="menu">
    <li class="move_li"><a href="#">2012-2013</a></li> 
    <li class="move_li"><a href="#">2013-2014</a></li>
    <li class="move_li"><a href="#">2014-2015</a></li>
    <li class="move_li"><a href="#">2015-2016</a></li>
    <li class="move_li"><a href="#" class="brd">2016-2017</a></li> 
    </ul>
</div></li></ul>
 
</div>
<!-- Конец страницы выбора конкурса -->
 
</body>
 
</html>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
@charset "utf-8";
/* CSS Document */
 
html, body {
    height: 100%;
}
 
body {
    margin: 0px;
}
 
.flex-container{
    height: 100%;
    padding: 0;
    margin: 0;
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    align-items: center;
    justify-content: center;
}
 
.div_center{
    display : flex;
    flex-direction : row;
    justify-content : center;
    align-items : center;
    width: 150px;
    height: 500px;
    padding: 0;
    margin: 0;
}
 
.menu_picture:hover{
    width: 150px;
    height: 150px;
    transform: translate(0,-75px);
    -webkit-transform: translate(0,-75px);
    -o-transform: translate(0,-75px);
    -moz-transform: translate(0,-75px);
    transition: all 2s ease-in-out;
    -webkit-transition: all 2s ease-in-out; /** Chrome & Safari **/
    -moz-transition: all 2s ease-in-out; /** Firefox **/
    -o-transition: all 2s ease-in-out; /** Opera **/
}
 
.menu_picture:not(:hover){
    width: 150px;
    height: 150px;
    transform: translate(0,75px);
    -webkit-transform: translate(0,75px);
    -o-transform: translate(0,75px);
    -moz-transform: translate(0,75px);
    transition: all 2s ease-in-out;
    -webkit-transition: all 2s ease-in-out; /** Chrome & Safari **/
    -moz-transition: all 2s ease-in-out; /** Firefox **/
    -o-transition: all 2s ease-in-out; /** Opera **/
}
 
/* Стили для меню */
ul {
    width: 150px; /* Ширина меню */
    list-style: none; /* Для списка убираем маркеры */
    margin: 0; /* Нет отступов вокруг */
    padding: 0; /* Убираем поля вокруг текста */
    font-family: Arial, sans-serif; /* Рубленый шрифт для текста меню */
    font-size: 10pt; /* Размер названий в пункте меню */
    margin: 5px; /* Отступ между пунктами меню */
}
li ul {
    position: absolute; /* Подменю позиционируются абсолютно */
    display: none; /* Скрываем подменю */
    margin-left: 0px; /* Сдвигаем подменю влево */
    margin-top: 150px; /* Сдвигаем подменю вниз */
}
li a {
    display: block; /* Ссылка как блочный элемент */
    padding: 5px; /* Поля вокруг надписи */
    text-decoration: none; /* Подчеркивание у ссылок убираем */
    color: #666; /* Цвет текста */
    border: 1px solid #ccc;/* Рамка вокруг пунктов меню */
    background-color: #f0f0f0; /* Цвет фона */
    border-bottom: none; /* Границу снизу не проводим */
    text-align: center;
    color:#FF0004; /* Цвет текста пунктов */
}
li a:hover {
    color: #ffe; /* Цвет текста активного пункта */
    background-color: #5488af; /* Цвет фона активного пункта */  
}
li:hover ul { 
    display: block; /* При выделении пункта курсором мыши отображается подменю */
}
.brd {
    border-bottom: 1px solid #ccc; /* Линия снизу */
}
 
/* Конец стилей меню */
Добавлено через 1 час 8 минут
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2016, 21:41
Ответы с готовыми решениями:

Анимация для нескольких объектов
Всем, доброго времени суток! Вопрос состоит вот в чем... Есть 3 бота, на каждом их которых висят скрипт и анимация. Анимация состоит из...

Графика: одновременная анимация нескольких объектов
Привет, подскажите как сделать, чтобы все эти 4 объекта запускались одновременно, а не как сейчас по очереди. uses crt, graph; ...

Циклическая анимация нескольких объектов друг за другом
Доброго времени суток) Есть 5 объектов, для каждого из них настроен анимационный эффект. воспроизводятся они друг за другом. Как сделать...

7
Эксперт JSЭксперт HTML/CSS
 Аватар для mrtoxas
3827 / 2677 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
23.10.2016, 21:44
стиль display не анимируется. Используете opacity.
1
 Аватар для Singleton
179 / 74 / 8
Регистрация: 27.12.2012
Сообщений: 432
23.10.2016, 21:56  [ТС]
Т.е. заменить все списки на div и анимировать их создав новый класс?
Или можно сделать как-то так:
.menu_picture:hover, .div_menu
.menu_picture:hover +.div_menu
.menu_picture:hover ~ .div_menu

И немного оффтоп: почему display блок в разных браузерах "вылазит" в разных местах?
0
Эксперт JSЭксперт HTML/CSS
 Аватар для mrtoxas
3827 / 2677 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
23.10.2016, 22:17
Как вариант анимированного появления:
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.block1{
  width:100px;
  height: 100px;
  background-color:red;
}
.block2{
  width:100px;
  height:0;
  overflow: hidden;
  opacity: 0;
  transition: opacity 2s;
  background-color:red;
}
.block1:hover ~.block2{
  opacity: 1;
  height:100px;
}
HTML5
1
2
<div class="block1"></div>
<div class="block2"></div>
Добавлено через 12 минут
А насчет остального, я теряюсь что вы там наворотили.
У вас есть стиль:
CSS
1
2
li ul {
    position: absolute; /* Подменю позиционируются абсолютно */
А подменю позиционируется относительно чего?
И зачем вам там flex?
1
 Аватар для Singleton
179 / 74 / 8
Регистрация: 27.12.2012
Сообщений: 432
23.10.2016, 23:09  [ТС]
flex для того что бы вот этот кусок (а он не один такой) держался центра экрана:
HTML5
1
2
3
4
5
6
7
8
9
<ul><li><div class="div_center" style="background-color:#F48FB1"><img class="menu_picture" src="media/logo_isef_techno.png" />
    <ul class="menu">
    <li class="move_li"><a href="#">2012-2013</a></li> 
    <li class="move_li"><a href="#">2013-2014</a></li>
    <li class="move_li"><a href="#">2014-2015</a></li>
    <li class="move_li"><a href="#">2015-2016</a></li>
    <li class="move_li"><a href="#" class="brd">2016-2017</a></li> 
    </ul>
</div></li></ul>
Из того что нагуглил наиболее вменяемым выглядел пример с flex.

Цитата Сообщение от mrtoxas Посмотреть сообщение
А подменю позиционируется относительно чего?
Тут ответить не могу т.к. код взят из гугла и до конца пока не понят

Для удобства прикладываю целиком файлами: backup3+.rar
0
Эксперт JSЭксперт HTML/CSS
 Аватар для mrtoxas
3827 / 2677 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
23.10.2016, 23:15
Вот вам заимствованный, теперь уже из киберфорума, код
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
@charset "utf-8";
/* CSS Document */
 
html, body {
    height: 100%;
}
 
body {
    margin: 0px;
}
 
.flex-container{
    height: 100%;
    padding: 0;
    margin: 0;
}
.flex-container>ul{
  margin:0 auto;
}
 
.div_center{
    width: 150px;
    height: 500px;
    padding: 0;
    margin: 0;
}
 
.menu_picture:hover{
    width: 150px;
    height: 150px;
    transform: translate(0,-75px);
    -webkit-transform: translate(0,-75px);
    -o-transform: translate(0,-75px);
    -moz-transform: translate(0,-75px);
    transition: all 2s ease-in-out;
    -webkit-transition: all 2s ease-in-out; /** Chrome & Safari **/
    -moz-transition: all 2s ease-in-out; /** Firefox **/
    -o-transition: all 2s ease-in-out; /** Opera **/
}
 
.menu_picture:not(:hover){
    width: 150px;
    height: 150px;
    transform: translate(0,75px);
    -webkit-transform: translate(0,75px);
    -o-transform: translate(0,75px);
    -moz-transform: translate(0,75px);
    transition: all 2s ease-in-out;
    -webkit-transition: all 2s ease-in-out; /** Chrome & Safari **/
    -moz-transition: all 2s ease-in-out; /** Firefox **/
    -o-transition: all 2s ease-in-out; /** Opera **/
}
 
/* Стили для меню */
ul {
    width: 150px; /* Ширина меню */
    list-style: none; /* Для списка убираем маркеры */
    margin: 0; /* Нет отступов вокруг */
    padding: 0; /* Убираем поля вокруг текста */
    font-family: Arial, sans-serif; /* Рубленый шрифт для текста меню */
    font-size: 10pt; /* Размер названий в пункте меню */
    margin: 5px; /* Отступ между пунктами меню */
}
li ul {
    position: absolute; /* Подменю позиционируются абсолютно */
    display: none; /* Скрываем подменю */
    margin-left: 0px; /* Сдвигаем подменю влево */
    margin-top: 150px; /* Сдвигаем подменю вниз */
}
li a {
    display: block; /* Ссылка как блочный элемент */
    padding: 5px; /* Поля вокруг надписи */
    text-decoration: none; /* Подчеркивание у ссылок убираем */
    color: #666; /* Цвет текста */
    border: 1px solid #ccc;/* Рамка вокруг пунктов меню */
    background-color: #f0f0f0; /* Цвет фона */
    border-bottom: none; /* Границу снизу не проводим */
    text-align: center;
    color:#FF0004; /* Цвет текста пунктов */
}
li a:hover {
    color: #ffe; /* Цвет текста активного пункта */
    background-color: #5488af; /* Цвет фона активного пункта */ 
}
li:hover ul { 
    display: block; /* При выделении пункта курсором мыши отображается подменю */
}
.brd {
    border-bottom: 1px solid #ccc; /* Линия снизу */
}
 
/* Конец стилей меню */
А еще сижу смотрю на :not(:hover) и то ли я уже спать хочу...
Какого вы эффекта пытаетесь достичь? Чтобы картинка наезжала на меню?
1
 Аватар для Singleton
179 / 74 / 8
Регистрация: 27.12.2012
Сообщений: 432
23.10.2016, 23:35  [ТС]
Цитата Сообщение от mrtoxas Посмотреть сообщение
Какого вы эффекта пытаетесь достичь? Чтобы картинка наезжала на меню?
Nope. Что-то вроде такого: картинка выезжает вверх, меню появляется/выезжает вниз.
Хотя для меня сейчас больше непонятна разница в отрисовке меню разными браузерами (т.к. они все на движке chromium и как-бы обязаны выдавать одинаковый рендер страниц)
з.ы. Пробовал такую структуру:
HTML5
1
2
3
4
5
6
<div>
    <img>
    <div2>
        <ul></ul>
    </div2>
</div>
но все равно не получается раздельно управлять анимацией img и div2.
Есть ли смысл сейчас писать
CSS
1
2
3
    -webkit-transform: translate(0,75px);
    -o-transform: translate(0,75px);
    -moz-transform: translate(0,75px);
если все браузеры уже пару лет на одном движке? (т.е. вероятность напороться на крайне устаревшую версию довольно мала)
0
Эксперт JSЭксперт HTML/CSS
 Аватар для mrtoxas
3827 / 2677 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
24.10.2016, 00:10
Лучший ответ Сообщение было отмечено Singleton как решение

Решение

Вот, может поможет чем-то
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
html,
body {
  height: 100%;
}
.wrapper {
  width: 150px;
  height: 100%;
  background-color: orange;
  margin: 0 auto;
  overflow: hidden;
  position: relative;
}
.menu-cap {
  position: relative;
  z-index: 9;
  width: 140px;
  height: 140px;
  margin: 0 auto;
}
.cap {
  background-color: tomato;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  -webkit-transition: 1s;
  transition: 1s;
}
.menu {
  opacity: 0;
  -webkit-transform: translateY(50px);
          transform: translateY(50px);
  -webkit-transition: opacity 1s, -webkit-transform 1s;
  transition: opacity 1s, -webkit-transform 1s;
  transition: opacity 1s, transform 1s;
  transition: opacity 1s, transform 1s, -webkit-transform 1s;
}
.wrapper:hover .menu-cap .cap {
  top: -100%;
}
.wrapper:hover .menu {
  opacity: 1;
  -webkit-transform: translateY(0);
          transform: translateY(0);
}
.menu {
  margin: 0;
  padding: 0;
}
.menu-item {
  text-align: center;
  padding: 2px;
  box-sizing: border-box;
  border-top: 1px solid #ccc;
  border-left: 1px solid #ccc;
  border-right: 1px solid #ccc;
  background-color: #f0f0f0;
}
.menu-item:last-child {
  border-bottom: 1px solid #ccc;
}
.menu-item:hover {
  background-color: #5488af;
}
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<div class="wrapper">
  <div class="menu-cap">
    <div class="cap"></div>
  </div>
  <ul class="menu">
    <li class="menu-item">item1</li>
    <li class="menu-item">item2</li>
    <li class="menu-item">item3</li>
    <li class="menu-item">item4</li>
    <li class="menu-item">item5</li>
  </ul>
</div>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2016, 00:10
Помогаю со студенческими работами здесь

Анимация "затухания" нескольких объектов
Здравствуйте, необходимо плавно затушить несколько объектов разом в частности QLabel и QLineEdit. Делаю так: ...

3d анимация 2d объектов
вообще, возможно ли такое действие? все примеры, найденные в просторах &quot;большого брата&quot; описывали трансформации объемных моделей, мне...

Анимация объектов
Друзья, помогите, написать программу в которой буквы строки текста, введёного с клавиатуры будут разлитаться в разные стороны как от взрыва

Анимация объектов
Анимировать прямолинейное равномерное движение как минимум 3х объектов.Помогите сделать Добавлено через 1 час 20 минут Если по...

Анимация объектов imageView
Доброго времени суток. Посоветуйте, каким образом возможно реализовать анимацию передвижения и изменения прозрачности для объектов типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru