2014-10-17 3 views
2

Я использовал CSS3-преобразования на некоторое время, но одна вещь, которая была небольшим ошибкой, состоит в том, что проценты относятся к перемещаемому элементу, а не к родительскому элементу. Это имеет смысл, но это приводит к нескольким ситуациям, которые я не уверен в лучшем способе решения.Лучший способ перевести элемент за пределы экрана?

Например, если бы мы представили элемент, абсолютно расположенный на экране, как бы вы перешли этот элемент за пределы экрана? Размеры элемента могут быть чем-то маленьким, как 200x200 пикселей, то есть вы не можете использовать проценты без каких-либо вычислений.

варианты я свел его в моей голове:

1) Поместите элемент внутри контейнера, который является размером экрана, а затем перевести контейнер на 100%.

2) Продвиньте элемент на свой собственный уровень графического процессора с помощью translateZ, измените или переведите3d, а затем примените соответствующие свойства влево/вправо.

3) Используйте getBoundingClientRect, чтобы определить, где элемент относится к области просмотра, выполните расчет, чтобы определить расстояние в пикселях, которое необходимо применить, чтобы заставить элемент покинуть экран, а затем применить это значение как встроенный стиль перевода.

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

+1

У вас есть "большой поддерживаемое разрешение" или что-то? Если неважно, сколько вы затмете вы за свой экран, вы можете использовать достаточно большое абсолютное смещение и просто перемещать элемент, скажем, на 10 000 пикселей влево или вправо. (И, кстати, есть ли веская причина, по которой вы не можете просто использовать 'display: none'?) –

+0

@TomasLycken - Проблема с этим подходом состояла в том, что вы не смогли бы очень быстро контролировать скорость этой анимации! В частности, нет наибольшего разрешения; вопрос касается любого размера разрешения. –

+0

Думаю, что я бы поделился этой ссылкой для ссылки: http://stackoverflow.com/questions/15317020/css3-translate-out-of-screen –

ответ

2

Что я делаю, чтобы позиционировать что-то вне экрана или вне родителя, это использовать свойства позиции. Для меня это кажется естественным; top/left/right/bottom - анимативны, поэтому они легко переключаются; и третье преимущество заключается в том, что есть большая поддержка этих свойств, поэтому, даже если браузер является древним, резервное копирование - это позиционирование, а не переход.

Рассмотрим следующий пример:

<div class="parent"> 
    <div class="from-the-bottom"></div> 
</div> 

CSS:

.parent { 
    height: 400px; 
    width: 400px; 
    background-color: #ccc; 
    position: relative; /*Make sure the parent has positioning*/ 
    overflow: hidden; /*Hide its overflow*/ 
} 

.from-the-bottom { 
    width: 100px; 
    height: 100px; 
    position: absolute; 
    top: 100%; /*100% top pushes the element fully out of view at the bottom*/ 
    left: 0; 
    right: 0; 
    background-color: yellowgreen; 
    transition: top .3s ease; 
} 

.parent:hover .from-the-bottom { 
    top: 0; /*Changing the top value positions the element within the context of it's parent*/ 
} 
+1

Но верхний/правый/левый/нижний не будет ускоренным GPU правильно, и вызывают перекраски? –

+0

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

+0

Знаете ли вы какие-либо различия в производительности между использованием translateZ + top/left/right/bottom и translate3d/translate? Я всегда слышу, как люди говорят, что вы должны использовать перевод, чтобы переместить все, но никто никогда не упоминал об использовании transformZ + top. –

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