Switchen van pagina naar pagina gaat erg 'schokkerig': hoe los ik dat op?

Status
Niet open voor verdere reacties.

vvanasperen

Gebruiker
Lid geworden
9 mrt 2009
Berichten
68
Dag allemaal,

Ik heb een website gemaakt, maar als ik van pagina switch dan komt het geheel nogal schokkerig over... Het lijkt erop alsof alles eerst nog op de goede plek moet worden gezet/gepushed... Kan iemand mij vertellen hoe ik dát kan oplossen? Dus zodat ik een vloeiende overgang tussen de pagina's heb? Ik gebruik alleen HTML en CSS, dus geen Flash of andere exotische toevoegingen.

http://www.robo-bandenstalling.nl

Als het niet duidelijk is of iemand heeft aanvullende informatie nodig, dan hoor ik dat graag. Alvast bedankt...

Groeten Vincent
 
Laatst bewerkt:
Werkt hier prima. Welke browser gebruik je?

De links onderaan de pagina die doen het hier trouwens niet, weet niet of dat de bedoeling is?
 
Dag Robin,

Bedankt voor je reactie! De versie die ik hier op mijn werk heb is 8.0 (om precies te zijn 8.0.6001.18702)... De links onderaan de pagina zijn inderdaad nog niet in gebruik, want ik ben nog volop met de site in de weer... Vind je het wat? =)

Maargoed, als het bij jou wel goed gaat, dan ligt het vast aan de versie hier op het werk en dáár kan ik persoonlijk niet zo veel aan doen... Ik hoor het graag als je nog andere ideeën hebt...

Groeten Vincent
 
Hoi Vincent,
Ik denk niet dat het aan je versie IE8 van Internet Explorer ligt. Bij mij flitst IE7 ook. Andere browsers niet: het is een Internet Explorer verschijnsel, dat bekend staat als "FOUC".

Zo'n FOUC is een "Flash Of Unstyled Content", oftewel voordat de nieuwe pagina getoond wordt, verschijnt er heel kort even een blanco pagina. In die tijd is IE bezig onderdelen van de nieuwe pagina op te halen, en te berekenen waar ze op de pagina moeten worden neergezet.
Andere browsers wachten netjes totdat alles klaar staat, om dan pas de oude pagina weg te halen. Internet Explorer doet dat niet, die wist alvast de oude pagina. Vandaar.

Maar ja, zo kom je er aan. Hoe kom je er af?

(1) Verbetering van de html-code.
  • Wat een rol zou kunnen spelen, is dat er wat fouten in de html zitten - dan moeten browsers er hun eigen fout-correctie op toepassen, en dat kost natuurlijk ook wat tijd.
  • Er mist bv. ergens een </div>, wat IE wellicht van de wijs brengt.
  • Erg aan te bevelen is, om te beginnen met een "Doctype declaratie", waardoor browsers weten hoe ze de pagina (en de opgegeven css-stijlen) moeten gaan interpreteren. Zie mijn handtekening hieronder (het beste is een "Strict" doctype te gebruiken, dat sluit aan op de actuele html-standaard en geeft de meeste garantie op een goed cross-browser resultaat).
(2) Verder moet de "halftransparante" afbeelding van de onderkant van het pand bij elke pagina opnieuw opgevraagd worden, omdat hier de titel-tekst (Welkom, Banden brengen, Banden ophalen, enz.) van elke pagina in staat.
Beter is om er één img van te maken, dat is dan meteen na het openen van de Home-pagina gedownload op de computer van de bezoeker, en is dan veel sneller paraat voor de vervolgpagina's. Ook het logo kan hier aan vastgeplakt worden.
Bijkomende voordelen:
  • Geen 3 images, maar 1. Het witte kiertje tussen het logo (rechts naast de boom) en het header-img hoeft ook niet weggewerkt te worden.
  • Het is twee zg. "http-requests" minder: in plaats van dat de browser bij de server moet vragen om 3 plaatjes, hoeft dat nog maar 1 keer (en dit vragen duurt lang: het is in feite uploaden van browser naar server, wat veel trager gaat dan downloaden).
    Bovendien moet elk "pakketje" aan bytes van een te downloaden image een eigen (ingebouwde) header hebben, die vertelt voor wie het bedoeld is, wat voor soort bestand het is e.d.; 3x header is 2x header te veel: dat is alleen maar extra bestandsgrootte.
  • Er kan ook winst geboekt worden in de omvang. Het logo (41kB), de header (39kB) en een titel-img (32kB) hebben samen een bestandsgrootte van 112kB.
    • Door van de combinatie een 256-kleuren png (deze robo-logo.png) te maken, heb je maar 48kB nodig voor het totaal, met zelfs ook nog kwaliteitswinst.
      Dat is dus minder dan 50%, ofwel 2x zo snel binnen alleen al door het kleinere bestand.
Vervolgens kan je deze ene afbeelding als background-img gebruiken, en de pagina-koptekst er met gewone html-letters overheen zetten.
Dat is ook beter voor Google: de Google-bot kan wel letters lezen, maar geen letters op een afbeelding. Als je van de pagina-kop een <h1> tag maakt, wordt dat als belangrijk door Google gezien, en daarmee krijgt je pagina extra waarde voor de woorden die daarin staan.​

(3) Als dit allemaal niet helpt om Internet Explorer van z'n horten en stoten af te helpen (ook andere browsers hebben er uiteraard baat bij), is er ook nog een speciale truc om IE te laten wachten met het verversen van een webpagina voordat de nieuwe er is.
Internet Explorer (en IE alleen) kent namelijk een mogelijkheid om pagina-overgangen te maken, zoals overvloeiers e.d. Daarvoor moet de oude pagina vastgehouden worden!
Dit gaat met de <meta> eigenschap (die in de <head> komt):
HTML:
...
<meta http-equiv="Page-Enter" content="blendTrans(Duration=.35)"><!-- anti IE "fouc" -->
Hiermee krijgt een nieuwe pagina een fade-in. De "duration" is het aantal seconden dat een overgang duurt, en het hangt van de pagina af hoe lang dat precies moet zijn. Met even experimenteren kan je uitvissen wat de kortste tijd is om geen geflits te krijgen.
Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
Zo... CSShunter... Bedankt!

Een geweldig antwoord waar ik veel mee kan en ga doen! Ga in ieder geval voor alle pagina's de html en voor het geheel de css code controleren en een "Strict" doctype gebruiken op alle pagina's...

Ik begrijp goed wat je bedoeld met van de 3 plaatjes 1 maken, dat zou ook de ideale situatie zijn... En voor de <div id="header"> snap ik dat ook, dus het logo en het pand aan elkaar vast, dan kan ik de ik de <div id="logo"> en <div id="robo"> verwijderen (en dan gewoon met css zorgen dat de height van de header goed staat ingesteld), toch?

Alleen begrijp ik niet hoe ik het robo-logo.png kan gebruiken, dus met het "halftransparante" plaatje aan de onderkant en die dan achter zowel de <div id="body"> als de <div id="menu"> en <div id="tekst_box"> kan krijgen? Moet ik het dan in css robo-logo.png als een achtergrondplaatje van de <div id="container"> gebruiken?

Ik kan dan in ieder geval wel <van div id="tekst_box"> en <div id="tekst_content"> 1 div maken die de titel én de tekst van de pagina bevat (ook weer juist gepositioneerd met css), toch? Alleen hoe krijg ik de titel dan gesplitst in grijs en groene tekst? Kan ik dat ook in css doen, of is daar een andere truc voor?

Oké, heel wat extra vragen, dat dan weer wel, maar ben ook al een stuk opgeschoten! Alvast bedankt en als je in de gelegenheid bent me nog iets verder te assisteren, dan zou ik dat zeer op prijs stellen, CSShunter...

De speciale truc bewaar ik nog even... Eerst maar eens kijken of ik het zonder kan oplossen... Of is een en-en aanpak eigenlijk het beste?

Groeten Vincent
 
Laatst bewerkt:
Hoi Vincent,
... <div id="logo"> en <div id="robo"> verwijderen (en dan gewoon met css zorgen dat de height van de header goed staat ingesteld), toch?
Correct! :thumb:

=====
... Moet ik het dan in css robo-logo.png als een achtergrondplaatje van de <div id="container"> gebruiken?
Ook correct!

=====
... Alleen hoe krijg ik de titel dan gesplitst in grijs en groene tekst? Kan ik dat ook in css doen, of is daar een andere truc voor?
Ja, met css in combinatie met html: wat groen moet worden zet je in de html tussen een <span></span> (een "overspanning" dus), en via css vertel je dat alle <span>'s in een kop-tag <h1> de kleur groen moeten krijgen:
Code:
...
h1 span {
   color: green;
   }
Zodra de span is afgelopen, wordt het weer de gewone kleur van de <h1>.

=====
De speciale truc bewaar ik nog even... Eerst maar eens kijken of ik het zonder kan oplossen... Of is een en-en aanpak eigenlijk het beste?
Dat zal blijken! ;)

Nu was ik ook wel nieuwsgierig wat er zou gaan gebeuren in Internet Explorer als je alles zou doen volgens mijn tips.
En ... ik kwam uit op een en-en-en-en benadering, want ook van de 6 afbeeldingen voor het menu plus hun 6 varianten voor de actuele pagina kan samen 1 image gemaakt worden: robo-sprite.png; draagt weer bij tot een hogere pagina-snelheid.

Die gaat er in als koek achtergrond-afbeelding van de menu-links, en met css wordt steeds het goede gedeelte van de combinatie op zijn plaats gesjord.
Omdat de afbeelding er toch is, kan in één moeite door ook met css geregeld worden dat een knop verandert als je er met de muis overheen gaat. Dan ziet de bezoeker/ster meteen resultaat van zijn/haar gemuis.Door aan elke pagina in de <body>-tag verder een class toe te voegen met de naam van de id die die pagina in het menu-lijstje heeft, wordt er automatisch voor gezorgd dat de actuele pagina het groene driehoekje krijgt. Er kan dan voor elke pagina exact hetzelfde menu gebruikt worden. Css is wonderschoon!

De tabel voor het uitlijnen van het gecentreerde adresblok op de home-pagina kan verdwijnen, als je daarvoor een schrijfmachine-letter gebruikt met vaste letterbreedte, zoals de Courier. Het rechterdeel van elke regel kan dan gewoon met spaties op z'n plek gebracht worden.

Wat ook nog speelt, is dat de #footer nu wel onderaan staat, maar dat het mis zou gaan bij een pagina waar veel tekst op komt, of als de bezoeker een niet zo hoog venster heeft:

robo-footer-probleem.png

Daar valt van af te komen door het recept te volgen dat hier staat: de hele pagina-inhoud komt in een super-container, en de #footer staat daar los van. Alweer: wat css-toestanden doen de rest.

De copyright-afbeelding in de #footer kan ook gemist worden (wéér 1 minder!), als je daarvan gewone tekst maakt die "drijvend" gemaakt is met {float: left;}. De rest van de #footer kan dan los daarvan rechts uitgelijnd worden op dezelfde hoogte.
  • Zo houden we dus maar 3 images over van de oorspronkelijke 9 (groene bg, logo/header en menu), naast het favicon.
    En bij een nieuw geopende pagina op de site hoeft er niets extra's aan images gedownload te worden.
Als ook nog de html geschoffeld wordt tot valid html, laat Internet Explorer al bijna geen flits meer zien: soms helemaal niet, en soms heel erg kort, vanwege de groene achtergrondkleur die over wit weer groen moet worden. Maar daarvoor kunnen we dan de laatste en gebruiken: de IE-pagina overgang, die er met 1 extra regeltje in de html in kan komen.

=====
Al met al heb ik het volgende model gebakken:
  • Test: robo-nw.htm
  • De css zit (voorlopig) allemaal in de pagina zelf, met her & der wat toelichting.
  • Alleen de 3 bovenste menu-links gaan ergens naar toe.
  • Onder "banden brengen" zit een identieke pagina, maar nu met heel weinig tekst.
  • Onder "banden halen" zit een pagina met juist heel veel tekst.
Als je dan als allereerste regel (dus nog vóór het Doctype) de php-regel toevoegt:
HTML:
<?php header("Content-type: text/html; charset=utf-8"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
...
en de pagina-extensie verandert van .htm naar .php, dan komt de pagina niet alleen heelhuids door de html- en css-validator, maar scoort deze ook 47/47 op de Webrichtlijnen Quickscan, die strenger is in de kwaliteitseisen.
Met vriendelijke groet,
CSShunter
 
CSShunter...

Hoe kan ik je bedanken... Nou, in ieder geval door het te zeggen... Bedankt!

Ik had verwacht dat je me op weg zou helpen, maar je hebt me wel even wat meer dan 'op weg' geholpen! Al je aanwijzingen zijn een enorm goede leerschool voor me, maar het is ook wel handig dat ik het meteen in de praktijk kan zien! Super!

Zoals je kan zien heb ik al wel weer het een en ander aangepast, zoals degene voor wie ik de site maak het me heeft gevraagd. Maar het werkt als een charme...

Ik ga weer lekker verder aan de slag en als ik nog vragen heb, dan weet ik je te vinden... :d

Groeten Vincent
 
CSShunter...

Dat met die 'sprites' is echt cool, trouwens... Dat scheelt echt een sloot aan laadtijd, zeg... Daar dan ik toch ook nog gewoon een derde reeks plaatjes naast zetten, dus dat je drie verschillende menuknopjes voor alle menu opties hebt, maar dan in 1 plaatje? =)

Neem aan dat je dan gewoon even moet uitrekenen waar de derde reeks begint, zeg maar...

En, gewoon uit nieuwsgierigheid, maar waarom zorgt het veranderen van de pagina-extensie verandert van .htm naar .php voor die hogere score? Waarom heeft php de voorkeur, heeft dat automatisch betere kwaliteit? Neh, toch?

Groeten Vincent
 
Hoi Vincent,

CSS-sprites
Ja, die sprites zijn een mooie uitvinding. En het kan zeker om er een 3-standen ding van te maken: link in ruststand, link in hover-stand, en link van de actuele pagina.
Inderdaad met nog derde serie er naast, en wat rekenen om alles in aanvullende css naar de goede positie te krijgen.
  • Met css-sprites hoef je je niet te beperken tot wat er in één element moet komen. Je kan ook allerlei andere background-images combineren. Hier is bv. een wild-west sprite, waar niet alleen hover-standen in zitten, maar ook allerlei ronde hoekjes en randjes van verschillende containers. In het echt gaf dat bv. dit resultaat.

.php <> .htm ?
... waarom zorgt het veranderen van de pagina-extensie van .htm naar .php voor die hogere score?
Het is niet het veranderen van de extensie op zich wat de score verhoogt.
Het is het extra regeltje <?php header("Content-type: text/html; charset=utf-8"); ?> in de broncode wat dit doet.
  • De php-uitgang is alleen voorwaarde om dat regeltje <?php ... ?> te kunnen gebruiken op de server. Dan weet de server dat het een php-pagina is, zodat de server-side php (de tweede P van PHP = "PHP: Hypertext Preprocessor") machinerie opstart en aan de slag gaat.
  • De PHP preprocessor-functie op de server: deze kijkt eerst wat er op de pagina aan php-instructies staat, verwerkt die, en stuurt dan het resultaat met de rest van de pagina-code als één geheel naar de bezoeker.
  • De browser (en de bezoeker die in de broncode gaat kijken) ziet alleen het resultaat: gewone html-code. Waar er via PHP iets is ingeplakt, of waar PHP eerst iets anders heeft gedaan: dat is niet meer te zien.
  • Ook bv. de html-validator zal het worst zijn hoe de pagina tot stand is gekomen, met of zonder php: want uiteindelijk spuugt php ook alleen maar html-code uit, en de validator checkt alleen deze uitgaande post aan html-code.
De kwaliteitsbonus van de Webrichtlijnen zit 'm in de inhoud van het php-regeltje.
Zo ongeveer als volgt.
  • Elke webpagina krijgt een "http-header" die de server extra aan een geuploade bestand (pagina, maar ook afbeelding, css-bestand, enz.) toevoegt op moment van downloaden door de bezoeker.
  • In die http-header staat info over het bestand wat erbij hoort, zoals de grootte, het type bestand, de datum van plaatsing op de server e.d.
  • Er kan ook info in staan over de character-set: de manier van coderen, die voor de interpretatie van de tekens in de code nodig is.
  • Dat kan, maar hoeft niet. Dat hangt ervan af hoe de provider de basisinstellingen van de server heeft opgezet.
  • Een provider kan automatisch een bepaalde charset laten opnemen in de http-header.
  • Die charset kan eventueel in strijd zijn met wat in de <meta>-tag als charset is opgegeven. In een aantal gevallen kan dat problemen opgeven (met name bij internationaal gebruik; met Chinese of Arabische toetsenborden en Windows-instellingen moet de NL of EN tekst van de site toch goed op scherm komen!).
  • Via het onderhavige php-regeltje wordt de server gedwongen een eventuele automatisch geplaatste andere charset te laten vallen, en in de http-header alleen díe te gebruiken die in het regeltje staat.
Het is dus een veiligheidsmaatregel die deze bonus geeft.
Want de Webrichtlijnen houden heel erg van veilig. :)

Met vriendelijke groet,
CSShunter
_________
Behalve het plaatsen van een http-header kan php nog véél meer mooie dingen doen. Een hele mooie, en ook super-eenvoudige, is het "includen" van een element in de pagina dat op elke pagina staat. Zoals een menu. Dat hoeft dan niet op elke pagina ingeplakt te worden, en heeft als extra voordeel dat met alléén het veranderen van het ge-includeerde bestandje meteen alle pagina's van de site automatisch het veranderde menu laten zien.
Interessant, nietwaar?!
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan