Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pozycjonowanie elementów tak, żeby nie nachodziły na siebie
Forum PHP.pl > Forum > Po stronie przeglądarki
adbacz
Załóżmy, że mamy stronę, na której jest kilka kontenerów, i losowo w różnych z nich znajduje się element, który jest pozycjonowany absolutnie, a jego rodzić relatywnie. Może się zdarzyć, że jest zagnieżdżenie div > div > div tych kontenerów na stronie, i raz na jakiś czas w tych trzech kontenerach znajdują się te pozycjonowane elementy. W takim przypadku, wszystkie nowe elementy, które są pozycjonowane, nachodzą na siebie.

Pytanie więc jest takie: Jak zrobić, aby te elementy nie nachodziły na siebie? Znamy ich szerokości i wysokości, ale nie znamy dokładnej pozycji bo za każdym razem znajdują się w innych miejsach strony.

Mam nadzieję, że dobrze wytłumaczyłem problem. Jeśli macie jakies pytania to walcie śmiało. Bardzo potrzebuje rozwiązania tego problemu a sam nie umiem sobie z tym poradzić więc proszę Was o pomoc.
piotrex41
Nie do końca rozumiem, ale może chodzić Ci o z-index (z CSSa), który ustawia który element jest "nad" innym.
adbacz
Nie, nie chodzi mi o z-index. To, że nachodzą to normalne, bo są pozycjonowane absolutnie. Chodzi mi o to, żeby przesunąć jednen o tyle, żeby nie nachodził na tego pod spodem.

Czyli, jeśli element A ma taki sam offset jak B, to przesuwamy element A lub B o tyle w dół, czyli dajemy mu taką wartość top, aby przesunął się w dół względem tego drugiego i znalazł się pod nim dosłownie. Nie w pozycji z-index pod nim, ale, żeby było widać na stronie, że jest jeden pod drugim.
piotrex41
To może sprawdzaj przez jQuery pozycję, i jeśli jest mniejsza lub większa od minimalnej (czyli takiej przy której nie nachodzą na siebie) to dalej przez jQuery możesz modyfikować atrybuty CSSa.
adbacz
Jaką pozycję? Względem czego? Możesz troche rozwinąć myśl?
piotrex41
Ciężko jest coś więcej powiedzieć, kiedy nie wiadomo, jak to wygląda. Możesz sprawdzać pozycję względem rodzica (kontenera nadrzędnego) albo tego drugiego DIVa, na którego nachodzi.
adbacz
Zrobiłem tak jak poniżej, i przesuwa mi elementy tak jak powinno, ale dodatkowo przesunięte zostają niektóre elementy, których przesunąć nie trzeba:

Kod
for(var i = 0 in elements)
  {
    for(var j = 0 in elements)
    {
      if(elements[i]['top'] >= elements[j]['top'])
      {
        elements[j]['object'].css('top', elements[i]['moved'] + 30 + 'px');
        elements[i]['moved']  += 30;
        elements[j]['top']    += 30;
      }
    }
  }


PS. Istnieją tu na forum tagi dla Javascriptu?
piotrex41
Skoro ten kod przesuwa Ci elementy które powinien, to może ponadawaj tymże elementom jakieś unikalne ID i po tychże właśnie ID wybieraj element i przesuwaj tylko ten...
adbacz
A mógłbys to opisać w krokach? Bo nie rozumiem dlaczego miałbym nadawać elementowi ID po przesunięciu już go.
piotrex41
Dlaczego niby miałbyś coś nadawać po przesunięciu?
Przesuwa Ci się wiele elementów, bo wszystkie one odpowiadają kryteriom stawianym im przez kod JavaScript. Dadaj ID temu DIVowi który będziesz przesuwał, i w jQuery wyszukaj TYLKO ten div (za pomocą getElementById()) i tylko ten DIV przesuwaj. Dzięki temu unikniesz przesuwania się więcej niż 1 elementu...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.