2015-07-22 12 views
5

element jest dowolnie umieszczane na stronie, i musi przejść do stałej pozycji na imprezy (przewijania ekranu w moim przypadku, ale im przy unoszących się w skrzypce)Przejście do iz pozycji AUTO

Oryginalny pozycja elementu jest wyśrodkowany z rodzicem (góra: auto i lewo: auto). Po najechaniu kursor powinien płynnie przejść do rogu ekranu (po lewej: 0, góra: 0), a następnie powrócić. Zamiast tego po prostu przeskakuje, ignorując właściwość przejścia.

Zdaję sobie sprawę, że żadna z przeglądarek nie obsługuje przejścia na tryb automatyczny, ale liczyła na to, że uda się to jakoś obejść.

fiddle

<div> 
    <span>test</span> 
</div> 

div { 
    border: 1px solid red; 
    text-align: center; 
    height: 100px; 
    margin: 15px; 
} 
span { 
    display: inline-block; 
    width: 50px; 
    height: 50px; 
    background: blue; 
    transition: all 1s; 
    position: fixed; 
    left: auto; 
    top: auto; 
} 
div:hover span { 
    left: 0; 
    top: 0; 
} 

PS. Mam nadzieję na naprawę tylko css, ale rozwiązanie z JQuery również by działało.

+0

Dlaczego tag jQuery? – j08691

+0

Problem dotyczy twoich "left: auto;" i "right: auto;". Zastanawiam się, dlaczego to może powodować przesłonięcie przejścia. – sBourne

+0

Mam nadzieję na poprawkę css, ale rozwiązanie jquery również zadziała – skyisred

Odpowiedz

1

Masz rację, że nowoczesne przeglądarki nie mogą przejść do trybu "auto". Możesz użyć CSS, aby osiągnąć to, czego szukasz.

W przykładzie musisz centrum zmieniając

top: auto; 
left: auto; 

do

vertical-align: top; 
left: calc(50% - 25px); 

Zdjąć górną nieruchomość od rozpiętości i rozpiętości: hover i zastąpić go vertical-align.

JSFiddle Example

+0

Co powiesz na górę: 0? Element musi być dołączony do górnej części ekranu, a następnie powrócić do pierwotnej pozycji za pomocą elementu div. Jeśli element div jest wystarczająco duży, aby przewijać, oryginalny "wierzchołek" nie może być ustawiony na liczbę. – skyisred

0

Dlaczego nie można ustawić specyficzny top i left? masz span{position: fixed}, więc w tym przypadku zawsze wiesz o swoim top, right,, 8874882, left (w stosunku do rzutni).

więc spróbować z:

div { 
 
    border: 1px solid red; 
 
    text-align: center; 
 
    height: 100px; 
 
    margin: 15px; 
 
} 
 
span { 
 
    display: inline-block; 
 
    width: 50px; 
 
    height: 50px; 
 
    background: blue; 
 
    transition: all 1s; 
 
    position: fixed; 
 
    left: 50%; 
 
    margin-left: -25px; /*or transform: translateX(-50%) if you don't know the width of span*/ 
 
    top: 16px; 
 
} 
 
div:hover span { 
 
    left: 0; 
 
    top: 0; 
 
    margin-left: 0; /*or transform: none if you don't know the width of span*/ 
 
}
<div> 
 
    <span>test</span> 
 
</div>

Można zmienić topleft podczas którego można osiągnąć to, co chcesz.

Here a jsfiddle example to play with