Переходы флажков не работают должным образом

У меня проблема с переходами с моим флажком. Все, что я хочу сделать, это открыть выпадающее меню медленно при низком разрешении ширины.

Вот мой код:

HTML:

<nav class = "header-nav">
                <input type = "checkbox" id = "header-nav-button">
                    <label for = "header-nav-button">☰</label>
                </input>
                <ul>
                    <li><a class = "header-nav-links" id = "active">Home</a></li>
                    <li><a class = "header-nav-links about-us">About Us</a></li>
                    <li><a class = "header-nav-links">Our Services</a></li>
                    <li><a class = "header-nav-links">Prices</a></li>
                    <li><a class = "header-nav-links">Contact</a></li>
                </ul>
            </nav>

Введите CSS:

input[type = "checkbox"] + label{
font-size: 40px;
cursor: pointer;
color: #ed145b;
font-family: Lato;
font-weight: 700;
line-height: 38px;
padding: 0 20px;}

input, label{
display: none;}

И мой код CSS, помещенный в @media (max-width: 600px):

label{
    display: inline-block;  
}

#header-nav-button{

}
#header-nav-button:not(:checked) ~ul{
    display:none;
    height: 0;
    -webkit-transition: all .5s ease;
     -moz-transition: all .5s ease;
     -o-transition: all .5s ease;
     -ms-transition: all .5s ease;
     transition: all 5s ease;
}

}
#header-nav-button:checked ~ ul{
    display: block;
    height: 200px;
}

#header-nav-button:checked ~ ul li{
    display: block;
    padding: 0 20px;
}

Я попробовал трюк с высотой, видимостью и непрозрачностью - к сожалению, у меня ничего не сработало. Кажется, что переход просто не работает должным образом.

Вы пробовали поиграть с продолжительностью перехода?

Nico Haase 27.03.2018 12:55
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете анимировать height.
Но вы МОЖЕТЕ оживить max-height.

<nav class = "header-nav">
  <label for = "header-nav-button">☰</label>
  <input type = "checkbox" id = "header-nav-button">
  <ul>
    <li><a class = "header-nav-links" id = "active">Home</a></li>
    <li><a class = "header-nav-links about-us">About Us</a></li>
    <li><a class = "header-nav-links">Our Services</a></li>
    <li><a class = "header-nav-links">Prices</a></li>
    <li><a class = "header-nav-links">Contact</a></li>
  </ul>
</nav>

Я разместил метку над вводом, чтобы использовать более точный селектор + в CSS (#header-nav-button + ul)

label {
  font-size: 40px;
  cursor: pointer;
  color: #ed145b;
  font-family: Lato;
  font-weight: 700;
  line-height: 38px;
  padding: 0 20px;
}

input,
label {
  display: none;
}

@media ( max-width: 600px) {
  label {
    display: inline-block;
  }
  ul {
    max-height: 0;
    overflow: hidden;
    -webkit-transition: all .5s ease;
    -moz-transition: all .5s ease;
    -o-transition: all .5s ease;
    -ms-transition: all .5s ease;
    transition: all .5s ease;
  }
  ul li {
    padding: 0 20px;
  }
  #header-nav-button:checked+ul {
    max-height: 999px;
  }
}

Я удалил атрибуты display, потому что вы не можете анимировать отображение. Вместо этого я использовал overflow: hidden, чтобы скрыть меню. И я заменил height на max-height. Хорошая вещь в этом заключается в том, что вам не нужно знать точную высоту меню, вы можете установить ее значение, которое, как вы знаете, никогда не достигнет. Таким образом, ваше меню может «расти» без необходимости каждый раз выяснять его высоту.

https://jsfiddle.net/w4fwbw3s/8/

Я также изменил селекторы внутри медиа-запроса. Не используйте #header-nav-button:not(:checked) ~ul, а просто используйте ul

Paul van den Dool 27.03.2018 13:15

Вы можете анимировать высоту - это сложнее сделать, так как вам нужно знать точную высоту

Pete 27.03.2018 13:22

Извините моя ошибка. Получилось! Все, что мне нужно было добавить в ваш код, - это «width: 100%» для li, чтобы он отображался в виде блоков. Большое спасибо :)

Jarosław Mejer 27.03.2018 13:29

Другие вопросы по теме