Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] Obrazek w ustalonej pozycji z tabeli
Forum PHP.pl > Forum > Przedszkole
wojteke
Witam

Chciałbym, by po najechaniu na pole danej komórki w tabeli, w ustalonej pozycji wyświetlił się obrazek z boku komórki. Nie wiem czy dobrze kombinuję, dlatego zwracam się do Was o pomoc. Właściwie już prawie udało mi się osiągnąć zamierzony efekt. Problem mam tylko taki, że używając stylu css: position: relative; obrazek, który mi się wyświetla obok, zajmuje dodatkowo miejsce w komórce, z której rzekomo został "przesunięty".

Sytuacje doskonale widać na poniższym screenie:



Przedstawiam kod:

  1. <style type="text/css">
  2. div.submenu
  3. {
  4. position: relative;
  5. left: -150px;
  6. top: -75px;
  7. visibility: hidden;
  8. }
  9.  
  10. <script type="text/javascript">
  11. <!--
  12. function Pokaz(nazwa)
  13. {
  14. document.getElementById(nazwa).style.visibility = 'visible';
  15. document.getElementById(nazwa).parentNode.style.backgroundColor = 'green';
  16. }
  17. function Ukryj(nazwa)
  18. {
  19. document.getElementById(nazwa).style.visibility = 'hidden';
  20. document.getElementById(nazwa).parentNode.style.backgroundColor = 'Transparent';
  21. }
  22. //-->
  23. </script>
  24.  
  25. </head>
  26. <br /><br /><br /><br /><br />
  27. <table border="1">
  28. <tr>
  29. <td class="menuitem" onmouseover="Pokaz('SubMenu1')" onmouseout="Ukryj('SubMenu1')">
  30. napis
  31. <div id="SubMenu1" class="submenu">
  32. <img src="image.jpg" border="0px">
  33. </div>
  34. </td>
  35. </tr>
  36. </table>
  37. </center>
  38. </body>
  39. </html>


position: absolute; nie wchodzi chyba w grę, bo chciałbym, by zawsze obrazek pojawiał się w tym samym miejscu na stronie.

Pozdrawiam!
erix
http://osiolki.net/tabelki
wojteke
No wiem, wiem, że tabele są złe i w ogóle ale ciężko mi jest się przestawić, gdy używam parę skryptów tj. tablesorter. Na dobrą sprawę chodzi tutaj o prawdziwą tabelkę z "danymi tabelarycznymi". Wyjątkowo chciałbym, by po najechaniu myszką na jedną z komórek, pojawił się z boku obrazek ale w ustalonej pozycji (px w lewo). Wiecie może jak to zrobić nie używając CSS'a, tylko javascript'a?
zegarek84
bardzo to mógłbyś to zrobić bez js tylko używając css.... ale skoro chcesz w js to musisz obliczyć pozycję komórki tabeli względem dokumentu (w jquery była odpowiednia własność) - możesz w sumie do wyznaczenia tej pozycji wspomóc się w czystym js jeszcze getComputedStyle - zwróci Ci to obiekt z właściwościami przeliczonymi względem głównego dokumentu - mając tą właściwość po prostu w obliczonej pozycji wyświetlisz dymek który nie będzie się ruszał - ale w sumie na to jest wiele rozwiązań winksmiley.jpg [jak mawiają każda droga prowadzi do Rzymu)

ok - ale co Ci szkodzi CSS samo??
może to Cię zainteresuje jeszcze ;p - wcześniej nakierowywałem na to na co sam się uparłeś ;p
  1. td .hide {visibility:hidden;position:absolute;}
  2. td:hover .hide {visibility:visible;margin-left:-200px}
  3. </style></head>
  4. <br /><br /><br /><br /><br /><br /><br /><br />
  5. <table border="1">
  6. <tbody><tr>
  7. <td> <div class="hide">
  8. <img src="http://www.google.pl/intl/en_com/images/logo_plain.png"><br /> umyślałem sobie dymek ;p - równie dobrze klasa mogła być tylko do obrazka przypisana ;)
  9. </div>
  10. napis g h gsdf sdfd gdsf sdgdfsfg dfs dfsg sdg ds
  11. </td>
  12. </tr>
  13. </body></html>
wojteke
Dzięki! Nie wiedziałem, że w dymek można wsadzić img. yahoo.gif

Mam jeszcze jeden problem. Mam nadzieję, że do niego też nie trzeba zastosować JS, chociaż widać, że chyba tutaj trzeba wstawić jakieś warunki.

Problem przedstawiam w poniższym screenie by klarowniej to wyglądało:



I poniżej podaję kod:

  1. <br /><br /><br /><br /><br /><br /><br /><br />
  2.  
  3. <table border="1">
  4. <tr>
  5. <td>
  6. <a href="http://google.pl/" alt="teskt alternatywny">
  7. <div class="avatar_miniaturka">
  8. <img src="avatar.gif" border="0" onmouseover="this.src = 'avatar_active.gif'" onmouseout="this.src = 'avatar.gif'" >
  9. <div class="avatar">
  10. <img src="http://upload.wikimedia.org/wikipedia/commons/0/0d/Crystal_Clear_mimetype_image.png">
  11. </div>
  12. </div>
  13. </a>
  14. <div class="prowadzacy_link">
  15. <a href="http://google.pl/" alt="teskt alternatywny">
  16. napis
  17. </a>
  18. </div>
  19. </td>
  20. </tr>
  21. </tbody>


  1. a {
  2. color: #660000;
  3. text-decoration:none;
  4. }
  5. a:active {
  6. text-decoration: underline;
  7. }
  8. a:hover {
  9. text-decoration: underline;
  10. }
  11.  
  12. img {
  13. border: none;
  14. }
  15.  
  16.  
  17. /**/
  18.  
  19.  
  20. a .avatar {
  21. visibility:hidden;
  22. position:absolute;
  23. }
  24.  
  25. a:hover .avatar {
  26. visibility:visible;
  27. margin-left:-150px;
  28. margin-top:-60px;
  29. }
  30.  
  31. .avatar_miniaturka{
  32. width: 16px;
  33. height: 16px;
  34. float: left;
  35. }
  36. .avatar_miniaturka :active{
  37. width: 16px;
  38. height: 16px;
  39. }
  40.  
  41. .prowadzacy_link{
  42. float: left;
  43. width: 50px;
  44. text-align: center;
  45. }


Bardzo proszę o pomoc, bo naprawdę nie mam zielonego pojęcia jak to zrobić. W Internecie czy "szukajką" na forum też niczego ciekawego nie znalazłem.
zegarek84
da się to zrobić przy pomocy tylko samego css - najpierw chciałem zrobić rozwiązanie niby popularne - ale w praktyce musiałbyś sporo w stylach zmieniać - zrobiłem rozwiązanie "uniwersalne" gdzie kod powinieneś zrozumieć bez problemu - tam w kodzie wstawia się tylko te trzy obrazki przy czym ten trzeci który jest pierwszym wyświetlanym obrazkiem nie musi mieć przypisanej klasy - z kolei te ukrywane obrazki muszą być przed tym trzecim (dało by się jeszcze inaczej ale szkoda komplikować) - obrazki do przykładu z forum:
[EDIT] ps - tutaj obrazki mają rużny rozmiar więc ten pierwszy nie jest "schowany" - mógłbym go w css ukryć [i jeśli w praktyce będziesz miał też obrazki różnej wielkości to napisz to poprawię i się ukryje bo to moment] ale jest on normalnie przesłonięty przez to drugie tło więc nie widzę potrzeby a lepiej Ci to zobrazuje - zresztą css jest krótki to tu już powinieneś wiedzieć co zrobić winksmiley.jpg
  1. a {color: #660000;text-decoration:none;}
  2. a:active {text-decoration: underline;}
  3. a:hover {text-decoration: underline;}
  4.  
  5. .powiekszony, .tlo2 {position:absolute;visibility:hidden}
  6. .powiekszony {margin-left:-300px}
  7. a:hover .tlo2{visibility:visible}
  8.  
  9. a .img:hover .powiekszony {visibility:visible}
  10. </style></head>
  11. <br /><br /><br /><br /><br /><br /><br /><br />
  12.  
  13. <center><table border="1"><tbody><tr>
  14. <td>
  15. <a href="#">
  16. <b class="img">
  17. <img class="powiekszony" src="http://www.google.pl/intl/en_com/images/logo_plain.png" />
  18. <img class="tlo2" src="http://forum.php.pl/uploads/av-29013.jpeg" />
  19. <img class="tlo1" src="http://forum.php.pl/uploads/av-10281.jpg" />
  20. </b>
  21. tresc linka</a>
  22. </td>
  23. <td>druga komórka ;p</td>
  24. </tr></tbody></table></center>
  25. </body></html>


ps. zamiast obrazka "powiększony" możesz wstawić inny element BLOKOWY lub w stylach mu nadać właściwość blokową z tą klasą tworząc jakiś bardziej rozbudowany dymek winksmiley.jpg
wojteke
WIELKIE DZIĘKI yahoo.gif oczywiście dokładnie przeanalizowałem jak to się robi - dzięki za lekcję haha.gif
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.