2013-12-05 3 views
10

Я пытаюсь получить объекты для «скольжения» в нижней части экрана, но поскольку я не могу получить высоту экрана как единицу в CSS, я пытаюсь сделать это с запросами средств массовой информации, например, так:Определение анимации ключевого кадра внутри медиа-запросов

@media(max-height:500px) { 
    @keyframe slideUp { 
    0% { transform: translate3d(0,500px,0); } 
    100% { transform: translate3d(0,0,0); } 
    } 
} 
@media(max-height:750px) { 
    @keyframe slideUp { 
    0% { transform: translate3d(0,750px,0); } 
    100% { transform: translate3d(0,0,0); } 
    } 
} 
/* etc. */ 

Это не работает (он использует первую версию slideUp независимо от высоты), поэтому я предполагаю, что ключевые кадры после того, как определено, не могут быть перезаписаны или переназначены на основе запросов СМИ ? Есть ли способ достичь этого эффекта (не имея много разных настроек ключевого кадра и используя медиа-запрос, чтобы назначить соответствующий класс)?

+4

В правилах вложенными внутри '@ media' являются недействительными, поскольку в CSS 2.1 - см: http://www.w3.org/TR/CSS2/media.html#at-media -rule и http://stackoverflow.com/questions/11746581/nesting-media-rules-in-css/11747166 – Adrift

ответ

2

способ сделать слайд вверх анимации, независимо от экрана или высоты элемента является использование position: fixed:

.box { 
    position: fixed; 
    animation: slideUp 1s forwards; 
} 

@keyframes slideUp { 
    from { top: 100%; } 
    to { top: 0; } 
} 

Демо:http://jsfiddle.net/myajouri/Kvtd2/

Если вы хотите, чтобы скользить относительно родительского элемента и а не в окне просмотра, вместо этого используйте position: absolute.

+0

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

+0

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

+0

У вас есть пример скользящего относительно родительского элемента? кажется, что требуется больше, чем 'position: absolute' http://jsfiddle.net/ypuun2xL/ –

0

Если вы должны использовать translate3d получить аппаратное ускорение на мобильных устройствах (как вы упомянули), и учитывая, что вы не можете использовать в-правил внутри @media:

Вы можете определить один @keyframes с большим translateX (скажем 5000px) и измените значение animation-duration на основании высоты экрана, чтобы скорость была более или менее одинаковой на разных высотах.

Я бы также определил диапазоны высоты (max-height и min-height) в отличие от верхних пределов (max-height), чтобы предотвратить нежелательные переопределения стиля.

@keyframes slideUp { 
    from { transform: translate3d(0,5000px,0); } 
    to { transform: translate3d(0,0,0); } 
} 

.box { animation: slideUp 5s forwards; } 

@media (min-height: 0) and (max-height: 500px) { 
    .box { animation-duration: 0.5s; } 
} 

@media (min-height: 501px) and (max-height: 750px) { 
    .box { animation-duration: 0.75s; } 
} 

@media (min-height: 751px) and (max-height: 1000px) { 
    .box { animation-duration: 1s; } 
} 

DEMO:http://jsfiddle.net/myajouri/9xLyf/

13

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

@media(max-height:500px) 
 
{ 
 
    #selectorGroup { 
 
     animation: slideUp500 1s forwards; 
 
    } 
 
} 
 

 
@media(max-height:750px) 
 
{ 
 
    #selectorGroup { 
 
     animation: slideUp750 1s forwards; 
 
    } 
 
} 
 

 

 
@keyframes slideUp500 { 
 
    0% { transform: translate3d(0,500px,0); } 
 
    100% { transform: translate3d(0,0,0); } 
 
} 
 

 
@keyframes slideUp750 { 
 
    0% { transform: translate3d(0,750px,0); } 
 
    100% { transform: translate3d(0,0,0); } 
 
}

+0

Глядя снова - Я вижу, что вы предлагали это в исходном вопросе, но для некоторых ситуаций это мой единственный способ. –

+0

Это отстой, что вам нужно полудублировать код, но работает. –

+1

@ Kyle Hawk занять минуту и ​​пойти посмотреть на беспорядочный CSS для любого из лучших сайтов.Это должно заставить вас чувствовать себя лучше об этом :) –

Смежные вопросы