div button ingedrukt status

Status
Niet open voor verdere reacties.

nl18663

Gebruiker
Lid geworden
19 dec 2007
Berichten
156
Hallo en nog de beste wensen voor iedereen!

ik heb een vraagje met betrekking tot het veranderen van CSS om een plaatje te manupileren als roll over en visited
wat ik op dit moment heb is het volgende, ik heb een plaatje (button) van 120x20px die ik dubbel heb gemaakt dus totaal één plaatje van 120x40px.
in een div heb ik een <a href=> staan met als background dit plaatje left top
nu heb ik een manier om de hover te doen dat ik in CSS left bottom voor de background-position verander.
wat ik nu wil is als iemand op een divlink klikt dat deze dan geweizigd blijft.
ik heb al vanalles geprobeert om in de content (een php file) een if statemant te gebruiken met de opgehaalde pagina, maar ik kom er niet verder mee.

alvast bedankt!

Hans

PHP:
<?php
// CSS code voor de aangemaakte pagina's die in de linker menubalk komen te staan.
		$sql = "SELECT naam, buttonlink
        FROM pagina";
        $db_css = get_db_info($sql);
        while($css = mysql_fetch_array($db_css)) {
          echo "#{$css["naam"]} { \n";
					echo "\t height: 20px; \n";
					echo "\t width: 120px; \n";
					echo "\t margin-right: auto; \n";
					echo "\t margin-left: auto; \n";
					echo "} \n";
					echo "#{$css["naam"]} a:link,#{$css["naam"]} a:visited { \n";
					echo "\t text-ident: -1000em; \n";
					echo "\t display: block; \n";
					echo "\t background: url({$css["buttonlink"]}) no-repeat left top; \n";
					echo "\t height: 20px; \n";
					echo "\t width: 120px; \n";
					echo "} \n";
					echo "#{$css["naam"]} a:hover,#{$css["naam"]} a:active { \n";
					echo "\t background-position: left bottom; \n";
					echo "\t border: none \n";
					echo "} \n";
        }
      ?>


PHP:
<div id="menuDiv">
    <?php
      $sql = "SELECT naam, volgorde, zichtbaar, id
              FROM pagina
              WHERE zichtbaar = 1
              ORDER BY volgorde ASC";
      $links = get_db_info($sql);
      while($link = mysql_fetch_array($links)) {
        echo "<div id=\"{$link["naam"]}\"><a ";
        if($link["id"] == $page_id ){
          echo "class=\"a:visited\"";
        }
        echo " href=\"index.php?page_id=" . urlencode($link["id"]) . "\" title=\"{$link["naam"]}\"></a></div>";
      }
      ?>
</div>
 
Volgens mij zit de fout hem hierin:

PHP:
 echo "class=\"a:visited\"";

Je kunt toch zo niet een link als visited zetten? Probeer het eens met aparte class zou ik zeggen.
 
ik heb nu vanalles geprobeert en ik merk dat hier mijn kennis te kort schiet. en je hebt gelijk op deze manier kun je een pseudoselector niet gebruiken.(beetje stom van me)
 
:p Ja beetje stom wel maar wel begrijpelijk, maar werkt het nu wel? Anders wil ik me er ook nog wel eens in verdiepen en zien of ik tot een oplossing kan komen.
 
Hoi nl18663,
Ik heb het gevoel dat het allemaal veel eenvoudiger kan. Het gaat toch om een menuknop die normaal met hoveren de ingedrukt-status krijgt, maar die bij een klik op de button ingedrukt moet blijven staan op de pagina van keuze? Kan met simpele css!

Monteer op elke pagina een andere class in de body-tag:
HTML:
<body class="home">
<body class="pagina-01"> <!-- of een betere roepnaam -->
<body class="pagina-02">
enz. t/m
<body class="pagina-99">
In je menu zet je bij elk menu-item een id met voor het gemak dezelfde roepnaam:
HTML:
<ul id="menu">
   <li><a id="home" href="index.html">Home</a></li>
   <li><a id="pagina-01" href="pagina-01.htm">Pagina 1</a></li>
   <li><a id="pagina-02" href="pagina-02.htm">Pagina 2</a></li>
   enz. t/m
   <li><a id="pagina-99" href="pagina-99.htm">Pagina 99</a></li>
</ul>
In je css had je al iets als:
Code:
[FONT="Courier New"][SIZE="2"]#menu a { 
   background: url(button.gif); /* = staat automatisch op: left top */
   }[/SIZE][/FONT]
en
[FONT="Courier New"][SIZE="2"]#menu a:hover { 
   background-position: left bottom;
   }[/SIZE][/FONT]
Daar komt nu bij:
Code:
[FONT="Courier New"][SIZE="2"].home #home a,
.pagina-01 #pagina-01 a,
.pagina-02 #pagina-02 a,[/SIZE][/FONT]
enz. t/m
[FONT="Courier New"][SIZE="2"].pagina-99 #pagina-99 a { /* de laatste geen komma */
   background-position: left bottom;
   cursor: default; /* geen handje maar pijltje, want je bent er toch al */ 
   }[/SIZE][/FONT]
Betekent: alléén als de link van het menu-item #home wordt voorafgegaan in de html door ergens een class="home", dan wordt die knop ingedrukt getoond (en anders alleen bij hoveren). En dat voorafgaan gebeurt natuurlijk alleen op de home-pagina, want dat is de enige die "ergens" (dus in de body-tag) de class="home" heeft staan.
En alléén als de link van het menu-item #pagina-01 wordt voorafgegaan in de html door ergens een class="pagina-01", dan wordt die knop ingedrukt getoond. En hier dus: alleen op de pagina-01 pagina.
Enz.
D.w.o.z. (dat wil ook zeggen): het menu is op elke pagina hetzelfde!
Nieuwe pagina? Nieuwe classname / id-name; classname in de body-tag van de nieuwe pagina, nieuwe pagina met id-name in het menu erbij, en 1 regeltje in het stylesheet toevoegen: .nieuwepagina #nieuwepagina a.
Klaar! :)

Met vriendelijke groet,
CSShunter

PS Voorbeeld van deze truc in werking bv. hier (maar dan met de kleurtjes + een achtergrondfiguur).
 
Laatst bewerkt:
Hoi CSSHunter,

dat is idd een goed idee, ik heb alleen mijn pagina dynamisch gemaakt met php.
ik heb maar een pagina index.php en die trekt alle inhoud uit een database aan de hand van $_GET dus in de url index.php?page_id=...
maar ik denk dat als ik dat gewoon op deze pagina implementeer dat het zou moeten werken! top en bedankt voor je support.

Hans
 
Hoi Hans,
Ja, naderhand zag ik pas dat elke pagina dynamisch wordt aangemaakt. In principe zou je dan op elke pagina alleen de classnaam van de body-tag er óók dynamisch in hoeven te hangen, want al het andere is identiek.

Met vriendelijke groet,
CSShunter

PS: in regel 14 van je eerste codeblokje hierboven staat een tikfoutje:
echo "\t text-ident: -1000em; \n";
ipv
echo "\t text-indent: -1000em; \n";
Dan blijft je onzichtbare tekst zichtbaar ipv onzichtbaar. ;)
 
Laatst bewerkt:
het is opgelost door het met een class te doen. tnx voor de support en het meedenken.
krijg er langzaam hoofdpijn van ;-)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan