Ответы пользователя по тегу CSS
  • Почему transitionend ломается если быстро нажимать на кнопку?

    @StepsOnes
    Проблема заключается в том, что при быстрых кликах на кнопку, очередные вызовы функции `translateY()` начинаются еще до того, как завершится предыдущая анимация (и соответственно, "transitionend" не успевает сработать). Это приводит к созданию множества слушателей события transitionend на одном элементе, что затрудняет правильную работу анимации при последующих кликах.

    Для решения этой проблемы можно добавить проверку наличия класса "translate" на элементе, перед добавлением его на кнопку. Если класс уже присутствует, то следует пропустить выполнение функции и не добавлять новый слушатель события transitionend:

    function translateY(e) {
      if (!e.classList.contains('translate')) {
        e.classList.add('translate');
        e.addEventListener('transitionend', function handler() {
          e.classList.remove('translate');
          e.removeEventListener('transitionend', handler);
        });
      }
    }


    В этом коде мы проверяем, не содержится ли наш элемент класса "translate" перед добавлением этого класса. Далее, если класса нет, то мы добавляем слушатель события transitionend, и при завершении анимации удаляем слушатель и удаляем класс "translate" с элемента.

    Такой подход обеспечивает правильную работу анимации при быстрых кликах на кнопку.

    Отмечу, что в целом, использование js для реализации простой анимации как в данном примере может считаться избыточным. В большинстве случаев, на такие анимации можно обойтись использованием только css (как вы и отметили, через псевдоклассы, например :active).
    Ответ написан
    Комментировать
  • Как сделать галерею на css по типу Masonry?

    @StepsOnes
    Используя свойство `column-count` вы можете создавать многостолбцовые макеты (как в Masonry). Однако, по умолчанию, все элементы будут заполняться сверху вниз, а затем слева направо. Чтобы это изменить, можно задать свойства `column-fill: balance` и `break-inside: avoid-column`, которые разместят картинки по столбцам, начиная с левого столбца и заполняя равномерно по высоте.

    Вот CSS-класс для галереи на основе Masonry с горизонтальной ориентацией:

    .gallery-gallery-columns-3 {
      column-count: 4; /* Количество столбцов */
      column-gap: 1rem; /* Расстояние между столбцами */
      column-fill: balance; /* Равномерно заполнять столбцы */
    }
    
    .gallery-item {
      break-inside: avoid-column; /* Не переносить элементы на новый столбец */
      margin-bottom: 1rem; /* Расстояние между элементами */
    }


    С помощью этих свойств можно создать галерею на основе Masonry с горизонтальной ориентацией. Обратите внимание, что пример создаст четыре столбца для элементов, расстояние между столбцами составляет `1rem`, а между элементами `1rem`. Вы можете настроить эти значения под свои нужды.
    Ответ написан
    1 комментарий
  • Почему бургер закрашивается?

    @StepsOnes
    button {
      border: none;
      background: transparent;
    }
    Ответ написан
    Комментировать
  • Как сделать бесконечную анимацию движения блоков справа налево?

    @StepsOnes Автор вопроса
    Спустя 2 часа поисков нашел эту статью, может кому пригодиться
    Ответ написан
    1 комментарий
  • Почему кнопка приобретает высоту?

    @StepsOnes Автор вопроса
    Я забыл, что указал родителю flex)
    Ответ написан