Avatar billede webweaver Praktikant
17. juli 2011 - 01:10 Der er 12 kommentarer og
1 løsning

Problemer med vertical-align af menu

Hej folkens

Jeg sidder her og kæmper med at få en menu centreret vertikalt.
Det drejer sig om en menu - en række a-tags i en div.

Jeg kan simpelt hen ikke få ****** til at se ens ud i diverse browsere. Jeg får eet resultat i IE 8, et andet i IE 9 og et helt tredie i Chrome og FF. Jeg kan godt få enten IE 8 og IE 9 til at vise det ens eller IE 9, Chrome samt FF. Men alle på een gang kniber sgu og det er det jeg vil ha'!

Jeg er selv løbet tør for ideer efterhånden.
Det virker ikke ikke at sætte vertical-align: middle; på a-tags eller div. Jeg har prøvet at gøre dem til et inline element for at se hvilken effekt det gav. Desværre ingen som fungede fint crossbrowsed. Så har jeg rodet med line-height og her indtræder det helt store irritationsmoment. At centrere ud fra line-height virker på sin vis helt fint, der er bare den lille ting, at der er 1 pixel til forskel på det i IE 8 og IE 9. Chrome og FF viser det på samme måde som IE 9. Jeg kan ikke hitte ud af, hvorfor der er den ene pixel til forskel, men det springer lige i øjnene og derfor må det løses. Jeg har forsøgt mig frem med margin og padding uden held samt et par hacks uden held også. Jeg har forsøgt at sætte min div til position relative og det gav desværre heller ikke den ønskede virkning.

I kan se et eksempel på menuen her,
www.lasse-jensen.dk/test

og CSS forefindes her,
www.lasse-jensen.dk/test/css/style.css

Der må da for filen være en måde at udføre noget så simpelt som en vertical centrering uden at skulle bruge tables!

Håber I har nogle ideer.

Mvh. Lasse Jensen
Avatar billede jakobdo Ekspert
17. juli 2011 - 11:06 #1
Og du har angivet fast størrelse på:

font
line-height
margin
padding
border

Så der ikke er noget overladt til browserens default settings?
Avatar billede jakobdo Ekspert
17. juli 2011 - 11:08 #2
Ved ikke om der findes noget ala: INSPECT ELEMENT i ie8.
Men den hjalp mig i samme situation, da jeg oplevede samme kode gav en pixel forskel i linux versus windows.
Og på den måde kan du så få info om hvordan den pågældende browser tolker din menu.

Tag evt. et kig på:
http://msdn.microsoft.com/en-us/library/dd565628%28VS.85%29.aspx
Avatar billede webweaver Praktikant
17. juli 2011 - 13:44 #3
#1 Ja, der er angivet faste værdier på det hele.

#2 Jeg synes ikke rigtig jeg fandt noget der kunne hjælpe mig, der hvor du henviser til jakobdo. Men det gør slet ikke så meget. Jeg har erfaret, at det tilsyneladende ikke har været IE 8 jeg har testet i, men i IE 7, hvor den viser det anderledes end de resterende browsere. I IE 8 vises det korrekt. Så dermed kan jeg godt leve med den ene pixel fejl, når man skal helt tilbage i 7'eren for at opleve den.

Smid du bare et svar alligevel, for at bruge din tid her :-)
Avatar billede jakobdo Ekspert
17. juli 2011 - 13:46 #4
Jamen skidt da.
Avatar billede jakobdo Ekspert
17. juli 2011 - 17:57 #5
Takker for point.
Dog kunne det stadig være interessant at finde fejlen. :o)
Avatar billede webweaver Praktikant
17. juli 2011 - 20:01 #6
Helt sikkert. Det er stadig rigtig irriterende at noget som burde være så simpelt, er så svært at få til at passe ordentligt sammen. Synes ikke rigtig at kunne finde noget om det på nettet. Ikke uden, at man ender i nogle CSS hacks og så videre, hvilket ikke er en optimal løsning i mine øjne.

Der er noget som hedder text-justify i CSS3, som måske kan hjælpe på fejlen, men har ikke rigtig kigget nærmere på den funktion i CSS før, så ved slet ikke om den berører sådan noget ...
Avatar billede jakobdo Ekspert
17. juli 2011 - 22:01 #7
Ikke at det løser dit problem, men jeg har fundet frem til den ekstra plads der er tale om i IE7, er over A tagget.
Så hvorfor den er der, ved jeg simpelthen ikke...
Avatar billede jakobdo Ekspert
17. juli 2011 - 22:08 #8
Umiddelbart ser det faktisk ud til det er line-height: 22px; i a.menu_left som gør det...
Avatar billede webweaver Praktikant
17. juli 2011 - 23:15 #9
Præcis jakobdo. Det er line-height der gør forskellen. Den skal normalt være samme højde som containeren omkring elementet, for at centrere ud fra det. Det vil sige 21px. Hvis jeg sætter line-height til 21px, er den centreret perfekt i IE 7. Men det er den ikke i efterfølgende versioner af IE eller i Chrome og FF. Der mangler den 1 pixel. Hvis jeg derimod lægger den ene pixel til som der mangler i line-height, altså 22px, så er det centreret perfekt i IE 8, 9, Chrome og FF, men ikke i IE 7. Så vi når frem til den samme konklusion.

Jeg ved heller ikke, hvorfor der er denne forskel.
Det logiske og rigtige burde være, at line-height skal være 21px og ikke 22px, da div'en omkring a-tagget kun er 21px i højden.

Det eneste jeg kan tænke mig til, som måske kunne være årsagen, er den tidligere border-problematik der har været mellem IE og FF. IE har altid tolket placering af border på en anden måde end FF. Den ene browser placerer border indvending i containeren og den anden (FF så vidt jeg husker) lægger borderen rundt om containeren. Dvs. den tilfører boksen 1 px mere, hvis borderen er 1px tyk. I takt med at Microsoft er blevet bedre til at følge standarden med tiden, tolker deres browser mere og mere tingene på samme måde som Firefox og De er måske gået over til at vise borders på samme måde som FF fra version 8. Så der kunne forskellen på den ene pixel måske ligge.

Der er så den lille krølle, er jeg ikke benytter mig af borders på 1px, men på 7px og derfor skulle man mene, at det også ville forskyde sig 7px på a-tags'ne i såfald, hvis det skulle være denne problematik som driller. Så det er ikke overvejende sandsynligt at det er problemet.
Avatar billede jakobdo Ekspert
18. juli 2011 - 06:50 #10
http://reference.sitepoint.com/css/line-height

Så måske løsningen er:

<!--[if IE 7]>
<style>
a.menu_left {line-height:21px;}
</style>
<![endif]-->
Avatar billede webweaver Praktikant
18. juli 2011 - 11:11 #11
Jeg har forsøgt tidligere ved at benytte target/hacks mod en browser. Det virkede dog ikke da jeg udarbejdede det i mit stylesheet, men forsøgte mig lige med det i headeren, og det ser ud til at virke. Jeg har så bare lavet et stylesheet for IE7 alene der hentes ind, når den browser besøger hjemmesiden, da jeg ikke er interesseret i at have CSS stående direkte i min header.

Men tak for hjælpen jakobdo.

Vi finder nok aldrig ud af, hvorfor denne forskel opstår, men når der nu findes en work around på det, går det jo nok altsammen :-)
Avatar billede DeeDawg Nybegynder
18. juli 2011 - 18:30 #12
Ikke for at være en pestilens, men hvis du laver opstillingen anderledes, behøver du ingen IE hacks eller seperate stylesheets for at komme problemet til livs.


<div>
    <ul>
        <li><a href="#">...</a></li>
        <li><a href="#">...</a></li>
        <!-- ... -->
    </ul>
</div>



Du bør nok også sætte margin og padding til 0, på alle elementer, i starten af dit stylesheet.


*{
    margin: 0 !important;
    padding: 0 !important;
}



For 1px, er 1px. Det er der ikke forskel på. Forskellen ligger i browsernes default stylesheets. Den måde de render de forskellige elementer på.

Nogle gange kan det være nødvendigt at fjerne margin og padding helt, før man definere det på sine bokse. Specielt når vi taler om IE - den værste browser, der nogensinde har eksisteret.

Desuden forstår jeg ikke du gider lægge så mange kræfter i at understøtte forældede versioner af IE, og slet ikke bare for at rette et problem med 1px. Folk har selv valgt at bruge IE og tilmed ikke opdatere den, så de har også selv valgt at få problemer med at vise sites ordentligt. ;)
Avatar billede webweaver Praktikant
18. juli 2011 - 21:40 #13
#12 Det er klart. Man kan løse problemet ved at bygge det op helt anderledes. Jeg kan også lave det i en table, hvis det er det. Men er jeg ikke interesseret i. Men ellers tak for forslaget :)

Jeg har margin og padding på de forskellige elementer.
Også på selve body.

Angående forældede versioner af IE, er vi ikke helt enige på det punkt. Folk har ikke valgt at bruge IE. Det følger med Windows og derfor benytter langt størstedelen den browser af den grund. Ligesom langt størstedelen ikke aner hvad en browser er og at der findes alternativer til Internet Explorer. IE 7 er ikke SÅ forældet endnu, at jeg mener, at den kan forbigåes. Men det er min mening. Og for mig gør det noget, hvis der er 1px til forskel, for jeg tager penge for mit arbejde og jeg har en kunde som på et tidspunkt skal have det færdige produkt og som nok skal få øje på alle sådan nogle småting. Og hvis man nu har muligheden for at udbedre fejlen, hvorfor så ikke gøre det. :)

Sidst men ikke mindst, så er det ligeså meget for min egen skyld, for at lære noget nyt, at jeg går i dybden med at finde årsagen til problemet :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester