05. oktober 2005 - 18:02Der er
36 kommentarer og 1 løsning
CSS og JavaScript til bestemelse af højde
Hej
Som overskriften siger ønsker jeg at bestemme højden udfra hvordan clietens opløsning og højde på browser vinduet.
Jeg har som mange andre problemet med at min højde skal være 100% i browser vinduet. Hvis jeg skriver det i css ændre den de øverste cellerns højde hvis man ser det i IE men i Firefox virker det.
Jeg har så ladet mig høre, at jeg skal gå efter en Script løsning som går ind og måler højden på "vinduet" og det resterende der skal til for at det er 100% lægges til i den rigtige celle.
Trin et: Brug div elements :) http://html.dk/artikler/00043/ Arj.. jeg tror problemet er, at du ikke laver #td_banner høj nok, derved udfyldes den oevrskydende plads med baggrundsfarven, hvis browseren er "for stor".. Du kan altid lave billedet for stort, og "forkorte" det i css, men det er måske en smule sølle.. En anden og nok bedre metode, er at sætte backgroun:#FAE704 url(http://www.miniklub-mv.dk/nytsite/gfx/baggrunde/vb.jpg) top left no-repeat; Så har du sat den til øverste venstre hjørne, så den ekstra plads ikke kommer ovenover, og erstattet det hvisde stykke med en nogenlunde habil baggrundsfarve.. Husk også lige at sætte højden til 113 i stedet ;)
Undskylder den lange ventetid... Jeg ville foreslå at du delte det op, så du har: <div id="container"> <div id="venstreskaktern"></div> <div id="main"> <div id="logo"></div> <div id="fyld"></div> <div id="venstre_menu"></div> <div id="text"></div> <div id="højre_menu"></div> </div> <div id="højreskaktern"> </div>
Hvis du kan følge mig :) Fordelen med dette er at samtlige elementer kommer til at lægge sig op ad hinanden, så du ikke får nogle uønskede mellemrum...
Jeg har nu næsten fået højden 100%, nu skal jeg bare ha gjort sådan at det øverste ikke er gennemsigtigt. Og at jeg som sagt kan se de streger jeg har lavet, er det ikke noget med overflow?
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>mk-mv</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> body, html { height: 100%; margin:0px; }
Ahh.. super smart.. Sad og bøvlede med det før, med denne løsning er langt smartere.. Her kommer div virkelig til sin ret. For nu kan du jo bare lave et nyt element hvor logoet og fyldet er, og "overskrive" baggrunden, så du får noget i retningen af: ... #text { position:absolute; left:50%; top:141px; width:460px; margin-left:-230px; } ... #content { position:absolute; left:50%; width:692px; margin-left:-368px; }
Joda.. Jeg får det til noget i retningen af dette her.. Du skal måske lige sætte padding-top:141px ved højre og venstre menu... Men her er hvad jeg har fusket mig frem til:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>mk-mv</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> body, html { height: 100%; margin:0px; }
Men lige en lille ting til sidst. Til højre fra skakternene i venstre side, kan man ikke se den lodrette streg, tror den bliver overdækket af noget andet?
Ja rigtigt nok.. Men hvis du sætter #venstre_menu's margin-left til at være en mindre, kommer menuen til at skride ud over #fyld's lodrette linie... Måske skulle du overveje at gøre baggrundsbilledet til #fyld en px større :) ja.. Div er smart - når man kan finde ud af at bruge det vel at mærke.. :)
Det er fordi du har sat #venstre_menu for langt til venstre, så den bliver overlappet af #venstreskaktern... Prøv at sætte: #venstre_menu { margin-left:-345px; }
Ja ok det er lige en biting.. Hvad nu hvis man tager et screenshot af det hele, og smider hele siden ind som baggrund, der gentages lodret, på #content?.. Så kan du bare smide logoet osv ind over?... Håber ikke det lbiver for bøvlet.. Du må undskylde at jeg formentlig ikke er det største orakel inden for CSS ;)... Kan ikke se om der er noget galt med højre menu?.. hverken i firefox eller IE..
Hvis man lærer om webkodning på html.dk, spænder man godt nok også ben for sig selv! :)
Det er godt nok mere end vanskeligt at finde gode tutorials om HTML, CSS, DOM og JS - men til gengæld kan man være sikker på, ikke at finde dem væsentligt dårligere end html.dk. End ikke w3cschools.com - som jo også er fyldt med fejl, udeladelser og misforståelser - er dårligere.
Prøv at checke roenvings links (05/10-2005 23:01:28). De er nok tæt på det bedste bud, du kan finde til en løsning ;o)
Man skal ikke kimse af HTML.dk :) Det er faktisk en glimrende vejledning, men nok mest til nybegyndere... - Og det gode ved html er, at man næsten altid opdager fejlene hvis der skulle være nogen...
lige præcis morten... Mit forslag ville være at sætte ind på #content, og så lave en div inde i #content, der bare har de 44px mindre i margin-left og margin-right, og indeholder alle de andre divs, bare uden baggrund...... Selvfølgelig med undtagelse af logoet od #fyld...
Jeg kimser skam ikke af noget, men siger tingene, som de er :) html.dk's artikler og tutorials er fyldt med fejl - og rigtig mange af de spørgsmål, der oprettes i (D)HTML- og JavaScript-kategorierne har deres udspring i de fejl.
Et glimrende eksempel er deres XHTML-tutorial. Efter at have læst den er man langt fra i stand til at lave et fungerende XHTML-dokument. I stedet laver man et dårligt HTML-dokument, fyldt med fejl. Det må vel siges at ligge langt fra formålet med en tutorial ... så langt fra, som muligt :)
Ikke mindst, når man skriver tutorials for begyndere, er det ekstremt vigtigt, de ikke er fyldt med fejl. De kan jo ikke selv gennemskue, hvad der er rigtigt og forkert - som en kompetent koder kan
Kunne jeg egentlig ikke også gøre det ret simpelt. Blot ved at sætte venstre og højremenu margin-top til 0px og så lave en ny div som indeholder menuernes indhold?
Må indrømme jeg ikke lige har læst om xhtml... Men du har ret i, at det er godt de er fejlfri, men jeg syntes stadig jeg har lært meget af dem.. Learning by doing når man gør noget forkert er heller ikke uden værdi :) lige præcis det jeg mente :).. det kommer til at være noget i retningen af dette:
<div id="container"> <!-- evt. <div id="wrapper"> hvor margin left og right = 44px --> <div id="logo"></div> <div id="fyld"></div> <div id="main> <div id="venstre_menu"></div> <div id="text"></div> <div id="højre_menu"></div> </div> <!-- </div> --> </div>
Ja, men burde det ikke kunne lade sig gøre ved at lave venstre og højre menu + tekst oprådet ligesom skatflagene altså starter fra toppen og hele vejen ned. Har forsøgt lidt men roder vist lidt rundt i det. Men går det ind og forhindre når man bruger padding-top så?
Altså jeg er ikke helt sikker på hvad du mener, men mit forslag var, at du satt en baggrund af venstreskaktern + venstremenu + tekst + højremenu + højreskaktern til at være baggrund for hele siden(#container) og sætte logoet(#logo), fyldet(#fyld), teksten og menuerne (#main - #venstre- og #højremenu + #text) ind oven på #container. Så har du en baggrund i #container, der kører hele vejen ned, og altid følger #main's højde. så....: #container { width:(bredden af hele_sidens_baggrund.jpg) bagground: url(..../hele_sidens_baggrund.jpg) top left repeat-y; } mens #wrapper { margin-left:bredden af skaktern t.v.; margin-right:bredden af skaktern t.h.;
God ånd! :) - Skal nok prøve at forklare mig ordentligt... Mit princip er, at du har den yderste div: #container med hele baggrunden (skaktern, menu osv.) som baggrund for _hele_ siden.. Inde i #container har du så #wrapper, der indeholder logoet, fyldet og main (med menuer og tekst). Grunden til, at #wrapper har margin-left og margin-right sat til 44px, er at de tidl. baggrunde for venstre- og højre_skakter, havde en bredde på 44px. Og #wrapper indeholder jo "indholdet", og det skal helst ikke flyde ud i skakternene... SÅ hvis jeg prøver at tegne det :)
Så du yderst har #container, der indeholder hele siden, med en centreret baggrund. (* betyder skaktern :-) ).. Men inden i #container er #wrapper, med margin left og right sat til 44 px for at undgå at logoet, fyldt, menuerne og teksten skrives over skakternene(*)... :) Håber du er med nu ..
Hmm... Det bliver sku lidt rodet rundt det jeg er kommet frem til. Kan jeg få dig til at komme med oplæget? Alle mine menuer er flyttet rundt over det hele nu.
Se.. Hele pointen med at lave en "global" baggrund, er netop at #text bliver positioned som relative, så baggrunden følger med højden. Hvis den, som nu, er sat til position:absolute; bliver det et uafhængigt element; dvs. et element der fx ikke har noget at gøre med dets parents baggrund... Jeg har prøvet at omskrive din css så alle elementerne bliver relative...:
html { height:100.1%; }
body { font-family: trebuchet ms; font-size: 12px; text-align:center; }
.. Det er måske ikke så grundigt, men jeg er sikker på du kan tage over herfra :)... Nå jo btw.. Du må ikke navngive et div element med de danske bogstaver æøå. Så kan css ikke identificere det .. Held og lykke med. Håber ikke jeg har forvirret dig for meget
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.