Avatar billede nybroe Nybegynder
16. februar 2005 - 20:01 Der er 14 kommentarer og
1 løsning

Træmenu i CSS

Hvordan laver man en træmenu, der er baseret på CSS?
Avatar billede olebole Juniormester
16. februar 2005 - 20:06 #1
<ole>

1. Browserkrav?
2. Udseende?
3. Features?

/mvh
</bole>
Avatar billede razser Nybegynder
16. februar 2005 - 20:09 #2
Du skal bruge disse 3 filer:

menuExpandable.html
menuExpandable.js
menuExpandable.css

Find blot nogle + og - ikoner et eller andet sted...

------menuExpandable.html--------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Expandable Menu</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css" media="screen">@import url("css/menuExpandable.css");</style>
    <script type="text/javascript" src="js/menuExpandable.js"></script>
    <script type="text/javascript">
    <!--
        window.onload = function() {
            initializeMenu("productsMenu", "productsActuator");
            initializeMenu("newPhonesMenu", "newPhonesActuator");
            initializeMenu("compareMenu", "compareActuator");
        }
    //-->
    </script>
  </head>
  <body>
    <div id="mainMenu">
      <ul id="menuList">
        <li class="menubar">
          <a href="#" id="productsActuator" class="actuator">Phones</a>
          <ul id="productsMenu" class="menu">
            <li>
              <a href="#" id="newPhonesActuator" class="actuator">New Phones</a>
              <ul id="newPhonesMenu" class="submenu">
                <li><a href="#">9290</a></li>
                <li><a href="#">8390</a></li>
                <li><a href="#">8290</a></li>
                <li><a href="#">8270</a></li>
              </ul>
            </li>
            <li>
              <a href="#" id="compareActuator" class="actuator">Compare</a>
              <ul id="compareMenu" class="submenu">
                <li><a href="#">All Phones</a></li>
                <li><a href="#">Service Provider</a></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </div>
  </body>
</html>

------------menuExpandable.js----------------

if (!document.getElementById)
    document.getElementById = function() { return null; }

function initializeMenu(menuId, actuatorId) {
    var menu = document.getElementById(menuId);
    var actuator = document.getElementById(actuatorId);

    if (menu == null || actuator == null) return;

    //if (window.opera) return; //

    actuator.parentNode.style.backgroundImage = "url(images/plus.gif)";
    actuator.onclick = function() {
        var display = menu.style.display;
        this.parentNode.style.backgroundImage =
            (display == "block") ? "url(images/plus.gif)" : "url(images/minus.gif)";
           
        menu.style.display = (display == "block") ? "none" : "block";

        return false;
    }
}



---------------------menuExpandable.css--------------------
body {
  font-family: verdana, helvetica, arial, sans-serif;
}

#mainMenu {
  background-color: #EEE;
  border: 1px solid #CCC;
  color: #000;
  width: 203px;
}

#menuList {
  margin: 0px;
  padding: 10px 0px 10px 15px;
}

li.menubar {
  background: url(../images/plus.gif) no-repeat 0em 0.3em;
  font-size: 12px;
  line-height: 1.5em;
  list-style: none outside;
}

.menu, .submenu {
  display: none;
  margin-left: 15px;
  padding: 0px;
}

.menu li, .submenu li {
  background: url(../images/square.gif) no-repeat 0em 0.3em;
  list-style: none outside;
}

a.actuator {
  background-color: transparent;
  color: #000;
  font-size: 12px;
  padding-left: 15px;
  text-decoration: none;
}

a.actuator:hover {
  text-decoration: underline;
}

.menu li a, .submenu li a {
  background-color: transparent;
  color: #000;
  font-size: 12px;
  padding-left: 15px;
  text-decoration: none;
}

.menu li a:hover, submenu li a:hover {
  /*border-bottom: 1px dashed #000;*/
  text-decoration: underline;
}

span.key {
  text-decoration: underline;
}
Avatar billede razser Nybegynder
16. februar 2005 - 20:11 #3
Ovenstående skulle virke i standard-baserede browsere.....dvs. alle nye....
Avatar billede olebole Juniormester
16. februar 2005 - 20:16 #4
razser >> Det er da ikke CSS  :)
Avatar billede olebole Juniormester
16. februar 2005 - 20:25 #5
- og derudover er det langtfra en fordel at skrive XHTML. HTML4.01-Strict performer langt bedre, som WWW ser ud idag  ;o)
Avatar billede nybroe Nybegynder
16. februar 2005 - 20:29 #6
Den du har Razser er faktisk helt fin til mit behov. Det gør ikke noget med javascripten, sålænge det virker i de fleste browsere. Så jeg takker. Men Ole hvordan vil du ellers lave den?
Avatar billede olebole Juniormester
16. februar 2005 - 20:30 #7
Der er masser af mulige løsninger på en træmenu ... det kommer helt anpå de tre spørgsmål, jeg indledte med at stille  :)
Avatar billede nybroe Nybegynder
16. februar 2005 - 20:40 #8
1) Alle nye browsere
2) Den kan fx. se ud som Razsers
3) ?? er de ikke meget ens?

Men kan man lave en menu helt uden javascript - sådan ved nærmere eftertanke
Avatar billede razser Nybegynder
16. februar 2005 - 21:01 #9
Jeg "lytter" lidt med fra sidelinien... Det med XHTML er der delte meninger om, men nybroe - du bør fokusere på målgruppen, ellers kan du snilt bruge Ole's HTML4.01-Strict.... det har jeg da ingen problemer med.

Og Ole - kan man som nybro spørger lave en træmen helt uden CSS??
Avatar billede olebole Juniormester
16. februar 2005 - 21:14 #10
razser >> Ja, der er folk, der ved noget om web-kodning - og folk, der ikke gør. Derfor er der også delte meninger om XHTML. Det er ikke noget, man seriøst kan have forskellige holdninger til - den ene opfattelse bygger på viden og er altså ikke en 'holdning' ... den anden på tro og er således blot en 'holdning'.

Kender man til WWW-teknologierne - og ved hvad W3C skriver om emnet - er der ikke plads til tvivl ... XHTML performer dårligere end HTML4.01-Strict.
Hvis du mener at vide noget andet, må du meget gerne fremføre dem her - for så er der noget både W3C og jeg skal have lært  :)

Nu bliver jeg lidt i tvivl. Ønsker man en menu, hvis funktionalitet udelukkende bygger på CSS - eller helt uden CSS?
Avatar billede razser Nybegynder
16. februar 2005 - 21:20 #11
Undskyld helt uden javascript :)
Avatar billede olebole Juniormester
17. februar 2005 - 00:41 #12
Den funktionallitet kan ikke eftergøres i ren CSS  :)
Avatar billede nybroe Nybegynder
24. februar 2005 - 01:28 #13
Hej igen razser. Jeg har en anden opgave med noget css og javascript som jeg er gået lidt i stå med. Hvis du er interesseret vil jeg gerne give 150 point, hvis du kan løse den. Det er lidt besværligt at indsætte alle filene her, så jeg kan evt. sende dem på en mail.
Avatar billede roenving Novice
24. februar 2005 - 02:04 #14
>>nybroe

Kender du http://www.eksperten.dk/regler.phtml §§ 2.1.12 og 13 ?-)
Avatar billede nybroe Nybegynder
24. februar 2005 - 09:59 #15
jo, hvis svaret ikke kommer på her gives ikke points. Men man må vel gerne udveksle mails.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester