positie van laag in dreamweaver

Status
Niet open voor verdere reacties.

sandra72

Gebruiker
Lid geworden
27 feb 2011
Berichten
7
hoe kan het dat wanneer je de positie van een laag in beide pagina's op dezelfde hoogte insteld, de browser de ene pagina anders weergeeft dan de andere.
de afbeelding wordt hoger weergegeven in de browser.
weet iemand hier een oplossing voor?
en is het ook mogelijk om de lagen vast te zetten in een pagina, aan de achtergrondafbeelding gelinkt?
zodat wanneer je de achtergrondafbeelding centreert de lagen meebewegen met de afbeelding in de browser?
 
Hoi Sandra,
Voor de eerste vraag is dat moeilijk in het algemeen te zeggen: er is op de een of andere manier toch iets dat de pagina's verschillend maakt. Wat dat kan zijn, hangt helemaal af van de gebruikte html en css.
Met een link naar twee (test-)pagina's (met die verschillende posities) kan waarschijnlijk wel een richting voor de oplossing gegeven worden.

Bij de tweede vraag: een achtergrond-afbeelding zit altijd vast aan een container (een <div> bijvoorbeeld, en ook de body kan een achtergrond-afbeelding hebben). Als de container beweegt, gaat de achtergrond daarin mee. Dus niet omgekeerd!
Een gecentreerde laag centreert dus ook het achtergrond-img dat er in zit.
En ook hier: een online (test-)voorbeeld kan wonderen doen!

Met vriendelijke groet,
CSShunter
 
Hoi csshunter.
op -weggehaald- staat nu een test.
ik heb weer een nieuw probleem, want de achtergrondafbeelding zie ik niet, terwijl je die met preview in browser wel ziet.
kan jij zien wat er fout gaat met uploaden of ergens anders? ik ben geen dreamweaver kenner, dan weet je dat vast..;)
groetjes,
sandra
 
Laatst bewerkt door een moderator:
Hoi Sandra,
de achtergrondafbeelding zie ik niet
Ik ook niet!
Waarom niet? De achtergrond-afbeelding heet "-weggehaald-/website-110%.jpg", maar in een naam van een webmap of webbestand mag niet zomaar een % gebruikt worden.
De server geeft dan ook bij aanvraag van de -weggehaald-/website-110%.jpg een Error: een "bad request" = een verboden verzoek.
  • Een % in een URL heeft namelijk een speciale betekenis: dit betekent dat erna twee cijfers (of een letter en een cijfer) komen die samen met het %-teken een speciaal letterteken betekenen. Speciale lettertekens (bv. een spatie, of een accent-letter) mogen ook niet zomaar in een bestandsnaam, die krijgen zo'n %.. code.
  • Bijvoorbeeld: een spatie in een map- of bestandsnaam op de server moet als %20 gecodeerd worden, een * moet %2a worden, enz.
Het beste is daarom, ook vanwege de leesbaarheid, helemaal geen speciale tekens te gebruiken in map- of bestandsnamen! (een streepje - of onderstreepje _ is wel toegestaan) :)

Ik heb het even in een tabel (een "URL Encode Code Chart") opgezocht, en jouw afbeelding zou in de html-code eigenlijk "-weggehaald-/website-110%25.jpg" moeten heten om getoond te kunnen worden, want %25 is de code voor het %-teken.
  • En kijk eens: -weggehaald-/website-110%25.jpg :d

  • Dreamweaver is kennelijk zo vriendelijk geweest bij het uploaden uit zichzelf even het ongeldige %-teken te veranderen in de geldige %25 code.
  • Maar tegelijkertijd heeft DW verzuimd, dit aan te passen in de html-code, zodat het bestand nooit op de server gevonden kan worden!
Kortom, ik zou het bestand "-weggehaald-/website-110pct.jpg" noemen, dan heb je nergens last van.

==============

Over je oorspronkelijke vraag van het verschuiven in hoogte: dit zie ik bij de afbeeldingen aan de rechterkant niet gebeuren. Wel begint de tekst ernaast niet steeds op dezelfde hoogte.
Dat zal ermee te maken hebben, dat je op elke pagina opnieuw het tekstblok een positie geeft, en niet steeds op dezelfde manier.

Iets anders is, dat de site op dit moment is opgebouwd met containers die allemaal een Absolute Positie hebben: absoluut ten opzichte van de linkerbovenhoek. De "achtergrond-afbeelding" voor de pagina's is daarbij gemonteerd als voorgrond-image in een eigen <div> container ("laag").
Al die AP-div's hebben o.a. als nadeel, dat de verschillende blokken niet t.o.v. elkaar kunnen bewegen als dat nodig is. En het is bv. nodig als iemand in z'n/d'r browser het letterformaat gaat aanpassen. Bij vergroting om het goed te kunnen lezen schuiven de blokken dan over elkaar heen:

ap-nadeel.png

Punt van aandacht hierbij: de lettergrootte is opgegeven als "fixed font size", in pixels. Bezoekers met Internet Explorer kunnen dan niet eens de lettergrootte aanpassen als zij dat nodig hebben (via menu Beeld > Tekengrootte... > Groter). Zij kunnen wel op de pagina als geheel inzoomen, maar dan verdwijnt een deel van de pagina buiten beeld, en moet men horizontaal heen en weer scrollen om alles te kunnen lezen.
Oplossing hiervoor is: de font-size opgeven in de relatieve em-eenheid.

Verder is het formaat van de pagina geweldig groot: die is (o.a. door de achtergrond-afbeelding op de voorgrond) 1333px breed. Op een beeldscherm van 1024*768px (een nog vaak gebruikte resolutie) krijgt men dan maar een erg klein deel van de site te zien:

pv-screenshot.png

En zelfs op mijn monitor van 1280*1024px komt de pagina er niet helemaal op!

=====

En de tweede vraag:
Is het ook mogelijk om de lagen vast te zetten in een pagina, aan de achtergrondafbeelding gelinkt? Zodat wanneer je de achtergrondafbeelding centreert de lagen meebewegen met de afbeelding in de browser?
Ja, d.w.z. je kan de achtergrondafbeelding centreren, en los daarvan de pagina met z'n hele inhoud aan <div> containers ook centreren.
Dan blijven ze mooi op elkaar passen - zolang de achtergrondafbeelding maar niet de verticale grenzen van de <div>'s in tekening brengt, want dan is er het risico dat een tekst-div uit de rand van de achtergrond ontsnapt.
  • In dat geval kan je beter een onderrand aan als achtergrondfiguur aan zo'n <div> zelf vastknopen.
Met vriendelijke groet,
CSShunter
__________
PS: ik ben ook geen Dreamweaver-kenner, ik codeer "op de hand" (direct in de broncode). Dus hoe je precies DW instructies in de ontwerp-weergave moet geven, weet ik niet.
- Dan weet je dat vast. ;) ;)
Ik ken wel het bestaan van een uitgebreide online DW-handleiding:
 
Laatst bewerkt:
Hoi csshunter,
dank voor je uitgebreide antwoord!!
ik ga er vanavond eens naar kijken en dingen aanpassen.
groetjes,
sandra
 
Hoi csshunter,
ben ik weer.
heb de testsite opnieuw geupload op -weggehaald-.
Het lijkt allemaal te werken, afbeelding is zichtbaar, links werken.
Maar nu zie ik bij de button -weggehaald- soms een leeg kader verschijnen met een dun zwart randje..en als je met de cursor eroverheen gaat komt de button
weer tevoorschijn.
Enig idee waar dat aan zou kunnen liggen?
En ik heb geprobeerd om de site te centreren, heb wat tutorials gevonden, maar voor een html/css leek is het niet zo eenvoudig;)
ik heb begrepen dat je een div #container moet maken in css, met daarin de max breedte en marges links en rechts op auto moet zetten, en dat je daar alles aan hangt/alle andere css styles enzo.
in mijn huidige site zie ik niet goed waar ik die codes dan zou moeten plaatsen, volgens mij staat er best veel rommel in of lijkt dat maar zo?
Ik hoor wel of je me kan helpen hiermee, alleen als je tijd hebt hoor..
alvast bedankt!
Sandra
 
Laatst bewerkt door een moderator:
Hoi Sandra,
... bij de button -weggehaald- soms een leeg kader ...
Dat zie ik bij mij niet. - Op welke pagina gebeurt dat, en in welke browser? En gebeurt het altijd, of soms wel / soms niet?

... geprobeerd om de site te centreren ... niet zo eenvoudig ...
Nou, het kunstje daarvoor is op zich niet zo moeilijk. Er zit alleen een voorwaarde aan vast.
Dat is, dat het midden van de pagina heen en weer moet kunnen bewegen, als het scherm op een andere breedte staat.
Maar ...
... in jouw opzet hebben alle <div>'s een absolute positie gekregen, en kunnen ze niet bewegen: ze zitten spijkervast (in afstand tot de linkerbovenhoek). :rolleyes:
Dan gaat het wel goed bij de ene resolutie waarin je de pagina hebt gebouwd, maar niet in alle andere beeldschermformaten.

Dus gaan we afstappen van die absolute posities, en de pagina helemaal opnieuw opbouwen! :)
Stap 1: de basis-html
Dit is de hoofdindeling van de pagina-code. Je neemt een lege pagina, gaat naar de code-weergave, daar wis je alles, en dan plak je er in de regeltjes:
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" lang="nl" xml:lang="nl">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>test 1 :: weggehaald</title>

	<style type="text/css">
	/* nog in te vullen */
	</style>
</head>

<body>
	(body)
</body>
</html>
Opslaan, uploaden, en kijken: er is nog maar pittig weinig te zien!
Stap 2: de pagina-achtergrond
Dit zijn de zandlopertjes die bij een grote resolutie een aangenaam beeld geven aan de linker- en rechterkant van de pagina:

puravida_bg-nw-klein.png

Je kunt volstaan met een kolommetje van bv. 5 zandlopertjes naast elkaar, want ze kunnen met wat css horizontaal herhaald worden over de volle breedte. Een witte onder- en/of bovenkant hoeft er niet bij, want de pagina-achtergrond is toch al wit. Als het kolommetje links en rechts precies aansluit op nog zo'n kolommetje, zullen ze op het scherm naadloos aan elkaar geplakt worden en lijkt het één grote strook.
Lekker klein (nog geen 1kB), dat geeft een snelle pagina.
Naar de server uploaden in een mapje "images", dan is ie beschikbaar.
Nu gaan we 'm op z'n plaats zetten. De achtergrond zal voorlopig dwars door het hele beeld lopen, maar later zetten we er voor het middenstuk een laag overheen, zodat ie daar onzichtbaar wordt.
Daar komt de css! Die zetten we voor het gemak in de <head>:
HTML:
<style type="text/css">
html {
   height: 100%;
   padding-bottom: 1px; /* dit geeft voor Firefox ruimte voor de rechter scrollbalk */
   background: url(images/puravida_bg-nw.png) repeat-x 50% 250px;
   }
body {
   height: 150%; /* tijdelijk */
   }
</style>
Het regeltje met "background" geeft nu de opdracht:
  • gebruik als achtergondfiguur het bestand "-weggehaald--nw.png", en haal dat op uit het mapje "images";
  • laat de achtergrondfiguur zich alleen horizontaal (in de x-richting) herhalen;
  • begin horizontaal in het midden (50%), en ga dan naar links en naar rechts herhalen;
  • en begin verticaal op 250px vanaf de bovenkant.
De <body> is even een tijdelijke hoogte gegeven, zodat je kunt zien dat er onder de achtergrondfiguur echt niets meer zit.
Na het uploaden zie je een pracht van een achtergrondstrook.
Op elke schermbreedte loopt de strook nu helemaal van links naar rechts. Eigenlijk loopt ie links en rechts oneindig door, maar dat zie je niet: want daar is geen scherm! :)

Tot zover: wordt vervolgd!
Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
wow, bedankt voor de cursus!
ik heb het uitgeprobeerd, niet online, maar in dreamweaver en dan previewen en het werkt ook bij mij!
tot nu toe is de uitleg helder :)
de site van -weggehaald- gaat eerst even online hoe die nu is, en als ik weet hoe ik hem gecentreerd kan krijgen vervang ik hem.
kan ik nu lagen boven de druppelachtergrond plaatsen, en die niet de waarde absolute meegeven maar relative?

o, en dat lege kader wat ik zag bij een button zie ik nu niet meer, in safari bekeek ik de site..dus weet ook niet wat het nou was.
blijkbaar vanzelf opgelost..
groetjes,
sandra
 
Laatst bewerkt door een moderator:
Het vervolg!

Stap 3: het werkvlak van de pagina
Na de basis-opzet en de achtergrond-figuur gaan we verder met het gecentreerd neerzetten van de <body>. Bij een vaste breedte van 950px past de pagina ook op 1024*768px resolutie. Centreren kan nu met margin:auto(matisch) voor links en rechts, dan verdelen ze het overschot van de breedte eerlijk en staan dan gecentreerd:
Code:
body {
    width: 950px;
    margin: 20px auto;
    border: 1px solid #C0C0C0; /* het randje hoeft nu niet in tekening, en past zich aan de pagina aan */
    background: white; /* komt hiermee boven de druppeltjes-achtergrondfiguur te liggen */
    color: black; /* tekstkleur */
    height: 150%; /* tijdelijk */
    }

Stap 4: aanleg menu-strook
Voor het menu-baantje kan een <div> aangemaakt worden van pak-'m-beet 31px hoog, op 30px vanaf de bovenrand:
Code:
#menu {
    margin-top: 30px;
    height: 31px;
    background: #C0FFFF; /* tijdelijk lichtblauw */
    }

Stap 5: een menu-lijstje
In je pagina zijn de menu-items allemaal afzonderlijke <div>'s, die allemaal apart gepositioneerd worden:
HTML:
<div id="Layer7"><a href="Pagina_10.html" onmouseout="MM_swapImgRestore()" 
    onmouseover="MM_swapImage('Image7','','links-donker.jpg',1)"><img 
    src="Links-licht.jpg" alt="Links" name="Image7" width="39" height="14" 
    border="0" id="Image7" /></a>
</div>
<div id="Layer8"><a href="Pagina_11.html" onmouseout="MM_swapImgRestore()" 
    onmouseover="MM_swapImage('Image8','','Contact-donker.jpg',1)"><img 
    src="Contact-licht.jpg" alt="Contact" name="Image8" width="57" height="13" 
    border="0" id="Image8" /></a>
</div>
... enz.
Dat kan anders, en makkelijker!
De items van het menu kunnen in de html een keurig lijstje worden. Eerst maar eens gewone links, later moeten dat afbeeldingen worden:
HTML:
<div id="menu">
    <ul>
        <li><a href="/">Home</a></li>
        <li><a href="pv.htm">P... V...</a></li>
        <li><a href="pagina1.htm">Pagina 1</a></li>
        <li><a href="pagina2.htm">Pagina 2</a></li>
        <li><a href="links.htm">Links</a></li>
        <li><a href="contact.htm">Contact</a></li>
    </ul>
</div>

Stap 6: de bullets er af!
Hm, dit was niet helemaal de bedoeling. Het lijstje staat verticaal i.p.v. horizontaal, en de bullets (stipjes) kunnen we ook missen. En tegelijk de afstand aan de linkerkant weghalen. Om alle browsers hetzelfde te laten doen, worden alle margins en paddings op nul gezet, zowel voor de lijst als geheel (de <ul> = unordered list = zonder cijfertjes) als voor de list-items <li>:
Code:
#menu {
    margin-top: 30px;
    }
#menu ul {
    height: 31px;
    margin: 0;
    padding: 0;
    list-style: none; /* geen bullets of andere voorloop-figuurtjes */
    background: #C0FFFF; /* tijdelijk lichtblauw */
    }
#menu li {
    margin: 0;
    padding: 0;
    }

Stap 7: nu horizontaal
Door met "float:left" de list-items links tegen elkaar aan te laten drijven, staat het rijtje opeens horizontaal; de links zitten nog pal op elkaar, maar dat komt later.
Code:
#menu li {
    margin: 0;
    padding: 0;
    float: left;
    }

Stap 8: stukje opschuiven
De hele lijst moet meer naar rechts, dus we laten de <ul> een stukje opschuiven:
Code:
#menu ul {
    ...
    margin: 0 20px 0 200px; /* voorlopige linker-margin van 200px */
    ...
    }

Breaky-breaky: wordt vervolgd!
CSShunter
 
Laatst bewerkt:
Hoi Sandra,
Komt ie weer! :)

Stap 9: één voor allen!
Nu gaan we korte metten maken met de 10 images voor het menu (5 voor de gewone stand, en 5 voor de onmouseover-stand). Als je op de huidige javascript-plaatjeswissel-manier ook nog een stand voor de actuele pagina toevoegt, zouden het 15 afbeeldingen worden...
Maar met css kan het veel mooier dan met javascript (dat is helemaal niet nodig), en ook het preloaden van de images is dan niet meer nodig. Want alle 15 onderdelen worden in 1 (één!) image gezet, meteen op de goede afstanden.
  • Er komt een bovenste strook van images voor de gewone toestand,
  • een middelste strook voor de hover-toestand,
  • en een onderste strook voor de "actuele pagina" stand van een menu-item.
Voor het laatste dacht ik dat een soort onderstreping met mini-druppeltjes wel aardig kan zijn. Voor de hover-stand zou ik aanbevelen ook een klein kadertje te gebruiken, dat geeft meer feedback aan de bezoeker, en is ook duidelijker voor mensen die minder goed het verschil in donkerte van de items bij de hover-stand kunnen waarnemen.
Dan wordt het zoiets:


Het slimme idee van een css-hover is, dat deze afbeelding niet in de html-code staat, maar als achtergrond-afbeelding gebruikt wordt. En achtergrond-afbeeldingen kan je met css naar links en rechts en naar boven en beneden schuiven. Dus uit het gecombineerde image kan je telkens alleen dat deel oproepen dat je nodig hebt. Daarvoor moeten de hoogtes van de 3 stroken ook exact hetzelfde zijn, anders komt een deel van een andere strook erdoorheen piepen als je gaat schuiven:


puravida_menu-bouw.png

O ja, ik denk dat een Home-knop niet mag ontbreken, want niet iedereen muist automatisch naar het logo om naar Home te gaan (minder ervaren surfers weten dat niet, en je moet met iedereen rekening houden).
Als het image getekend is, kan de bovenste strook er meteen in gezet worden als achtergrond-afbeelding voor de hele <ul> (die dan de precieze breedte van de afbeelding moet krijgen):
Code:
#menu ul {
    width: 650px; /* breedte van de achtergrond-afbeelding */
    height: 31px; /* die hoogte was dus niet helemaal toevallig ;-) */
    margin: 0 20px 0 200px; /* voorlopige linker-margin van 200px */
    padding: 0;
    list-style: none;
    background: url(images/puravida_menu.png); /* afbeelding op de achtergrond plaatsen */
    }

Stap 9a: verstoppertje spelen
Omdat de menustrook 31px hoog is, en de gewone toestand-strook in de afbeelding ook, is alleen dat gedeelte van de afbeelding te zien. Maar de rest is er ook al!
Dat kan je zien als je even tijdelijk de hoogte van de <ul> op 3 keer 31 = 93px zet. Dan komt de hele achtergrond-afbeelding tevoorschijn.
Maar we gaan weer gauw terug naar nummer 9, om van daar uit verder te gaan.


Stap 10: de tekst-links verduisteren
Eerst moeten we van de tekst-links af zien te komen. We zouden die gewoon kunnen schrappen uit de html-code, maar dat doen we niet. De reden is, dat zonder tekst-links mensen die een text-browser of voorlees-browser gebruiken, anders helemaal niets zien of horen van het menu. De (css) truc is om de tekst-links een absolute positie te geven (nu wel!), en die te gebruiken om ze met behulp van een flink negatieve margin-left buiten beeld te plaatsen.
Maar alleen de tekst-link moet verdwijnen: er is nog wel een (lege) link-breedte "boven" de achtergrond-afbeelding nodig, anders kan er geen mouseover effect zijn. Dat kan bereikt worden door de tekst links in een <span>...</span> te zetten, een "overspanning" van de tekst die we niet nodig hebben:
HTML:
<div id="menu">
    <ul>
        <li><a href="/"><span>Home</span></a></li>
        <li><a href="pv.htm"><span>P... V...</span></a></li>
        <li><a href="pagina1.htm"><span>Pagina 1</span></a></li>
        <li><a href="pagina2.htm"><span>Pagina 2</span></a></li>
        <li><a href="links.htm"><span>Links</span></a></li>
        <li><a href="contact.htm"><span>Contact</span></a></li>
    </ul>
</div>
Die span krijgt nu het buiten boord effect:
Code:
#menu span {
    position: absolute;
    left: 0;
    margin-left: -9999px;
    }
Hocus pocus: weg tekst! Het begint al ergens op te lijken. ;)
Een text-browser ziet door deze manoeuvre gewoon dit (elk cijfer verwijst naar een aanklikbare link):

puravida_lynx.png


Stap 11: link-ruimte creëren, html-voorbereiding
Nu hebben we wel mooi de text-links verdonkeremaand, maar er is helemaal geen breedte voor de links overgebleven. Als je met de muis over de menu-items van stap 10 beweegt, zie je helemaal niets gebeuren: geen handje, geen mogelijkheid om te klikken. Daar gaan we wat aan doen. Maar omdat alle items een verschillende breedte hebben, moeten elk item een eigen aanknopingspunt voor de css krijgen. Dat kan door in de html-code een "class" met een herkenbare naam toe te voegen:
HTML:
<div id="menu">
    <ul>
        <li class="home"><a href="/"><span>Home</span></a></li>
        <li class="pv"><a href="pv.htm"><span>P... V...</span></a></li>
        <li class="pag1"><a href="pagina1.htm"><span>Pagina 1</span></a></li>
        <li class="pag2"><a href="pagina2.htm"><span>Pagina 2</span></a></li>
        <li class="links"><a href="links.htm"><span>Links</span></a></li>
        <li class="contact"><a href="contact.htm"><span>Contact</span></a></li>
    </ul>
</div>
Bij bekijken van het resultaat zie je nog geen verschil met fase 10, want de classes staan wel klaar voor css-opdrachten, maar er is nog niet gezegd wat die classes precies moeten doen.

Stap 12: link-ruimte creëren, css-uitvoering
Elk menu-item krijgt zijn eigen breedte plus de bekende hoogte van 31px. Met de achtergrond-afbeelding geopend in een tekenprogramma kunnen de maten in px precies opgemeten worden, en doorgegeven worden aan de css.
Tegelijkertijd moeten alle links <a> ook een {display:block;} krijgen, zodat de muis op elk punt van zo'n item-blokje kan reageren.
Code:
#menu a {
    height: 31px; /* de hoogte voor allemaal tegelijk */
    display: block; /* hover over hele item-gebied mogelijk maken */
    }

/* in iets andere notatie: de breedte per item verschillend */
.home    { width:  82px; }
.pv      { width: 112px; }
.pag1    { width: 169px; }
.pag2    { width: 113px; }
.links   { width:  79px; }
.contact { width:  95px; }
In het resultaat zien we dat de breedte van de items er nu is: bij er over heen muizen verschijnt het aanwijs-handje (en je kunt nu ook klikken). Maar verder is er nog niets te zien ...

Pauzetje - wordt vervolgd!
CSShunter
 
Laatst bewerkt:
Volgende hoofdstuk!

Stap 13: het hover-effect monteren
In stap 12 was de middelste strook van de achtergrond-afbeelding nog niet aangehaakt, zodat er bij een hover over een item geen verschil was te zien.
We hebben nu:
  • voor elk menu-item een denkbeeldig "venstertje", een link-gebied waarover gehoverd kan worden;
  • het gegeven dat je met css aan elk element een achtergrond-afbeelding kunt toevoegen, dus ook aan een link <a> die uitsluitend een transparant hover-gebied is;
  • het gegeven dat we de achtergrond-afbeelding al hebben: die kan dus gerecycled worden!
  • het gegeven dat je in dergelijke venstertjes met de positie van een achtergrond-afbeelding kunt rangeren (zie ook: De Patrijspoort Theorie).
De liniaal mag er weer bij! ;)
Hier hebben we het venstertje van de home-link (82*31px, maar dat weet de css al):

puravida_item-1.png

In dat venstertje moet de achtergrond-afbeelding weer komen: horizontaal op hetzelfde plekje, maar verticaal 31px omhoog geschoven om de Home-afbeelding in de middelste strook te tonen:
Code:
#menu a:hover, #menu a:focus { /* bij hover de achtergr.afb. tonen bij elke link */
    background: url(images/puravida_menu.png);
    }

#menu .home a:hover, 
#menu .home a:focus {
    background-position: 0 -31px; /* hor. gelijk, verticaal naar tweede strook */
    }
Omdat in de html-code de link <a> een "laag" is bovenop de <ul>, wordt volgens de cascade-regels van de css (CSS = Cascade Style Sheet!) de achtergrond van de <a> bovenop de achtergrond van de <ul> geplaatst: van die oude achtergrond zie je in het gehoverde <a> gebied niets meer! - Waar niet gehoverd wordt, blijft de gewone achtergrondfiguur in beeld.
  • De toevoeging met de a:focus eigenschap is nodig voor de toegankelijkheid. Als je de muis niet kan gebruiken en via het toetsenbord van link naar link springt (met de Tab-toets; Enter-toets = link ingaan), zie je door het hover-effect dan óók waar je op het scherm zit, want een muis-aanwijzer is er dan niet.
Hier hebben we het venstertje van de Pura Vida-link:

puravida_item-2.png

Hierin moet opnieuw de achtergrond-figuur geplaatst worden. Maar als je deze rechtstandig omhoog zou trekken met dezelfde {background-position: 0 -31px;}, gaat de afbeelding wel prima omhoog, maar staat nog steeds op de Home-stand! In het nieuwe venster wordt namelijk weer vrolijk opnieuw begonnen met de linkerkant van de achtergrond-figuur. Wat we moeten hebben, is het tweede gebied van de middelste strook: en dat begint op de 83e pixel vanaf de linkerkant. De horizontale bg-positie moet dus 82px naar links geschoven worden (-82px) om de tweede te kunnen zien in het venstertje van de tweede.
Dus! :d En zo wordt het voor nummer twee:
Code:
#menu .pv a:hover, 
#menu .pv a:focus {
    background-position: -82px -31px;
    }
Met enig geduld en goed meten moet zo bij elke link op de pixel precies bepaald worden waar de hover-afbeelding zit...
En uiteindelijk komt de beloning, een subtiel hover-effect waar de nietsvermoedende surfer niet van vermoedt wat er allemaal voor nodig was:

Stap 14: accent voor de actuele pagina
Zo! Maar we zijn er nog niet. Voor het accentueren in het menu van de op een bepaald moment in zicht zijnde pagina moeten ook nog maatregelen getroffen worden. Weer kan de achtergrond-figuur hergebruikt worden: nu strook 3. En om niet op elke pagina iets anders in het menu te hoeven zetten (een extra class="actual" of zoiets bij het item van die pagina), passen we een uiterst handige css-truc toe. Dit gaat als volgt:
Elke pagina krijgt in de html van de <body>-tag een ID mee met zijn eigen naam (die ook in de class van het menu-item gebruikt wordt), bv.:
HTML:
<body id="home">
Als je nu in de css deze ID gebruikt voorafgaand aan de menu-class, regel je dat alléén als in de body die ID staat, deze menu-class een bepaald gedrag mag vertonen:
Code:
#home #menu .home a {...}
Bij alle andere pagina's, waar niet die ID wordt gebruikt, gebeurt er dan niets.
Op dezelfde manier voor de tweede pagina:
Code:
#pv #menu .pv a {...}
Enz. - We vullen in wat er moet gebeuren voor elke pagina-item dat zo aangeroepen wordt: weer de bg-figuur gebruiken in het venstertje, de positie van strook 3 gebruiken, en de cursor geen handje laten zijn (want op die pagina ben je al). Het riedeltje wordt daarmee:
Code:
#home #menu .home a        { background: url(images/puravida_menu.png)      0 -62px; cursor: default; }
#pv #menu .pv a            { background: url(images/puravida_menu.png)  -82px -62px; cursor: default; }
#pag1 #menu .pag1 a        { background: url(images/puravida_menu.png) -194px -62px; cursor: default; }
#pag2 #menu .pag2 a        { background: url(images/puravida_menu.png) -363px -62px; cursor: default; }
#links #menu .links a      { background: url(images/puravida_menu.png) -476px -62px; cursor: default; }
#contact #menu .contact a  { background: url(images/puravida_menu.png) -555px -62px; cursor: default; }
Kijk, dan krijgen we automatisch voor de Home-pagina:

Hèhè! Dat was even concentreren en zweten, maar het meest intensieve en tijdrovende klusje is nu geklaard. Bovendien hadden we een worst voor ons hangen: dit was een éénmalig karwei, want nu hebben we het menu meteen goed voor alle pagina's van de hele site. Yammi ! (en dat voor een vegetariër)
De rest gaat nu in de tijd van een vloek en een zucht, maar dan zonder vloek of zucht! :d

Wordt vervolgd!
CSShunter
 
Laatst bewerkt:
Verders!

Stap 15: logo positioneren
We gaan het logo er maar eens in zetten: links laten drijven, zodat de ruimte rechts ervan benut kan worden. Als er in de html een <h1> bij gezet wordt, kan die met css weer onzichtbaar gemaakt worden: goed voor text-browsers en voor Google! Want het woord "-weggehaald-" staat wel in de figuur, maar dat kan de Google-robot niet lezen.
Het logo krijgt een link naar de homepage, de afbeelding mag geen randje krijgen, en als je al op de homepage bent, moet je geen handje zien. Dat wordt dus:
HTML:
<div id="logo">
    <h1><a href="/" title="Home"><img src="images/puravida_logo.png" 
        width="150" height="185" alt="" /><span>-weggehaald-, praktijk voor 
        -weggehaald-</span></a>
    </h1>
</div>
en:
Code:
#logo {
    float: left;
    width: 150px;
    margin-top: 50px;
    padding-left: 65px; /* geen margin-left i.v.m IE6 double margin bug */
    }
h1 {
    margin: 0;  /* geen onverwachte afstanden boven/beneden via de hidden h1 */
    padding: 0; /* idem */
    }
a img {
    border: 0;
    }
#logo span {
    position: absolute;
    left: 0;
    margin-left: -9999px;
    }
#logo a {
    outline: 0;
    }
#home #logo a {
    cursor: default;
    }
Verder zal het logo iets aangepast moeten worden. De tekst "-weggehaald-" is bij verkleining van het logo wel scherp zichtbaar voor drukwerk, maar niet voor vertoning op scherm. Oorzaak: de resolutie op scherm is in pixels, en die zijn veel groter dan de 300 of 600 dots per inch die voor de details in drukwerk kunnen zorgen. Vandaar de concessie om de originele verhoudingen iets te wijzigen: een wat groter lettertype voor de BT-tekst:

was:
puravida_logo-ori.png
>>>
puravida_logo.png

Stap 16: het inhoud-vak
De <div> voor het inhoud-vak hoeft niet te drijven, want komt vanzelf naast het logo te staan. Met een linkermarge van 280px blijft het vak recht naar beneden lopen, ook als de hoogte van het logo voorbij is. Tegelijkertijd kan het begin van de menu-strook op de juiste plek komen:
Code:
#menu ul {
    ...
    margin: 0 20px 0 262px; /* voorlopige linker-margin van 200px is gecorrigeerd */
    ...
    }
#inhoud {
    margin: 120px 20px 20px 280px;
    height: 400px; /* tijdelijk; de tijdelijke hoogte van de body kan nu geschrapt worden */
    border: 1px dotted fuchsia;
    }

Stap 17: inhoud-vak opsplitsen
De inhoud kan nu opgedeeld worden in een linkerkolom en een rechterkolom:
HTML:
<div id="inhoud">
    <div id="linkerkolom">
        (linkerkolom)
    </div>
		
    <div id="rechterkolom">
        (rechterkolom)
    </div>
</div>
En de linkerkolom laten we links drijven:
Code:
#linkerkolom {
    float: left;
    width: 300px;
    height: 400px; /* tijdelijk; de tijdelijke hoogte van de #inhoud kan nu geschrapt worden */
    border: 1px dotted blue;
    }

Stap 18: met clear geen geklier!
Hola! :shocked:
Opeens is in fase 17 de witte <body> onder de linkerkolom verdwenen, en staat daar nu de achtergrond-afbeelding van de pagina doorheen...
How come? - Een float drijft, en staat daarmee los van de normale stroom van de indeling (de "normal flow"). In dit geval houdt de normale stroom op onder het woord "(rechterkolom)", en daar eindigt dus ook de witte body.
De remedie is om onder de float een <div> neer te zetten met de "clear" eigenschap. D.w.z. het erna volgende element niet naast de float zetten (als daar nog ruimte over is), maar er onder. Zo'n clearing div hoeft zelf geen "echte hoogte" te hebben, dan gaat het ook goed:
HTML:
<div id="inhoud">
    <div id="linkerkolom">
        (linkerkolom)
    </div>
		
    <div id="rechterkolom">
        (rechterkolom)
    </div>

    <div class="clearB"><!-- hoogste kolom wint --></div>
</div>
Met:
Code:
.clearB {
    clear: both;
    height: 1px;
    margin-bottom: -1px;
    }
Gelukkig:

Stap 19: de rechterkolom van de inhoud
De rechterkolom kan nu naar rechts gefloat worden, tegen de rechterrand van de #inhoud.
Code:
#rechterkolom {
    float: right;
    width: 300px;
    height: 250px; /* tijdelijk */
    border: 1px dotted green;
    }

Stap 19a: de rechterkolom het hoogst
Even proberen wat er gebeurt als de rechterkolom hoger is dan de linkerkolom. Ja, alles past zich (dankzij de clearB) keurig aan aan de hoeveelheid inhoud in de hoogste kolom van de twee.

Stap 20: footertje erbij
De laatste ontwerp-stap is nu kinderspel:
Code:
#footer {
    margin: 0 20px 0 280px; /* voor IE6: padding-bottom in de body ipv margin-bottom hier! */
    border: 1px dotted green;
    }

=============

Zo, hiermee hebben we je oorspronkelijke vraag wel zo ongeveer opgelost ;):
Hoe kan het dat wanneer je de positie van een laag in beide pagina's op dezelfde hoogte insteld, de browser de ene pagina anders weergeeft dan de andere.
de afbeelding wordt hoger weergegeven in de browser.
Weet iemand hier een oplossing voor?
We hebben nu gemaakt:
  • een indelings-sjabloon voor de html (met de verschillende <div>-secties), en
  • met css de bijpassende opmaak gemaakt, die geheel van de html gescheiden is,
  • terwijl helemaal geen javascript nodig is voor de functionaliteit van de pagina,
  • en er zegge en schrijve maar 3 afbeeldingen gebruikt worden (achtergrond, menu en logo) met een totale zwaarte van 47kB -dat waren er 15 van tezamen > 70kB, zodat de pagina aanzienlijk in snelheid heeft gewonnen (elk op te vragen img geeft ook extra vertraging).
Daar kan geen Dreamweaver tegenop! :p

=============

De finishing touch
Nu kan de css die we in de <head> hebben staan verhuisd worden naar een mooi los stylesheet: dat kan dan ook voor alle andere pagina's gebruikt worden, en geen enkele pagina kan in de verleiding komen iets hoger of lager te zetten (want ze moeten allemaal dezelfde css volgen).
Het stylesheet is precies de css die we al hebben, maar dan zonder de <style> en </style> begin- en eind-tag. In feite dus een kaal text-bestand, dat de uitgang .css krijgt:
In de <head> van de html van elke pagina komt nu een link naar de vindplaats van het stylesheet te staan, bv.:
HTML:
...
<link rel="stylesheet" type="text/css" href="stylesheets/puravida.css" />
</head>
...
Hiermee is de overblijvende html in de <body> heerlijk helder geworden: je kiepert de tekst er zo in en het gaat vanzelf goed.
Daarmee resteert het leukere werk: puntjes op de i in de css, en vullen die hap!
Dat gaat dus beresnel, want als je één pagina hebt, kopieer je die even om 'm te vullen met andere inhoud (en op te slaan met nieuwe naam, dat wel).

Showcase
Zo heb ik even 3 pagina's in elkaar gedraaid (Home, pv en pag1) met hetzelfde stylesheet. Via het menu kan je van de een naar de ander gaan (de andere menu-links werken niet). Zie hier:
  • Proefpagina's: www.developerscorner.nl/csshunter/tests/pv-home.htm
  • Valid html en css.
  • Komt 47/47 door de Quickscan van het Kwaliteitsmodel Webrichtlijnen, als er even een php-pagina van wordt gemaakt met een utf-8 karakterset in de php-header (nu: 46/47).
  • Gecentreerd v/a 1024*768px, resolutie-bestendig, lettergrootes kunnen door bezoeker worden aangepast, werkt in Firefox, Chrome, Safari, Internet Explorer 6, 7, 8. *)

Dat was dan het laatste deel van de serie. :)

Succes!
CSShunter
_______________
*) IE8 lijkt een ouderwetse "peekaboo" te hebben (soms een flits als je over het menu hovert), maar ik bekijk IE8 niet lokaal maar via een remote server, dus daar zou het ook aan kunnen liggen. Doet IE8 het rechtstreeks wel goed?
 
Laatst bewerkt:
Hoi csshunter,
ik ben tot stap 8 gekomen, dat lukt allemaal, en zie dat je de hele cursus ondertussen al hebt geschreven:)
dank!!
ik ga het eens goed doornemen en oefenen.
van het originele design kan ik niet afwijken, dat is zo goedgekeurd, maar ik heb wel veel aan je tips..dus hoop uiteindelijk
een goed gecentreerde en helder opgebouwde site te kunnen bouwen.
erg bedankt voor je hulp iig! en ik weet je te vinden bij vragen;)
sandra
 
Laatst bewerkt door een moderator:
Aha:
Van het originele design kan ik niet afwijken, dat is zo goedgekeurd.
Mmm, ik zou me niet te gauw laten kisten: dat design is misschien door een grafisch ontwerp(st)er gemaakt, die beter bekend is met papier dan met beeldschermen. :rolleyes:

Als jij met goede argumenten kunt aantonen dat het goedgekeurde ontwerp niet goed op een website kan draaien (= verlies van potentiële klanten), dan zou er over een kleine wijziging van het ontwerp toch te praten moeten zijn? *)

Of je maakt twee versies: een goed werkende die iets afwijkt van het ontwerp maar dat in essentie onaangetast laat, en eentje die wel het ontwerp volgt maar minder bruikbaar is (voor bezoekers en/of Google; en tussentijds niets laten zien of bediscussiëren). Met bij de presentatie van die twee: een lijstje voordelen van jouw goede versie uitdelen. Dan mag de opdrachtgever zelf kiezen tussen de twee. Kijken waar het op uit draait! ;)

Of misschien kan je, net voorafgaand aan die presentatie, een balletje opgooien door dit verhaaltje te laten lezen:
Met vriendelijke groet,
CSShunter
____________
*) Zitten er daarom ook afbeeldingen van teksten in, in plaats van teksten zelf? Bv. in de footer: daar is bij een img-versie niet het telefoonnummer uit te kopiëren! Een affiche of folder mag zo mooi zijn als het maar kan, maar een website moet werken!
Dat is: uitgaan van de bezoeker, en niet van de ontwerper. :P
 
Hoi csshunter, nog even een vraag over de huidige site van -weggehaald-.
Ik ben nog met de re-make bezig, dat duurt nog wel even denk ik..
(over die afbeelding van het -weggehaald- menu, moet ik de gouden subkopjes (onder bloesemremedies en celzouten) daar ook in verwerken eigenlijk, of daar weer een aparte afbeelding van maken? in jouw uitleg gebruik je de groene kopjes alleen in de afbeelding)

Maar mijn vraag op dit moment is eigenlijk:
Zie jij het witte kadertje met zwart randje ook in jouw browser? Op de plaats van het kopje bloesemremedies.
In safari zie ik het wel, in firefox niet..heel vreemd.
Ik wil een screendump bijvoegen, maar dat lukt niet..dan maar een url..

http://www.-weggehaald-.nu/Wat_zijn.html

Rara, wat is het??
Groetjes,
Sandra
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan