Переключение высоты меню ведет себя по-разному при закрытии, чем при открытии [дубликат]

Если у вас есть такая конфигурация:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Раскомментируйте следующие строки в вашем httpd.conf

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

Это работает для меня

41
задан andrewsi 5 December 2014 в 01:50
поделиться

8 ответов

Надеюсь, вы уже работали над этим, но я просто пишу, чтобы сказать, что столкнулся с одной и той же проблемой: WebKit, по крайней мере, на iOS 4.1, не будет анимировать переход, если он был определен в элементе, display: none; », точно так же, как упомянутый выше Николас.

Если ваша проблема в том, чтобы не показывать этот элемент, это, как и в моем случае, то я предлагаю другое решение, чем установить высоту в 0. В вашем теле обратный вызов события onLoad, сохраните элемент в переменной и удалите его из DOM. Затем повторно вставьте его, когда наступит время, чтобы показать его.

0
ответ дан Adrian Ghizaru 21 August 2018 в 23:05
поделиться

Я использовал следующее решение для элементов, где мне нужно переключаться между дисплеем none и block и сохранять эффект перехода:

function slidedown(element) {
    ...
    element.style.display = "block";
    var timerId = setTimeout(function(){
        element.style.webkitTransitionProperty = "height";
        element.style.webkitTransitionTiming = "linear";
        element.style.webkitTransitionDuration = "3.5s";
        element.style.height = "500px";
    }, 0);
    ...
}

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

2
ответ дан Christian 21 August 2018 в 23:05
поделиться

Решение (чисто CSS) до сих пор

Если вы оставите height:auto; и используете фиксированные значения max-height, вы можете имитировать переход:

.details-expanded {
    max-height: 300px; /* try to guess a max-height for your content */
}

.details-collapsed {
    height: auto;
    max-height: 0;
    transition: max-height 500ms linear; /* pick a proportional duration */
}

Обратите внимание до длительности перехода и max-height, когда элемент расширяется. Играйте со значениями, пока не получите желаемое поведение.

Таким образом вы можете получить переход между двумя определенными значениями (в приведенном выше примере от 0 до 300), в то время как свойство height будет просто «следовать» «max-height переход и расти до тех пор, пока он не получит размер содержимого.


Демос

DEMO 1 - рабочий пример этого решения

DEMO 2 - просто демонстрация того, что происходит в DEMO 1


Наблюдения

В настоящее время переходы реализуются только между предопределенными значениями, и я предположил, что это связано с тем, что в некоторых случаях двигатель не может угадать начальное или конечное значение. Что делать, если у вас есть переход на высоту, конечное значение которого составляет 50%, но сам переход влияет на высоту родителя? Вероятно, для каждого кадра потребуется несколько расчетов reflow , вызывающих проблемы с производительностью.

Как и в случае с fabb , спецификация для переходов CSS определяет, что процентные значения должны поддерживаться, поэтому это может быть просто вопрос времени, пока двигатели не решат, в каких случаях они идут для поддержки переходов с использованием динамически оцениваемых точек. Тем не менее, я не уверен, что можно считать правильным поведением для значений auto.

61
ответ дан Community 21 August 2018 в 23:05
поделиться
  • 1
    и вот рабочий пример этого: jsfiddle.net/gryzzly/n5XfG/3 – Misha Reyzlin 8 June 2011 в 15:49
  • 2
    Обратите внимание, что (из моего тестирования) анимация max-height таким образом приведет к неточным временам перехода. – Cory Mawhorter 15 August 2011 в 21:28
  • 3
    Grumble ... enter не должен отправлять свой комментарий. cvsguimaraes компенсирует это, указав в примере время перехода 40 секунд, и появляется , чтобы анимировать правильно. Тем не менее, это действительно оживление от 0 до 9999 пикселей, как вы сказали. Я бы рекомендовал вам установить разумную максимальную высоту для каждой ситуации. – Cory Mawhorter 15 August 2011 в 21:36
  • 4
    задержка перехода безумна. – vsync 1 December 2012 в 01:07
  • 5
    да, я понимаю, теперь мы все разные люди, и пост был отредактирован, так или иначе – vsync 26 November 2014 в 22:58

У меня была та же проблема. Переход «отлично работал», когда «рушился», но появился без перехода (например, «включен») при «расширении», когда раньше был установлен «display: none».

Я случайно пришел к рабочему решению в то время как отладка: просто запрос «offsetHeight», кажется, заставляет внутреннюю повторную визуализацию элемента.

что-то вроде этого:

    showElement = function(){
       ...
       oEl.style.display = "block";
       var xDump = oEl.offsetHeight;
       oEl.className = "show";
    }

xDump никогда не используется, но имея его, сделал разницу.

3
ответ дан DDTech 21 August 2018 в 23:05
поделиться
  • 1
    Я работал над этим, используя решение cvsguimaraes max-height и оставив height:auto. Для свернутого состояния я устанавливаю max-height:0; overflow:hidden; и сворачиваю / расширяю, а затем работает как ожидалось. Тогда нет необходимости использовать display:none. – Cory Mawhorter 15 August 2011 в 21:39

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

17
ответ дан fabb 21 August 2018 в 23:05
поделиться
  • 1
    Хороший и аккуратный ответ, проблема совместимости браузеров должна быть прямо указана. Многие из нас уже знакомы с обходными решениями. – Vicary 10 September 2013 в 12:03
  • 2
    Это 2017 год, по-прежнему не поддерживается! – Dohab 10 September 2017 в 10:03
  • 3
    Все еще не поддерживается в 2018 году. – TranslucentCloud 26 June 2018 в 12:38
  • 4
    Все еще не поддерживается в середине 2018 года – Uliyan Romanov 6 August 2018 в 08:02

Вот решение для тех, кто хочет использовать проценты.

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

здесь приведен код

.container {
    width: 500px; 
    height: 500px; 
    background: transparent;
}
.expand-content{
    height: 0%; 
    color: #fff;
    background: green;
}
.expand-content:hover {
    height: 100%; 
    background: orange;
    transition: all 2s ease;
}
.expand-content p  {
    font-size: 35px; 
    text-align: center;     
}
<div class="container">
    <div class="expand-content">
        <p>Expanded Content</p>
    </div>
</div>

на JSFiddle: http://jsfiddle.net/jtZ8j/7/

0
ответ дан JCBrown 21 August 2018 в 23:05
поделиться

Это изменение от отображения: none для отображения: блок, который останавливает переход. Попробуйте установить свернутый стиль для отображения: block; высота: 0; overflow: hidden;

Примечание: расширенная высота авто также остановит переход. Если на содержащем блоке нет высоты, высота 100% равна высоте авто.

1
ответ дан Nicholas 21 August 2018 в 23:05
поделиться
0
ответ дан Calle Bjernekull 4 November 2018 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: