Avatar billede jakobdo Ekspert
02. juli 2011 - 09:00 Der er 6 kommentarer og
1 løsning

Opret en "menu" / listing af data, som matcher længeste element

Hej,
nogle gange kigger man sig blind på et problem.

F.eks. er jeg ved at udvikle en menu, men er nået til et problem, som jeg ikke kan løse pt.

Jeg ønsker en liste / box / menu etc... ala:

Item 1
Long item 2
Tiny
Longer item 3
4
Hmm

Og disse skal så være i en styling, som gør at alle elementer er i en "boks", uden fast bredde.
Men alle de underlæggende elementer, listet herover, skal have samme bredde.
Kan man lave det i ren html og css?

F.eks. kan i se dette eksempel:
http://clarklab.net/blog/articles/dropdown/example.html

Der er menu-punkterne lige lange, men det laves med en fast bredde.
Kan man ikke lave den "faste bredde" dynamisk, så menuen bare tilpasser sig bredeste element?
Avatar billede NielsErikP Mester
02. juli 2011 - 10:12 #1
Hej..
Bare en tanke..
Er man ikke nød til at have noget der tæller længden på linket, tror jeg ik man kan med ren html/css. Og så sætte en id med en padding effekt, når man ":hover", over linket, der kan bredden jo også sættes.
Som sagt bare en tanke!!!
Avatar billede jakobdo Ekspert
02. juli 2011 - 10:24 #2
Jeg er netop ved at kigge på en løsning, hvor bredden beregnes via javascript.
Avatar billede NielsErikP Mester
02. juli 2011 - 10:34 #3
Hej..
Lad os høre..
Sådan det ik bare er for at give sig selv point!
Avatar billede majbom Novice
02. juli 2011 - 10:43 #4
kan godt være jeg misforstår dit problem, men hvad er der galt med det eksempel du viser?

-> #3 - jeg tror ikke at du skal være bange for at jakob tager points selv, hvis andre har fortjent dem!
Avatar billede jakobdo Ekspert
02. juli 2011 - 10:43 #5
Jeg løste det på denne måde:

function showSubmenu(){
  obj = $(this).children("ul.subnav");
  obj.css('z-index',100).slideDown('fast');
  maxWidth = 0;
  $("li",obj).each(function(){
    maxWidth = Math.max(maxWidth,$(this).width());
  });
  $("li",obj).each(function(){
    $(this).width(maxWidth);
  });
}

Da bredden ikke kan beregnes på et element med display:none;
Så kan første beregne bredden efter det bliver vist.
Avatar billede jakobdo Ekspert
02. juli 2011 - 10:45 #6
Og lukker... (bare for at tage point selv) :o)

#4 Det eksempel jeg viser, har fast bredde og dermed en masse ekstra space til højre for teksten i menu punkterne.
Og det er netop det jeg ønsker at undgå og derfor blev js løsningen.
Avatar billede majbom Novice
02. juli 2011 - 10:46 #7
aah på den måde - så misforstod jeg spørgsmålet i første omgang :)
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