2011-02-03 7 views
11

używam jQuery kurczyć Szerokość a div „s, tak:jQuery: Czy istnieje sposób na animację szerokości elementu div bez ruchu tekstu?

$('div#foo').animate({width: 0},someSpeed); 

podczas jego kurczenia tekst przepłynie aby dopasować je do coraz cieńsze div. Nie chcę, aby tak się stało - chcę, aby tekst pozostał taki, jaki jest, po prostu znika z widoku wraz ze zmniejszaniem szerokości, tak jak to się dzieje, gdy robisz $('div#foo').slideUp().

Czy istnieje sztuczka CSS lub inny sposób, aby to zadziałało?

+0

OT: Jak sobie radzisz z wyświetlaniem treści tekstowych po osiągnięciu 0? Muszę użyć append '.hide (0)', aby zachować tekst ukryty - zobacz tutaj: http://jsfiddle.net/AvYyT/ –

+0

@ Šime Vidas - faktycznie zrobiłem to pierwotnie, ale uprościłem to na moje pytanie: '$ (this) .animate ({szerokość: 0, przezroczystość: 0}, prędkość, funkcja() {$ (this) .css ('display', 'none');});'. Kiedy skończy się animacja, ustawia wyświetlanie na none. –

Odpowiedz

9

żywo demo:http://jsfiddle.net/AvYyT/1/

Sztuką jest wykorzystanie wewnętrzny pojemnik i ustawić jej o szerokości zewnętrznej pojemnika.

+1

Yup, wydaje się być tym, czego szuka. Znakomity. –

-1

spróbuj nadając jej vertical-align:top

+0

Nic nie zmieniłem. –

+1

Jeśli zgadujesz, zgadnij w komentarzu. Opublikuj odpowiedź tylko wtedy, gdy masz pewność, że działa. –

0

w twojej div CSS, zastosowanie: overflow-x: hidden; overflow-y: hidden;

+0

Nic nie zmieniłem. –

+1

@ David Jeśli zgadujesz, zgadnij w komentarzu. Opublikuj odpowiedź tylko wtedy, gdy masz pewność, że działa. –

+2

@ Šime, skąd wiesz, że nie był "pewny", że to działa, cokolwiek to znaczy? Wiesz, że jesteś typem łobuza StackOverflow, prawda? – Dutchie432

3

Można użyć jQuery aby ustawić szerokość zawartości do z tego div, dodać overflow:hidden do div a dopiero potem zmniejszyć szerokość.

Coś (niesprawdzone, mogą mieć literówki, ale masz pomysł ...):

var el = $('div#foo'); 
el.children().each(function() { 
    $(this).width(el.width()); 
}); 
el.css('overflow', 'hidden').animate({width: 0}, someSpeed); 

Ale to zależy od zawartości div, to nie będzie działać, jeśli nie są to obrazy wewnątrz niego .

+0

Ustawienie szerokości podrzędności na dokładną wartość szerokości rodzica nie jest bezpieczne. Jeśli dziecko ma dopełnienie, marginesy i/lub granice, dziecko stanie się szeroko otwarte, zobacz tutaj: http://jsfiddle.net/AvYyT/3/. Aby sobie z tym poradzić, musisz odjąć różnicę '$ (this) .outerWidth (true) - $ (this) .width()', zobacz tutaj: http://jsfiddle.net/AvYyT/4/ –

+0

@ Šime Vidas: Tak jak mówiłem, zależy to od zawartości 'div', jestem jedynie ilustracją pomysłu za pomocą próbki kodu. – jeroen

3

Jedną opcją jest użycie white-space: nowrap; na div. Jedyny problem polega na tym, że musisz ręcznie dodawać podziały wierszy, jeśli masz dużo tekstu.

+0

Działa to z maksymalną szerokością, w tym przypadku możesz również użyć 'overflow: auto' i nie wymaga żadnych dodatkowych elementów. – chad

+0

jak możemy to zrobić, gdy mamy długi tekst i tekst jest dyanmiczny –

+0

@jitendravarshney Jeśli masz inne pytanie, najlepiej zadać nowe pytanie –

Powiązane problemy