jQuery hide element, zachowując jego miejsce w układzie strony


169

Czy istnieje sposób w jQuery, w którym mogę ukryć element, ale nie zmienić DOM, gdy jest on ukryty? Ukrywam pewien element, ale kiedy jest ukryty, elementy pod nim przesuwają się w górę. Nie chcę, żeby to się stało. Chcę, aby przestrzeń pozostała taka sama, ale element ma być pokazywany / ukrywany do woli.

Mogę to zrobić?


co powiesz na nadanie mu zerowej szerokości?
mrtsherman

8
@mrtsherman: odradza się zerową szerokość: wiele czytników ekranu (używanych przez niewidomych lub niedowidzących) nadal odczytuje treści, które są `` ukryte '' w ten sposób, co może ich zmylić, ponieważ prawdopodobnie treść nie jest nie powinien być dostępny w tym momencie. Korzystanie z widoczności CSS: ukryte jest sposobem na to.
BrendanMcK

Możesz dynamicznie zapisać wysokość przed fadeIn i fadeOut your elems => zobacz na dole (używam go w pętli produktów). $ ('. Or-woo-bt'). Parent (). Parent (). Parent ( ) .hover (function () {// Zachowaj miejsce; var rightHeight = $ (this) .height (); $ (this) .css ('height', rightHeight); // Ukryj; $ (this) .parent ( ) .parent (). find ('a span.family-price'). fadeOut ();}, function () {// Show; $ (this) .parent (). parent (). find ('a span .family-price '). fadeIn (' slow ');});
Olivier

Odpowiedzi:


296

Zamiast hide()używać:

css('visibility','hidden')

hide()ustawia displaystyl na none, co całkowicie usuwa element z przepływu dokumentu i powoduje, że nie zajmuje on miejsca.

visibility:hidden utrzymuje przestrzeń taką, jaka jest.


82
css('visibility','visible')
Dr Molle

1
lubcss('visibility', '')
Anthony McGrath

40

Spróbuj ustawić visibilityna hidden:

$("#id").css("visibility", "hidden");

19

display: none;usunie go z przepływu treści, dzięki czemu zobaczysz, jak inne treści zostaną przeniesione do pustej przestrzeni. ( display: block;przenosi go z powrotem do strumienia, wypychając wszystko z drogi).

visibility: hidden;utrzyma go w strumieniu treści, zajmując miejsce, ale po prostu sprawi, że będzie niewidoczny. ( visibility: visible;ujawni to ponownie.)

Będziesz chciał użyć, visibilityjeśli chcesz, aby przepływ treści pozostał niezmieniony.



7

Użyłem wcześniej, opacity: 0zanim zobaczyłem visibility: hiddensztuczkę.

Ale w wielu przypadkach opacity: 0jest to problematyczne, ponieważ pozwala na interakcję z elementem , nawet jeśli go nie widać! (Jak wskazał DeadPassive .)

Zwykle nie tego chcesz. Ale może czasami możesz?


1
Nie możesz wchodzić w interakcje z ukrytym elementem, tak jak możesz z elementem o kryciu 0.
DeadPassive

@feskr Jeśli możesz pomyśleć o sytuacji, w której byłoby to korzystne, podziel się nim!
joeytwiddle

@joeytwiddle Natknąłem się na twoją odpowiedź. Musiałem zapobiec interakcji z elementem w określonym stanie, jednocześnie zachowując jego przestrzeń. Zdawałem sobie sprawę, że visibility: hidden chroni przestrzeń, ale nie wiedziałem, że uniemożliwi interakcję.
feskr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.