image hover

Status
Niet open voor verdere reacties.

Annodompje

Gebruiker
Lid geworden
26 aug 2007
Berichten
60
Hallo,
Ik ben bezig met een site voor de winkel van mijn moeder, nu leek het ons mooi om de menu knoppen, als je er met je muis overheen gaat te laten oplichten, enfin de plaatjes gemaakt... In Internet explorer doet hij het perfect alleen zodra je in een andere browser wilt kijken gebeurt er iets raars met de knoppen. Kan iemand mij vertellen hoe ik dit kan oplossen?

Alvast bedankt!
 
Ik had m'n glazen bol even uitgeleend aan 'n paar anderen op 't forum hier, en die knurften hebben 'm gebroken. Dus heb ik nu geen glazen bol meer om te zien wat er gebeurt.
Oftewel: zonder code is hier niets van te zeggen. Gebruik je JavaScript of css? Wat bedoel je met 'iets raars'?
Het beste in 'n link naar de code ergens online, en anders graag de code hier even neerzetten.
 
Sorry mijn fout, Ik dacht dat ik de link erbij geplaatst had: www.bloemencentrumbinnenmaas.nl

Zo heb ik het gedeffinieerd tussen style tags
Code:
a.info:hover{Background:url('Image/infohover.png');}

En zo staat het dan in uitvoering
Code:
<a class="info" href="informatie.php">
<img src="Image/info.png" border="0" width="202" height="71"></a>

Het idee is dus dat het andere plaatje eroverheen/eronder/ervoor in de plaats komt zodat het nu lijkt of de letters gloeien, in IE doen ze dat dus ook mooi. In alle andere browsers doen ze het niet of lijkt het tweede plaatje (als je m hovert) eronder te komen ipv op dezelfde plaats.
 
Ik weet niet zeker of dit in één keer gaat werken, want er zitten nogal wat dingen verkeerd. Mooi effect trouwens, dat oplichten, heel origineel.

De soort fouten die er in je pagina zit, kan betekenen dat je heel veel opnieuw moet gaan doen. Daarom eerst even iets algemeen: je kunt 'n site het beste maken in Firefox, Google Chrome, Safari of Opera. Als hij daar goed in werkt, werkt hij meestal ook wel (min of meer) goed in IE. Omgekeerd vaak niet dus, zoals je ziet.
Firefox vind ik verreweg het handigst omdat die 'n ongelooflijke hoeveelheid uitbreidingen voor het maken van sites heeft.
Verder moet je heel vaak controleren in verschillende browsers en vooral je pagina heel erg vaak (echt heel erg vaak) door de validator halen op http://validator.w3.org/
Die validator had gelijk 'n enorme gil geslaakt vanwege 'n fout, en dan had je 'm gelijk kunnen verbeteren. Mogelijk kan die fout nu betekenen dat er straks niets meer past.
Voor css bestaat er trouwens ook 'n validator http://jigsaw.w3.org/css-validator/

* Algemene tip: gebruik in css alleen kleine letters. Er is geen standaard voor, sommige browsers kunnen verschil maken tussen hoofd- en kleine letters en andere niet. (Background zie ik staan in je code hier).

* En nog een: je schrijft de map Image met 'n hoofdletter. Beter is alleen kleine letters te gebruiken. Op Windows is er geen verschil, op de meeste servers wel, en dit is 'n eeuwige bron van fouten.

* Je hebt je style voor het doctype. Dat mag niet. De style moet binnen de <head> staan, dus na <head> en voor </head>. Omdat er iets voor het doctype staat, schiet Internet Explorer 7 in de zogenaamde quirks mode, waardoor het in die browser werkt. Ook IE 8 doet dat, dus ook in die browser werkt het.
Alleen: het werkt, maar het hoort niet te werken. Het werkt dus omdat die 'quirks mode' allerlei dingen fout doet, tegen de standaard in. Dat stamt nog uit de tijd van de browser-oorlog, waarin verschillende makers expres dingen verkeerd deden, zodat het niet bij de concurrent werkte.

* <style> moet zijn: <style type="text/cs">

* Voor ik het vergeet: 'n doorzichtige png werkt niet in IE 6. Dus daar moet je iets anders voor doen, of even op internet zoeken naar 'pngfix'. Dat is JavaScript om het werkend te krijgen in IE 6. Nu zie je alleen 'n groot wit vlak in IE 6 en 't hoveren zie je ook niet.

* Als je style binnen de <head> staat, gaat het doctype werken. Dat wordt nu genegeerd. Dat betekent o.a. dat allerlei maten totaal anders worden berekend. Het kan dus zijn dat je de hele lay-out opnieuw moet uitmeten. Toch is dit de enige manier, want zonder doctype krijg je gegarandeerd enorme verschillen tussen de verschillende browsers. Vandaar die validator: die ziet gelijk dat er iets voor het doctype staat en weigert gewoon verder nog iets te doen, dus je merkt die fout gelijk op, en niet pas na heel veel werk.

* Je hebt 'n strict doctype. Dat betekent dat 'n hele reeks tags zoals <center> niet gebruikt mogen worden. Je hebt twee keuzen:
1) Je gaat die dingen verwijderen. Maar dat is behoorlijk wat werk, want eigenlijk moet je ook die tabel dan weghalen en het op 'n andere manier gaan maken. Voordeel is dat dit minder werk is om te onderhouden en klaar is voor de toekomst. Het is ook veel beter toegankelijk voor bijvoorbeeld blinden, maar ook voor zoekmachines, want 'n zoekmachine is te vergelijken met 'n blinde.
2) Je gebruikt 'n ander doctype waarbij je wel <center> en zo mag gebruiken. De keuze is aan jou. Als je voor 1 kiest, kun je hier natuurlijk hulp krijgen.
Het andere doctype is
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

* Je knop is 'n <img>. Wat er bij hover moet komen is 'n background-image. Als het goed wordt uitgevoerd, blijft de <img> gewoon staan bij hoveren en zie je dus de background-image niet. De naam zegt het al: 'n background-image is 'n achtergrond en komt dus achter de inhoud (hier de <img) te staan. Oftewel: alle browsers doen het goed, behalve IE 7/8.

* Je moet de <img> veranderen in een background-image, en dan die backgroud-image vervangen bij hoveren:

HTML:
<a class="info" href="informatie.php" title="Meer informatie"></a>
Omdat er nu geen <img> meer staat is de title heel belangrijk. Anders zien blinden en zoekmachines helemaal geen tekst meer, want die hebben niets aan 'n background-image.

Bijbehorende css:
Code:
a.info {display: block; width: 202px; height: 71px; background: url(image/info.png);}
De border="0" kan vervallen.
Om 'n achtergrondplaatje te kunnen gebruiken, moet de <a> als blok-element worden weergegeven. Vandaar de display: block;. Dan kun je er breedte en hoogte aan geven. Dat moet, want 'n background-image vult alleen maar waar hij in staat.

Tweede stukje van de css:
Code:
a.info:hover {background:  url(image/infohover.png);)

repeat, scroll, enz. kunnen allemaal vervallen.

Als je geluk hebt verandert er niets of heel weinig met 'n doctype, maar dat moet je maar even uitproberen.

Er kan trouwens veel meer verbeterd worden, zoals alle css naar 1 apart bestand, maar als je dat wilt moet je 't maar even laten weten.
 
Bedankt voor de uitgebreide uitleg.

Ik heb druk al je aanwijzingen toegepast (op t moment alleen nog in www.bloemencentrumbinnenmaas.nl/header.php )

Nu stuit ik op een paar problemen.

*als ik de pagina door de validator haal krijg ik nog twee fouten
Line 36, Column 56: Attribute "HEIGHT" is not a valid attribute. Did you mean "height"?
HTML:
<table border="0" cellpadding="0" width="1000" height="161" background="image/zon2.png">

Line 36, Column 73: Attribute "BACKGROUND" is not a valid attribute. Did you mean "background"?
Code:
g="0" width="1000" height="161" background="image/zon2.png">

Waarom zouden zowel de hoogte als achtergrond geen eigenschap mogen zijn van een tabel? (het zelfde probleem had ik met bordercolor maar aangezien ik toch geen borders heb heb ik deze weg gehaald)

De linken werken nu goed in alle browsers, ze moeten alleen opnieuw uitgelijnd worden hierin het volgende probleem. horizontaal staan ze goed uitgelijnd maar verticaal zit er teveel ruimte tussen, ongeacht de hoogte die ik opgeef van de cellen blijven ze op deze afstand van elkaar staan. Is hier nog iets aan te doen?

Het zou denk ik heel netjes zijn als de css in een appart bestandje zou komen te staan al zou ik zelf niet zo goed weten hoe, doe ik dit net als ik met de header doe met include?
 
De hoogte is waarschijnlijk helemaal niet nodig bij de tabel, probeer maar 'ns zonder.
'n Achtergrond mag niet in 'n tabel. Dat was 'n uitbreiding van Microsoft, maar is niet volgens de standaard.
Vroeger - nou ja, tot 'n paar jaar geleden - had je maar één mogelijkheid om 'n lay-out te maken: 'n tabel. Maar 'n tabel is bedoeld voor gegevens als cijfers, of 'n kalender of zo, niet voor opmaak. Tegenwoordig heb je veel betere methoden voor opmaak.
Tegenwoordig wordt ook geprobeerd de inhoud (tekst e.d.) gescheiden te houden van de opmaak (kleurtjes, plaats en zo). De inhoud staat in de html, de opmaak in de css. O.a. om die twee redenen mag je niet in de html 'n achtergrond voor 'n tabel opnemen. Maar er is redding.
In je css mag het wel:
Code:
table {background: url(image/zon2.png);
(Moet je wel even 'n class aan je table geven, of 'n id, anders krijg elke table deze achtergrond).
Als je 'n tabel gebruikt voor lay-out moet je allerlei kunstgrepen toepassen om het op de goede plaats te krijgen. Een van die kunstgrepen is bij jou 'n <p> rondom de links. En 'n <p> heeft van zichzelf automatisch 'n marge aan boven- en onderkant.
Als je in je css opneemt:
Code:
table p {margin: 0;}
staan de knoppen dichter bij elkaar.
Eigenlijk is die <p> helemaal niet nodig, maar dan moet je vrij veel gaan veranderen. En aangezien je dat andere doctype hebt genomen neem ik aan dat je liever die tabel laat staan.

De css extern. Zolang je nog aan 'n pagina werkt, is het handig hem bovenaan de pagina te laten staan. Als 't dan af is, kopieer je de hele style precies zoals hij bovenaan de pagina staat. Zet hem in 'n bestand dat eindigt op .css (van Cascading Style Sheets). Alleen de <style type="text/css"> en </style> haal je weg.
Dan zet je in je head
HTML:
<link rel="stylesheet" type="text/css" href="/css/naam-van-stylesheet.css">
Dus inderdaad ongeveeer zoals 'n php include, want de style wordt ook bij elke pagina ingelezen. Alleen zie je die niet, want de style zorgt alleen voor de opmaak.

Het grote voordeel van 'n style is dat je vaak maar 1 pagina hoeft te maken. Dat is bij jou ook zo, zo te zien. Jouw pagina's zijn vrijwel hetzelfde (wat opmaak betreft).
Als je nu besluit om de tekst rood te maken, dan zet je gewoon in je stylesheet color: red en hoppa: op alle pagina's is de kleur rood.
Knoppen twee keer zo groot? Gewoon de maat aanpassen op 1 plek in 1 bestand.

Om er dus echt voordeel van te hebben, moet je zoveel mogelijk opmaak naar je css overhevelen. Zo staat er bij jou bijvoorbeeld op heel veel plaatsen
HTML:
<font face="Georgia" color="#F2890D"

Als je nou in de css opneemt
Code:
body {font-family: Georgia; color: #F2890D;}
is dit in een keer zo overal op elke pagina waaraan je css is gekoppeld. De enkele <p> of zo die eventueel 'n afwijkende kleur moet krijgen, geef je 'n class of id en dan zoiets:
p.belangrijk {color: red;}}
Zo kun je heel veel combineren. Dit is trouwens ook een van de dingen die iets kunnen helpen bij het hoger komen in 'n zoekmachine, en bij het toegankelijk maken van de pagina voor speciale programma's voor blinden en zo.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan