Tilpasning til skærm og browser

Relaterede dokumenter
Nu skal vi især se på <font> og <center> samt centrering af hele siden på skærmen.

Form og dens underlige box model

Denne artikel er til dem der ønsker at vide mere om hvad CSS er og hvad CSS kan bruges til hvad angår WWW.

Søg og erstat med RegExp

I mit script tager jeg højde for det problem ved, at gemme et unikt tal mellem 0-9 på 6 cifre og derved vil de så blive vist som 2 online.

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Projekt i Programmering C Menu til hjemmeside.

Ordbøgerne.dk. Navne: Andreas Foldager og Rasmus Bjerring Pedersen Fag: IT B Lærer: Karl Bjarnason Afleveringsdato:

Beginning CSS and Web Development kap. 1 11

Dynamisk PHP design OPDATERET

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Mozilla Firefox (tidligere Firebird): Fremhæve ord

Ratingsystem i PHP og MySQL

I denne artikel vil jeg gennemgå hvordan en side for RSS "Live Bogmærke" kan se ud.

Se hjemmesiden på:

Hjælp under login på Mit DLR Oktober 2015

Anvendelse af metoder - Programmering

Hvad er Objekter - Programmering

Kontrol-strukturer i PHP

Tagwall med Php & MySQL

<!-- Kildetekst til en MC-test. Teksten kan direkte indlæses, som den er -->

CentOS 7. Lavet af Ali Sarac og Andreas Jensen

Dokumentation. Karen-Louise Fejerskov

Koden i denne guide vil kun virke i Flash MX 2003 og MX ikke ældre versioner!

I denne arktikle går jeg gennem Slet, Ret og Opret data i en MySQL database. der er også en lille del i den hvor den postere datanen ud i en løkke

Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script.

Webmaster Sweet-Swing.dk Websidens opbygning. Som eksempel er brugt siden om korets målsætning som den vises i editoren.

At klippe en streng over på det mest hensigtsmæssige sted

workflow Programmer: Om opgaven: Kvalitetsvurdering: Afsender: Modtager: Cathrine Laulund Web: Dreamweaver Billedbehandling: Photoshop

ECdox som favorit. Indledning 1. Internet Explorer 2. Chrome 4. Safari 5. Favorit på mobile enheder 6 Android 6 IOS 7. ECdox på mobile enheder 7

Sådan skriver du artikler til Eksperten!

Det er primært relevant for dem hvor der arbejdes på en gammel bærbar computer, som ikke har en stærk processer og nok ram, at gøre godt med.

Lad os lave en hjemmeside. Kikker du på vil du højst sandsynligt se dette.

Start på javascript. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 03. Feb 2009 af webstuff I kategorien Programmering / JavaScript

Afsending af s vha. ASP

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

GRAFISK WORKFLOW H1 MARIA SCHELDE

Denne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-)

Password-beskyttelse af visse filer

Forståelse for grafisk produktion og workflow

Forskellige Java versioner

Undtagelseshåndtering i C#

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Encoding:...1 Et tegn sæt (character set):...1 UTF-8 og UTF-16 (Unicode):...2

Kalender med mailingliste

GRAFISK PRODUKTION & WORKFLOW. Endotest website

Procesbeskrivelse - Webprogrammering

Programmering i Javascript

Upload af billeder/filer for nybegyndere Del. 2

Vejledning i upload af serier til Danske tegneseriskaberes app.

jquery - selectors, attributes, traversing og manipulation

Lad os lave en hjemmeside. Kikker du på vil du højst sandsynligt se dette.

Drop tables til design, og få fuld udbytte af CSS!

Lav din egen forside i webtrees

Lav en hjemme side der kan sælge fly billetter til en stor i Europa.

Delphi og Databaser for begyndere

Grafik & Billede weloveorganic.com webshop

Arrays og deres slægtskab med objects

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

GRAFISK WORKFLOW OPGAVEBESKRIVELSE KVALITETSVURDERING HJÆLPEMIDLER BROWSER BRUGERVENLIGHED/USABILLITY

Manual til AVG Antivirus

Her vil jeg forsøge at gennemgå hvordan vi kan opnå at centrere en»div-container«både vertikalt og horisontalt i browser vinduet.

Nyhedssystem med mailingliste

Manual til administration af online booking

Gæstebog med validering opbygget med MySQL

Indledning. MIO er optimeret til Internet Explorer. Læs endvidere under Ofte stillede spørgsmål.

Arrays i PHP. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 04. Feb 2009 af taskmgr I kategorien Programmering / PHP

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

PHP Quick Teknisk Ordbog

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.

Dokumentation af computerens anatomi

VIS NOGET ANDET, MENS WEBSIDEN

IT projekt uge 4 9. Marie Vinter, Roskilde Tekniske Gymnasium, klasse 2.6 IT, bw, uge

Brugervejledning til Design Manager Version 1.02

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

For dig som skal levere programmer til bideo.dk

Efterlyst! Introduktion HTML & CSS. I dette projekt skal du lære, hvordan du laver din egen plakat. Arbejdsliste. Test dit Projekt.

Regulære udtryk, 2. del

Fremstilling af en hjemmeside

Web sider. Introduktion: Har du nogensinde spekuleret over, hvordan det verdesomspændende internet virker og hvordan man snakker med det?

TYPO3 TRIN FOR TRIN 3

JavaScript. nedarvning.

Loginsystem (med MySQL)

Opkobling af COMFORT:NET til internettet 1. Registrering via ezr home.de

Guide til Umbraco CMS

GRAFISK WORKFLOW. Kasper Staal - Portfolio - H2

BRUGER KURSUS RAMBØLL HJEMMESIDE

TEKNISK DOKUMENTATION FAKTURA LAYOUT ABAQUE VERSION 2.0

portfolio GRAFISK WORKFLOW

Sådan tager du grundkurset i hjv.dk

FBS for praktikere Fyn. Notifikation og print skabeloner

Bootstrap Tutorial LAV EN SIMPEL RESPONSIVE SIDE MED BOOTSTRAP MATHIAS HERSKIND GROTRIAN

Tastevejledning Windows XP

Birgitte Bremholm Persson MG21 svendeprøve 2015 MEDIEGRAFIKERSVENDEPRØVE

Byggebasen Javascript

Kom godt i gang. Sitecore Foundry maj Version 1.1

Transkript:

Denne guide er oprindeligt udgivet på Eksperten.dk Tilpasning til skærm og browser Du har lavet en kode, som fungerer fortrinligt på din egen computer. Glad og tilfreds lægger du din hjemmeside på Nettet. Dagen efter får du at vide af dine bekendte, at hjemmesiden ser helt forkert ud hjemme hos dem. Skrevet den 03. Feb 2009 af per1291 I kategorien Programmering / JavaScript Selv om en kodestump virker på din egen computer, så kan du ikke være sikker på at den virker på samme måde på andre computere. Der skal tages højde for, at andre brugere har andre skærme - og andre browsere. Lad os først kigge på, hvordan siden tilpasses andre skærme. FASTSÆT STØRRELSEN AF DET DU VISER Din side ser pæn ud på din egen skærm. Man kan se hele teksten på én gang, altså uden at bruge scroll-pilene. Du vil gerne have siden til at se cirka ligesådan ud på andre skærme. Hvis brugeren har en skærm med en meget lav opløsning eller et meget smalt vindue, eller hvis brugeren har aktiveret "Vis oversigt" i sin browser, så kan det blive nødvendigt at din tekst fylder hele den tilgængelige del af vinduet - og måske er dette ikke engang nok til, at hele teksten kan vises på én gang (selv om det ville være det mest elegante). Så må du finde dig i, at teksten vises med scrollbars. Hvis brugeren har en skærm med meget høj opløsning, og samtidig et meget bredt vindue på sin skærm, så skal din tekst ikke fylde hele vinduet - for så bliver linjerne så lange at de er svære at læse. Siden fylder 600 pixels i bredden. Opgaven består derfor i at definere et tekstområde, som skal være præcis 600 pixels bredt. Metode: 1. Teksten anbringes i en div "BodyDiv", som bringes til at fylde hele den tilgængelige del af vinduet. 2. Bodybredde og Bodyhøjde aflæses, for at se hvor meget SYNLIG plads der i virkeligheden er adgang til. 3. Divbredden sættes til 600 pixels, og Divhøjden sættes automatisk til den nødvendige størrelse. OBS: I punkt 1 har jeg givet "BodyDiv" en lysegrå baggrundsfarve, sådan at du tydeligt kan se hvor meget den fylder. OBS: Aflæsningerne i punkt 2 er i virkeligheden overflødige, men foretages for at tydeliggøre hvad der sker. OBS: I punkt 3 fremkommer en vandret scrollbar, såfremt Bodybredden er smallere end 600 pixels. I bunden af artiklen ses koden, nemlig i dokumentets første javascript. Prøv at køre koden både med og uden "Vis oversigt", og med forskellige vinduesstørrelser, for at se forskellen.

(OBS: For at opnå et pænt resultat kunne det være fristende, i stedet at ændre brugerens VINDUESSTØRRELSE efter dine behov. I min første version af denne artikel var det præcis dét jeg gjorde. Men jeg ønsker især at fremme "god programmeringsskik", og ekspertbrugeren roenving gjorde venligt opmærksom på, at det ikke er hensigtsmæssigt at pille ved den vinduesstørrelse, som brugeren har valgt som sin foretrukne. Jeg har derfor i denne version kun vist, hvordan man ændrer på størrelsen af den del af det givne vindue, som skal bruges.) Resten af denne artikel handler om tilpasning til browseren. DET TRADITIONELLE BROWSERCHECK I 1998 lavede jeg min første hjemmeside vha. HTML og Javascript. Jeg lærte de to sprog ud fra oversigter, vejledninger og kodeeksempler på Internet. Men i årenes løb har sprogene udviklet sig, og mange af anvisningerne er nu forældede. Mange af de kodestumper, som brugerne på eksperten.dk indsender, er nogle de har fundet rundt omkring på Internet. En del af dem indeholder browsercheck. Det er ofte tegn på, at programstumpen er nogle år gammel og bør moderniseres. Et browsercheck er en kodestump (ofte kaldet en "browser-sniffer"), som finder NAVNET på brugerens browser. Her har du et eksempel: function browsersnif() if (navigator.useragent.tolowercase().indexof("netscape")>=0) return "Netscape" if (document.all) return "MSIE" return "Ukendt" Funktionen vil returnere "Netscape" hvis den første if-sætning er sand, "MSIE" hvis den anden if-sætning er sand, og "Ukendt" i alle andre tilfælde. Der er brugt to forskellige checkmetoder i den viste funktion. Netscape-checket spørger browseren direkte, hvad den selv hedder. Det er altså et rent NAVNECHECK. Microsoft Internet Explorer-checket spørger browseren, om udtrykket "document.all" overhovedet giver mening for den. Det kunne man kalde et FEATURECHECK. Senere i scriptet vil resultatet af dette browsercheck blive brugt til at vælge imellem, hvilke instruktioner der skal udføres. Her et eksempel (som selvfølgelig ikke virker uden noget mere kode): var browser=browsersnif() if (browser == "Netscape") Netscape_function() if (browser == "MSIE") MSIE_function() NAVIGATOR.USERAGENT Ved at skrive sådan her i adressefeltet i din browser: java script:alert(navigator.useragent) kan du få oplysninger om din egen browser og dit styresystem.

I min browser Microsoft Internet Explorer 6.0 er navigator.useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; i-navfourf)" I min browser Opera 7.54 er navigator.useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.54 [da]" I min browser Netscape 7.2 er navigator.useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-us; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax)" I min browser Mozilla Firefox 1.0 er navigator.useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; da-dk; rv:1.7.5) Gecko/20041118 Firefox/1.0" Hvis jeg selv i dag (2005) ville bruge et browsercheck til at fortælle, hvilken af mine browsere der kører min kode lige nu, så kunne det se sådan her ud: function browsersnif() var ua=navigator.useragent.tolowercase() if (ua.indexof("opera")>=0) return "Opera" if (ua.indexof("msie")>=0) return "MSIE" // Bemærk rækkefølgen af msie- og opera-checket! if (ua.indexof("netscape")>=0) return "Netscape" if (ua.indexof("firefox")>=0) return "Firefox" return "Ukendt" // Denne linje tager højde for alle mulige andre browsere, f.eks. Safari alert("browseren er en "+browsersnif()) Opera er en meget kræsen browser - vil kun æde kode, som er meget korrekt. Vil du tjekke om din kode virker næsten alle steder, så brug Opera. Hvis Opera viser din side som den skal, så er det sandsynligt at de fleste browsere gør det samme. Mozilla Firefox er næsten altædende - tolerant over for en del småfejl. Vil du have en browser, der kan forstå næsten alt, så brug Firefox. BROWSERCHECK ER SJÆLDENT OPTIMALT I grunden er browsercheck i mange tilfælde en uhensigtsmæssig metode. Hvis det på nogen måde kan undgås at bruge browsercheck, så er det bedst at gøre dette. Lad være med at spørge browseren hvad den hedder! Grundene er disse: 1. Browsercheck kræver stor viden hos programmøren. Du skal vide præcis hvilke egenskaber hver enkelt browser har. Det er ikke nok at vide, at "nogle browsere gør sådan, og andre browsere gør sådan" - Du skal holde rede på, præcis hvilke browsere der gør hvad. 2. Visse browsere kan indstilles til at give fejlagtige navneoplysninger om sig selv med vilje - jeg forstår ikke rigtig hvorfor, men sådan er det. 3. Browsercheck tager ikke højde for ukendte browsere. Der kan findes browsere på markedet, som jeg aldrig har hørt om - eller der kan blive frigivet en splinterny browser i morgen. Min kode kan derfor ikke tage højde for disse browsere.

4. Mange Browsercheck er forældede. Det er omsonst at checke, om brugeren har en Netscape 4 eller en Internet Explorer 3 browser. INGEN kører med sådanne forældede browsere i dag. (Og hvis der alligevel skulle være en enkelt Netscape 4- bruger tilbage i verden, så er vedkommende allerede nu blevet vænnet til, at de fleste moderne sider er "lukket land".) Et browsercheck har normalt begrænset levetid - fordi der hele tiden udkommer nye browsere. Og vi kan ikke engang være sikre på at nye versioner af den samme browser vil være bagud-kompatible. Erfarne programmører er for længst holdt op med at skrive kode, som tager højde for forældede browsere som Internet Explorer 3 og Netscape 4. I de fleste scripts bruger de slet ikke browsercheck. Til gengæld kender disse programmører en masse browsersvagheder, som de derfor mere eller mindre automatisk skriver udenom. ALTERNATIVET: FEATURECHECK Jeg ved, at mine browsere hver for sig har deres særheder. Nogle af disse særheder eller svagheder bliver jeg først opmærksom på, når jeg tester mine sider i de forskellige browsere. Der findes kode, som Netscape ikke kan håndtere, f.eks. "document.all". Heldigvis kan denne kode erstattes af "document.getelementbyid", som alle moderne browsere forstår. Der findes kode, som Internet Explorer ikke kan håndtere, f.eks. "window.innerwidth". Heldigvis kan denne kode erstattes af "document.body.clientwidth", som alle moderne browsere forstår. Det er ofte muligt at finde en notation, som alle browsere forstår. Men i nogle tilfælde er det alligevel nødvendigt at skrive et stykke kode i mere end én version. Man kan i mange tilfælde erstatte et browsercheck med noget andet og i virkeligheden bedre. En gammel talemåde siger: "Du skal gå til hovedet, ikke til halen..." Oplysning om browserens NAVN er HALEN. Oplysning om browserens HÅNDTERING af en konkret kode er HOVEDET. Derfor vil jeg gerne slå til lyd for, at man i stedet for at spørge browseren hvad den hedder, spørger browseren hvordan den vil håndtere en konkret kode. I de fleste tilfælde kan programmøren være ligeglad med, hvilken browser brugeren benytter. Det eneste interessante er at vide, hvilke instruktioner der kan forstås og udføres hos den aktuelle bruger. Med andre ord, et browsercheck er ofte overflødigt. Man kan lave bedre og mere levedygtig kode vha. et Featurecheck: Check hvad browseren GØR (eller VIL gøre) i den KONKRETE situation. Det er stadig vigtigt for programmøren at vide, at browsere opfører sig forskelligt i bestemte situationer. Heldigvis er det som oftest ikke nødvendigt at HUSKE præcis hvilke browsere der gør hvad. Man kan nøjes med at vide, at disse forskelle findes. Og så kan man i det konkrete tilfælde spørge den konkrete browser: Hvordan reagerer DU på denne kode? Du kan aldrig sikre dig 100%, at din side vil se rigtig ud i enhver browser.

De færreste er fortrolige med alle browsere og hvilke svagheder de har. De færreste har adgang til at teste en side i alle browsere. De færreste kender den browser, som først kommer på gaden i morgen. En ukendt browser kan have andre svagheder end dem, du selv har kendskab til. Men sandsynligheden er stor for, at den vil reagere på en konkret kode ligesom Opera, Netscape, Firefox eller Explorer. Derfor er Featurecheck oftest bedre end Browsercheck. (En undtagelse er, når man benytter sig af special-features, f.eks. et filter skrevet af Microsoft og udelukkende brugbart i Microsoft Internet Explorer.) EKSEMPEL: EN RULLETEKST Jeg fik til opgave at lave en rulletekst. Den rullende tekst skulle være så lang, at den fyldte mere end det definerede tekstområde på 600 pixels. Teksten skulle køre ud i ét, sådan at den hele tiden blev bragt i forlængelse af sig selv, dvs. rullefeltet måtte aldrig blive tomt. Jeg valgte denne metode (RulleMetode1): 1. Anbring teksten i et rullefelt i form af en div. <Løkke> 2. Rul 1 pixel ad gangen vha. style.left--, indtil du er kommet igennem første bogstav; 3. Flyt første bogstav bagest i din string; 4. Anbring den nye string i din div vha. innerhtml; 5. Nulstil style.left; </Løkke> Denne kode fungerer fint i Internet Explorer og Opera. Men det viser sig at den giver en flakkende tekst i Netscape og Firefox. Disse browsere vil nemlig vise et kortvarigt glimt af en blank div, hvergang man ændrer innerhtml. (Hvis man nøjes med at ændre innerhtml mens rullefeltet er tomt, vil brugeren ikke opleve nogen flakken i Netscape. Men i den bestilte rulletekst må rullefeltet aldrig være tomt. Der vil altid være bogstaver på skærmen.) Så jeg lavede en ny kode i det håb, at problemet hermed var løst (RulleMetode2): 1. Sæt din tekststreng S=S+S førend du anbringer den i rullefeltet; <Løkke> 2. Rul 1 pixel ad gangen vha. style.left--, indtil du er kommet igennem første halvdel af din string; 3. Nulstil style.left; </Løkke> Denne kode fungerer fint i Netscape og Mozilla Firefox. En test viser at koden også fungerer i Internet Explorer. Men i Opera opstår et nyt problem: Rullefeltet bliver bredere end vinduet, sådan at der fremkommer en overflødig scrollbar i bunden af vinduet. Opera medregner åbenbart også det usynlige overflow i bredden! Status er altså:

I browseren Opera bør man bruge RulleMetode1. I browserne Netscape og Mozilla Firefox bør man bruge RulleMetode2. I browseren Internet Explorer kan man bruge begge metoder. Man kunne fristes til at bruge et browsercheck: if (browser == "opera") RulleMetode1() else RulleMetode2() Men det ville være en falliterklæring. En række test viser, at: I Netscape og Mozilla Firefox vil teksten aldrig fylde mere end Bodybredden. I Opera og Internet Explorer fylder teksten derimod mere end Bodybredden. Så det lykkedes at erstatte browserchecket med dette Featurecheck: if (finddivbredde(rulletekst+rulletekst) > 600) RulleMetode1() else RulleMetode2() - - - Måske vil enhver browser, der behandler overflow på samme måde som Opera, også lave "flakfri" opdatering af innerhtml. Måske. Jeg kan ikke vide det. Ellers må brugeren finde sig i lidt flakken. Jeg har lavet en generel løsning, som er tilpasset særhederne i alle mine 4 browsere. Jeg har taget højde for de forskelle, som jeg kender til. Intetsteds i min kode spørger jeg om browserens NAVN. Der er ikke garanti for, at min kode giver et pænt resultat i browsere, som jeg ikke kender. Men der vil sikkert være nogle af de ukendte browsere, der i en konkret situation gør ligesom Opera, og andre browsere, der gør ligesom Mozilla Firefox. Og måske er der browsere, som gør noget helt andet. Det kan jeg ikke vide, og det må jeg leve med, indtil en venlig bruger sender mig en meddelelse om fejlen. Hvis jeg udelukkende havde brugt NAVNECHECK i min kode, så ville min kode have ringere chancer for at fungere i de browsere jeg ikke kender. En bemærkning på falderebet: Hvis brugeren manuelt ændrer størrelsen på sit vindue, mens rulleteksten er i gang, så kan der forekomme uhensigtsmæssigheder. Disse uhensigtsmæssigheder kan du selv tage højde for; den sikreste metode er at lave en settimeout, som løbende aflæser vinduets bredde - og ved ændringer tildeler nye værdier til rulle-variablerne. SLUT PÅ ARTIKEL! - Her følger et HTML-dokument: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>tilpasning til skærm og browser</title> <script language="javascript" type="text/javascript"> /* DETTE SCRIPT SØRGER FOR SKÆRMTILPASNING AF ET TEKSTOMRÅDE */ var DivBredde=600; /* antal pixels i bredden */ function AngivDimensioner()

document.getelementbyid("b1").innerhtml=window.screen.availwidth+" pixels"; document.getelementbyid("h1").innerhtml=window.screen.height+" pixels"; document.getelementbyid("b2").innerhtml=document.documentelement.clientwidth+" pixels"; document.getelementbyid("h2").innerhtml=document.documentelement.clientheight+" pixels"; document.getelementbyid("b3").innerhtml=document.getelementbyid("b2").innerhtml; document.getelementbyid("h3").innerhtml=document.getelementbyid("h2").innerhtml; document.getelementbyid("bodydiv").style.height=document.documentelement.clientheight+"px"; function ResizeBodyDiv() document.getelementbyid("b4").innerhtml=divbredde+" pixels"; document.getelementbyid("bodydiv").style.width=divbredde+"px"; document.getelementbyid("bodydiv").style.height="auto"; document.getelementbyid("h4").innerhtml=document.getelementbyid("bodydiv").offsetheight+" pixels"; alert("slut på resize...\n\nprøv igen med forskellig højde og bredde på vinduet, og både med og uden 'Vis oversigt'!") </script> <script language="javascript" type="text/javascript"> /* DETTE SCRIPT SØRGER FOR BROWSERTILPASNING AF EN RULLETEKST */ var Rulletekst=" *** Denne rulletekst fungerer i både Microsoft Internet Explorer 6.0, Opera 7.54, Netscape 7.2 og Mozilla Firefox 1.0"; Rulletekst=changechar(Rulletekst," ","\240"); /* For at undgå problemer med blanke i start og slut */ var Minimumbredde=580; /* mindste tekst der må anbringes i Rullefelt */ var movepixels=1 /* antal pixels der flyttes ad gangen */ var milliseconds=20; /* interval mellem opdateringer */ var Tegnbredde, Antaltegn; /* bruges af Rullemetode1 */ var scrolled, Tekstbredde; /* bruges af Rullemetode2 */ var Timer; /* timeout-variabel */ function changechar(s,oldchar,newchar) return S.split(oldchar).join(newchar); function finddivbredde(s) var U=document.getElementById("usynligdiv"); U.innerHTML=S; var width=parseint(u.offsetwidth); U.innerHTML=""; return width; function findtekstbredde(s) var width=0, U=document.getElementById("usynligtekst"); S = S.split(""); for (var i=0; i<s.length; i++) U.innerHTML=S[i]; width+=parseint(u.offsetwidth); U.innerHTML=""; return width; function RulleMetode1()

var id=document.getelementbyid("rullefelt"); Tegnbredde-=movepixels; if (Tegnbredde <= 0) Tegnbredde+=findTekstbredde(Rulletekst.substring(0,1)); Rulletekst=Rulletekst.substring(1,Rulletekst.length)+Rulletekst.substring(0,1); Antaltegn--; var showstring=rulletekst.substring(0,antaltegn), i=antaltegn; while (finddivbredde(showstring) < Minimumbredde) showstring+=rulletekst.substring(i,i+1); i++; Antaltegn=i; id.innerhtml=showstring; id.style.left = Tegnbredde+"px"; Timer=window.setTimeout("RulleMetode1()",milliseconds); function RulleMetode2() scrolled-=movepixels; if (-scrolled >= Tekstbredde) scrolled+=tekstbredde; var id=document.getelementbyid("rullefelt"); id.style.left = scrolled+"px"; id.style.width = (Minimumbredde-scrolled)+"px"; Timer=window.setTimeout("RulleMetode2()",milliseconds); function StartRulletekst() window.cleartimeout(timer); var tekstbredde=findtekstbredde(rulletekst); var W=document.body.clientWidth; /* Skærmbredden */ var L=0; if (W > 600) L=Math.round((W-600)/2); /* Afstanden fra skærmkant til rulletekst */ var Lstyle=document.getElementById("rulleleft").style; Lstyle.left=(-L-20)+"px"; Lstyle.width=(L+20+60)+"px"; /* De 20 px udjævner usikkerhed i f.m. clientwidth) */ document.getelementbyid("rulleright").style.width=(l+60)+"px"; if (finddivbredde(rulletekst+rulletekst) > 600) /* Risiko for en overflødig scrollbar */ alert("rullemetode2 vil medføre at 'rullediv' får en bredde > 600px.\n\nDerfor bruges RulleMetode1"); var showstring="", i=0; while (finddivbredde(showstring) < Minimumbredde) showstring+=rulletekst.substring(i,i+1); i++; Antaltegn=i; Tegnbredde=findTekstbredde(Rulletekst.substring(0,1)); document.getelementbyid("rullefelt").innerhtml=showstring; RulleMetode1(); else alert("rullemetode2 vil IKKE medføre at 'rullediv' får en bredde > 600px.\n\nDerfor bruges RulleMetode2"); Tekstbredde=findTekstbredde(Rulletekst); Rulletekst+=Rulletekst; document.getelementbyid("rullefelt").innerhtml=rulletekst; scrolled=0; RulleMetode2();

</script> <style type="text/css"> body font-family:arial,verdana,helvetica,sans-serif; font-size:16px; #usynligtekst position:absolute; left:0px; top:0px; font-weight:bold; height:19px; font-size:15px; visibility:hidden; #usynligdiv position:absolute; left:0px; top:0px; font-weight:bold; height:19px; font-size:15px; visibility:hidden; #BodyDiv background-color:#eee; width:100%; h1 font-size:30px; td font-size:16px; #rullebackground position:relative; left:0px; width:600px; top:0px; height:19px; background-color:#111; #rullefelt position:absolute; left:0px; width:580px; top:0px; height:19px; z-index:3; overflow:hidden; fontweight:bold; color:yellow; font-size:15px; #rulleleft position:absolute; left:0px; width:60px; top:0px; height:19px; z-index:4; backgroundcolor:white; #rulleright position:absolute; left:540px; width:60px; top:0px; height:19px; z-index:4; backgroundcolor:white; </style> </head> <body onload="angivdimensioner()"> <!-- Den følgende del af body indeholder tabellen --> <center> <div id="bodydiv"> <h1>tilpasning til skærm</h1> <table width="80%" cellspacing="0"> <tr><td width="50%"></td><td width="50%"></td></tr> <tr bgcolor="yellow"><td>skærmbredde:</td><td id="b1" align="center" <tr bgcolor="cyan"><td>skærmhøjde:</td><td id="h1" align="center" <tr bgcolor="yellow"><td>synlig Bodybredde:</td><td id="b2" align="center" <tr bgcolor="cyan"><td>synlig Bodyhøjde:</td><td id="h2" align="center" </table> <h1>"bodydiv" før Resize:</h1> <table width="80%" cellspacing="0"> <tr><td width="50%"></td><td width="50%"></td></tr> <tr bgcolor="yellow"><td>maksimal synlig Divbredde:</td><td id="b3" align="center" <tr bgcolor="cyan"><td>maksimal synlig Divhøjde:</td><td id="h3" align="center" </table> <br> <button onclick="resizebodydiv()">udfør resize</button> <p> <h1>"bodydiv" efter Resize:</h1> <table width="80%" cellspacing="0"> <tr><td width="50%"></td><td width="50%"></td></tr> <tr bgcolor="yellow"><td>aktuel Divbredde:</td><td id="b4" align="center" <tr bgcolor="cyan"><td>aktuel Divhøjde:</td><td id="h4" align="center"

</table> [/div] <!-- id="bodydiv" --> </center> <!-- Den følgende del af body indeholder rulleteksten --> <center> <br> <button onclick="startrulletekst()">start rulletekst</button> <p> <div id="rullebackground"> <div id="usynligtekst">[/div] <div id="usynligdiv">[/div] <div id="rullefelt">[/div]<div id="rulleleft"> [/div]<div id="rulleright"> [/div] [/div] <!-- id="rullebackground" --> </center> </body> </html> Kommentar af roenving d. 30. Jul 2005 1 Det ser ikke ud til at man kan fjerne irrelevante kommentarer, så man må vel nøjes med at konstatere, at den deaktiverede bruger ingeborg08 bare har lukket l*** ud... Kommentar af foxmulder58 d. 31. Jul 2005 2 Fin artikel hvor du går i dybden og hvor du illustrerer hvordan man får bugt med de problemer der kan være med en fremvisning af en side korrekt i en given browser. Nogle af ekspemplerne er lidt svære at forstå, men du kunne have afsluttet din artikel med et eksempel på hvordan man løser problemet uden JavaScript (i tilfælde af brugeren skulle have deaktiveret selvsamme i browseren). Eventuelt en brug af flere designs til forskellige opløsninger. mvh Mads Kommentar af qtax87 (nedlagt brugerprofil) d. 29. Sep 2006 3 ingeborg08> slap da lige af! Fin artikel synes der er mange god eksempler, og gode tanker/ider omkring brugeren af det. Kommentar af serverservice d. 16. Aug 2005 4 En artikel som jeg har ledt længe efter, men skal bruge lidt mere tid på de detaljer. Mange detaljer - Godt lavet og fuld score herfra. Kommentar af visualdeveloper d. 15. Aug 2005 5 Kommentar af ingeborg08 d. 29. Jul 2005 6 Mage til lorteartikel og makværk skal man sørme lede længe efter!!! Du må have en dårlig smag i munden.