Как получить тот же эффект, что и в slideToggle jQuery, используя переходы CSS 3? - PullRequest
20 голосов
/ 14 января 2012

Мне нужен эффект jQuery slideToggle, но я хочу использовать CSS3-переходы для вызова графического процессора на устройстве iOS, чтобы переход был более плавным.

Ответы [ 5 ]

20 голосов
/ 14 января 2012

Вы можете достичь этого путем перехода height, padding и border-width. Вот пример:

$('.run-css').click(function() {
    $('.cont').toggleClass('toggled');
});
.cont {
    width: 100px;
    height: 100px;
    border: 1px #CCC solid;
    background-color: #EEE;
    padding: 5px;
    -webkit-transition: height .3s linear, padding-top .3s linear, padding-bottom .3s linear, border-top-width .3s linear, border-top-width .3s linear;
    transition: height .3s linear, padding-top .3s linear, padding-bottom .3s linear, border-top-width .3s linear, border-top-width .3s linear;
}
.toggled {
    overflow: hidden;
    padding-top: 0;
    padding-bottom: 0;
    height: 0;
    border-width: 0 1px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<button class="run-css">CSS slideToggle</button>

<div class="cont">Toggle this div</div>
14 голосов
/ 19 декабря 2012

Извините, но это не поддерживается CSS3, если вы не знаете точную высоту. Нет возможности анимировать между 0 и авто. Если вы знаете точную высоту, вы можете сгенерировать несколько кодов перехода здесь: http://css3generator.com/

6 голосов
/ 15 августа 2013

Правда, вы не можете анимировать между 0 и автоматической высотой, но вы можете на самом деле переключать максимальную высоту.

Переключение (через JS) между max-height:0 и max-height:1000px, и вы получите достигнутыйрезультат, хотя он не будет таким гладким, как функция slideToggle в jQuery.

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

4 голосов
/ 20 мая 2016
.container {
    overflow-y: hidden;
    max-height: 0;

    transition: max-height 0.5s ease;
}
.container.open {
    max-height: 1000px; /* approx */
}
0 голосов
/ 14 января 2012

Я считаю, Анимация должна сработать.Это фреймворк CSS Transitions, и хотя я не занимаюсь разработкой для iOS, Леа Веру упоминает, что тестировала его на FF и Chrome для iOS.

Существуют другие библиотеки анимации CSS, такие как move.js , которые используют переходы CSS и JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...