Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rozwijane menu w css i chowanie się rozwiniętego menu pod zawartość strony
Forum PHP.pl > Forum > Po stronie przeglądarki > CSS
MOniToR
Strona http://www.goprojects20080129.dev.mamboassistance.com/

Znalazłem proste drop down menu css, wszystko ładnie śmiga tylko dla przykładu jak się najedzie na obrazek, który jest jako pierwszy element menu ucina rozwinięte menu, od momentu gdy nachodzi na cześć z zawartością strony. Kombinowałem z z-index ale nie przyniosło to żadnego efektu :/ Często mi się tak zdarzało w innych projektach, zazwyczaj jednak rezygnowałem z rozwijanego menu ale w tym przypadku tak zrobić nie mogę :/ proszę o pomoc...
CSS:
  1. #menu {
  2. background: url(../images/menu.png) no-repeat top left;
  3. width:524px;
  4. height:50px;
  5. text-align:left;
  6. float:right;
  7. z-index:400;
  8. }
  9.  
  10. #cssdropdown, #cssdropdown ul {
  11. padding: 0;
  12. margin: 0;
  13. list-style: none;
  14. }
  15.  
  16. #cssdropdown li {
  17. float: left;
  18. position: relative;
  19. }
  20.  
  21. .mainitems{
  22. border: 1px solid black;
  23. background-color: #562f2c;
  24. }
  25.  
  26. .mainitems a{
  27. margin-left: 6px;
  28. margin-right: 8px;
  29. text-decoration: none;
  30.  
  31. }
  32.  
  33. .subuls{
  34. display: none;
  35. width: 10em;
  36. position: absolute;
  37. top: 1.2em;
  38. left: 0;
  39. background-color: #562f2c;
  40. border: 1px solid black;
  41. }
  42.  
  43. .subuls li{
  44. width: 100%;
  45. }
  46.  
  47. .subuls li a{
  48. text-decoration: underline;
  49. }
  50.  
  51. #cssdropdown li>ul { /* to override top and left in browsers other than IE, which will position to the top right of the containing li, rather than bottom left */
  52. top: auto;
  53. left: auto;
  54. }
  55.  
  56. #cssdropdown li:hover ul, li.over ul { /* lists nested under hovered list items */
  57. display: block;
  58. }
  59.  
  60. #restofcontent { /*wrap rest of content of the page inside this div*/
  61. clear: left;
  62. }

HTML:
  1. <div id="menu"><ul id="cssdropdown">
  2.  
  3. <li class="mainitems">
  4. <a href="http://www.cssdrive.com"><img src="templates/mbpc/images/menu_aboutus.png" alt="" height="20" border="0" /></a>
  5. <ul class="subuls">
  6. <li><a href="">Gordon Mac</a></li>
  7. <li><a href="">Juiced Thoughts</a></li>
  8. <li><a href="">The Daily Flight</a></li>
  9. <li><a href="">GrapeFruit</a></li>
  10. </ul>
  11. </li>
  12.  
  13. <li class="mainitems">
  14. <a href="http://www.cssdrive.com/index.php/examples/">CSS Examples</a>
  15. <ul class="subuls" style="width: 15em">
  16. <li><a href="">CSS2 Generated Content</a></li>
  17. <li><a href="">Custom scrollbar colors</a></li>
  18. <li><a href="">Markerless and "no indent" Lists</a></li>
  19. </ul>
  20. </li>
  21. <li class="mainitems">
  22. <a href="http://www.cssdrive.com/index.php/examples/">CSS Examples</a>
  23. <ul class="subuls" style="width: 15em">
  24. <li><a href="">CSS2 Generated Content</a></li>
  25. <li><a href="">Custom scrollbar colors</a></li>
  26. <li><a href="">Markerless and "no indent" Lists</a></li>
  27. </ul>
  28. </li>
  29. <li class="mainitems">
  30. <a href="http://www.cssdrive.com/index.php/examples/">CSS Examples</a>
  31. <ul class="subuls" style="width: 15em">
  32. <li><a href="">CSS2 Generated Content</a></li>
  33. <li><a href="">Custom scrollbar colors</a></li>
  34. <li><a href="">Markerless and "no indent" Lists</a></li>
  35. </ul>
  36. </li>
  37. <li class="mainitems">
  38. <a href="http://www.cssdrive.com/index.php/examples/">CSS Examples</a>
  39. <ul class="subuls" style="width: 15em">
  40. <li><a href="">CSS2 Generated Content</a></li>
  41. <li><a href="">Custom scrollbar colors</a></li>
  42. <li><a href="">Markerless and "no indent" Lists</a></li>
  43. </ul>
  44. </li>
  45. </ul>
  46.  
  47. <div id="restofcontent">
  48. <br />
  49.  
  50. </div></div>
nevt
oddziel w kodzie i spozycjonuj menu i resztę, czyli w htlm:
  1. <div id="menu">
  2. ...
  3. </div>
  4. <div id="restofcontent">
  5. ...
  6. </div>

a w css dodaj:
Kod
#menu
{ position: relative; z-index: 10; overflow: visible; }

#restofcontent
{ position: relative; z-index: 1; top: -100px; }
//top ustaw tak żeby ładnie "podeszło" pod menu...

i powinno być ok. chyba że się gdzieś pomyliłem, pisałem z pamięci...
MOniToR
możesz mi powiedzieć o masz na myśli mówiąc oddziel w kodzie html?
nevt
a nie widzisz co napisałem? w twoim kodzie div#restofcontent zawiera się wewnątrz div#menu, a w moim kodzie są rozdzielone... (wg DOM: u ciebie są jak rodzic - dziecko, a u mnie jak rodzeństwo.)

dość istotne, bo z-index dotyczy kolejności renderowania elementów na tym samym poziomie drzewa DOM...
MOniToR
tylko, że template jest tak zrobiony, że content(zawartość) jest pierwsza w kodzie html i menu jest niżej i chyba przez to dalej nie działa tak jak powinno bo wprowadziłem zmiany o których mówiłeś :/

  1. <div id="minHeight"></div>
  2. <div id="outer">
  3. <div id="outer2">
  4. <div id="outer3">
  5. <div id="centrecontent">
  6. <!--centre content goes here -->
  7. <div id="main">
  8. <div id="main_start"></div>
  9. <div id="main_content"><div class="txt"><?php mospathway() ?>
  10. <?php mosMainBody(); ?>
  11. <?php mosLoadModules('bottom');?></div></div>
  12. <div id="main_end"></div>
  13. </div>
  14. </div>
  15. <div id="right">
  16. <div id="right_start"></div>
  17. <div id="right_main"><div class="txt"><?php mosLoadModules('right');?></div></div>
  18. <div id="right_end"></div>
  19. </div>
  20. <div id="clearfooter"></div>
  21. <!-- ie needs this -->
  22. <div id="header">
  23. <div id="top"><div id="topmenu"><?php mosLoadModules('top');?></div></div>
  24. <div id="menu_leftside"></div>
  25. <div id="menu">
  26.  
  27. TUTAJ ZAWARTOŚĆ MENU
  28.  
  29. <div id="restofcontent">
  30. <br />
  31.  
  32. </div><?php mosLoadModules('user3');?> </div>
  33. </div>
  34. </div>
  35. </div>
  36. <div id="shadow_main_bottom"></div>
  37. <div id="footer">
  38. <div id="user1"><div id="user1_a"><?php mosLoadModules('user1');?> </div></div>
  39. <div id="user2"><div id="user2_a"><?php mosLoadModules('user2');?> </div></div>
  40. <?php mosLoadModules('footer');?>
  41. </div>
  42. </div>
  43. <!-- end outer div -->
  44. </body>
  45. </html>
nevt
to zmień template - w czym kłopot ? przesuwasz </div> z linijki zaznaczonej XXX do linijki >>>
  1. TUTAJ ZAWARTOŚĆ MENU
  2.  
  3. >>>
  4. <div id="restofcontent">
  5. <br />
  6.  
  7. </div><?php mosLoadModules('user3');?> </div>
  8. </div>
  9. XXX </div>

i będzie ok.
MOniToR
Zrobiłem tak i dalej nic:/

MI się wydaje, że to może przez to, że div z zawartością jest wyżej, przez co jest interpretowany jako ważniejszy i dlatego tak sie dzieje...

http://www.goprojects20080129.dev.mamboass...pc/css/menu.css
http://www.goprojects20080129.dev.mamboass...emplate_css.css
http://www.goprojects20080129.dev.mamboass...late_ie_css.css

Teraz to wygląda tak:

  1. <div id="minHeight"></div>
  2. <div id="outer">
  3. <div id="outer2">
  4. <div id="outer3">
  5. <div id="centrecontent">
  6. <!--centre content goes here -->
  7. <div id="main">
  8. <div id="main_start"></div>
  9. <div id="main_content"><div class="txt"><?php mospathway() ?>
  10. <?php mosMainBody(); ?>
  11. <?php mosLoadModules('bottom');?></div></div>
  12. <div id="main_end"></div>
  13. </div>
  14. </div>
  15. <div id="right">
  16. <div id="right_start"></div>
  17. <div id="right_main"><div class="txt"><?php mosLoadModules('right');?></div></div>
  18. <div id="right_end"></div>
  19. </div>
  20. <div id="clearfooter"></div>
  21. <!-- ie needs this -->
  22. <div id="header">
  23. <div id="top"><div id="topmenu"><?php mosLoadModules('top');?></div></div>
  24. <div id="menu_leftside"></div>
  25. <div id="menu">
  26.  
  27. TUTAJ MENU
  28.  
  29. </div>
  30. <div id="restofcontent">
  31. <br />
  32. </div>
  33.  
  34. </div><?php mosLoadModules('user3');?> </div>
  35. </div>
  36.  
  37. <div id="shadow_main_bottom"></div>
  38. <div id="footer_shadow_top"></div>
  39. <div id="footer">
  40. <div id="bottom">
  41. <div id="bottom_start"></div>
  42. <div id="bottom_main"><div id="user1_a"><?php mosLoadModules('user1');?> </div>
  43. </div>
  44. <div id="bottom_end"></div>
  45. </div>
  46. <div id="bottom2">
  47. <div id="bottom_start"></div>
  48. <div id="bottom_main"><div id="user1_a"><?php mosLoadModules('user2');?> </div>
  49. </div>
  50. <div id="bottom_end"></div>
  51. </div>
  52. <?php mosLoadModules('footer');?>
  53. </div>
  54. </div>
  55. <!-- end outer div -->
  56. </body>

Lub live - www.goprojects20080129.dev.mamboassistance.com

Możesz poradzić coś jeszcze? smile.gif
nevt
kod który ci nie działa - to nie ten sam kod który pokazujesz tu na forum - wystaw gdzieś tą stronkę - wtedy będzie można popatrzeć co naprawdę nie trybi...

a elementy renderowane są przez przeglądarkę w takiej kolejności:

napierw rodzice, potem dzieci (bez względu na z-index) - dzieci są zawsze "nad" rodzicami
bracia według z-index - większy z-index jest "nad" mniejszym
jeśli bracia nie mają z-index (albo mają jednakowe) to według kolejności wystąpienia w kodzie - element później zdefiniowany jest "nad" wcześniej zdefiniowanym

innych reguł nie ma (nie licząc flasha, ramek czy innych plugin'ów)

EDIT:
coś ty wykombinował questionmark.gif exclamation.gif
  1. <div id="restofcontent">
  2. <br />
  3. </div>


W <div id="restofcontent"> MUSISZ ZAWRZEć CAŁĄ POZOSTAŁĄ ZAWARTOŚć STRONY exclamation.gif!
MOniToR
Strona to jest Joomla. Skrypt wziąłem stad http://www.cssdrive.com/index.php/examples...drop_down_menu/

Jaki kod potrzebujesz? Mi się wydaje, że zamieściłem cały odpowiedzialny za ten skrypt...

Edit:

No tak ale jak ja mam o zrobić na takim template jaki mam? Gdybym miał to zrobione tak, że najpierw jest menu a później zawartość to by było łatwo ale na tym to nie wiem...
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.