ugrás a tartalomhoz

"float: középre" nem megy :)

Pepita · 2012. Okt. 26. (P), 16.08
Sziasztok!

Bocs a címért, de nem jövök rá a dolog nyitjára, pedig valószínűsítem, hogy igen egyszerű a megoldás. Az alábbi menüt a <div id="main_nav"> - nál "fogva" középre szeretném igazítani <div id="across_2"> - n belül. (Később szintén across_2 gyermekeként lehet, hogy egy-két <p>valami</p> bekerülhet.

A HTML:
  1. <!DOCTYPE html>  
  2.   
  3. <html lang="hu">  
  4. <head>  
  5.     <title>float probléma</title>  
  6.     <meta content="text/html; charset=utf-8" http-equiv="content-type" />  
  7.     <link rel="stylesheet" type="text/css" href="main.css" />  
  8.     <script language="javascript" type="text/javascript" src="jquery_1_4.js"></script>  
  9. </head>  
  10.   
  11. <body>  
  12.   
  13. <!-- Header cuccok -->  
  14.   
  15.     <div id="across_2">  
  16.             <div id="main_nav">  
  17.                 <ul>  
  18.                     <li><a href="menu.html">Címlap</a></li>  
  19.                     <li><a href="menu.html">Aktuális</a>  
  20.                     <ul>  
  21.                         <li><a href="#">Menü 2.1</a></li>  
  22.                         <li><a href="#">Menü 2.2</a></li>  
  23.                         <li><a href="#">Menü 2.3</a></li>  
  24.                     </ul></li>  
  25.                     <li><a href="#">Menü 3.</a>  
  26.                     <ul>  
  27.                         <li><a href="#">Menü 3.1</a></li>  
  28.                         <li><a href="#">Menü 3.2</a></li>  
  29.                         <li><a href="#">Menü 3.3</a></li>  
  30.                     </ul></li>  
  31.                     <li><a href="#">Menü 4.</a></li>  
  32.                     <li><a href="#">Menü 5.</a></li>  
  33.                     <li><a href="#">Menü 6.</a></li>  
  34.                     <li><a href="#">Menü 7.</a></li>  
  35.                 </ul>  
  36.             </div>  
  37.     </div>  
  38.   
  39. <!-- article (left-box és content) -->  
  40. <!-- footer -->  
  41.   
  42. <script language="javascript" type="text/javascript">  
  43. <!--  
  44.     // Menüt középre:  
  45.     $("#main_nav").css("left", (($("#across_2").width()-$("#main_nav").width())/2) + "px");  
  46. -->  
  47. </script>  
  48. </body>  
  49. </html>  
CSS:
  1. body {  
  2.   margin0;  
  3.   padding0;  
  4.   overflowauto;  
  5.   background-colorrgb(251,247,235);  
  6.   font-family"georgia", serif;  
  7. }  
  8.   
  9. #across_2 {  
  10.   z-index110;  
  11.   width100%;  
  12.   min-height32px;  
  13.   heightauto;  
  14.   margin0;  
  15.   padding0;  
  16.   background-colorrgb(22,112,201);  
  17.   text-aligncenter;  
  18.   clearboth;  
  19. }  
  20.   
  21. #main_nav {  
  22.   z-index120;  
  23.   positionabsolute;  
  24.   padding0;  
  25.   margin0;  
  26. }  
  27. #main_nav ul {  
  28.   padding0;  
  29.   margin0;  
  30.   line-height32px;  
  31. }  
  32. #main_nav li {  
  33.   positionrelative;  
  34.   list-style-typenone;  
  35.   list-style-imagenone;  
  36.   floatleft;  
  37.   backgroundnone;  
  38. }  
  39. #main_nav a {  
  40.   backgroundred url("gomb_10.png"no-repeat;  
  41.   padding0px;  
  42.   width120px;  
  43.   height32px;  
  44.   font-size16px;  
  45.   displayblock;  
  46.   font-family"times new roman", times, serif;  
  47.   color#049;  
  48.   text-aligncenter;  
  49.   text-decorationnone;  
  50. }  
  51. #main_nav a:hover {  
  52.   background: pink url("gomb_11.png"no-repeat;  
  53.   color#169;  
  54.   font-weightbold;  
  55.   outlinenone;  
  56.   bordernone;  
  57. }  
  58. #main_nav ul ul {  
  59.   positionabsolute;  
  60.   visibilityhidden;  
  61.   top: 32px;  
  62.   left: -2px;  
  63.   border2px dashed rgb(13,106,201);  
  64.   border-topnone;  
  65.   background-colorrgb(103,174,245);  
  66.   z-index100;  
  67.   margin0;  
  68.   padding0;  
  69. }  
  70. #main_nav ul li:hover ul {  
  71.   visibilityvisible;  
  72. }  
Amit tudtam, kivettem belőle, többi gyakorlatilag valós (a piros és rózsaszín háttér kivétel).

Próbálkoztam szélességekkel, text-align-al, margin: 0 auto-val és még sorolhatnám, de nem sikerült (pedig én mindent jól csináltam :)).

Kérlek segítsetek ki egy kis korrepetálással, ha egy mód van rá, nem szeretném ezt a gagyi js/jquery - ráncigálást ott hagyni!

Fontos, hogy IE8 is "játszik", ill. cross-browser legyen. (Inkább CSS2.)

A segítséget - útmutatást előre is köszönöm!

Pepita.
 
1

Absolute nélkül

bamegakapa · 2012. Okt. 26. (P), 17.01
Ha nem ragaszkodsz a position: absolute-hoz valami okból, akkor ez működhet:
  1. #across_2 {    
  2.   text-aligncenter;    
  3. }    
  4.   
  5. #main_nav {    
  6.   display: inline-block;  
  7. }  
jsFiddle demó

Hála az inline-blocknak, az elem felveszi a gyermekek méretét (akárcsak a position: absolute vagy a float esetén), tehát nem törekszik a szülő szélességének kitöltésére, mint egy alap block elem.

Az inline működés miatt könnyedén középre rendezhető.

Az inline-blockot támogatja az IE8, IE7-ben is működésre bírható egy kisebb hekkel.
3

Dehogy ragaszkodom position: absolute-hoz!

Pepita · 2012. Okt. 26. (P), 19.01
Csak a jquery miatt kellett...

Köszönöm szépen a megoldást, így jó lesz (IE7- nem szempont, "nekik" mehet balra).
Kísérleteztem inline-block -al is, de valószínűleg bent maradt az absolute, vagy vmi mást rontottam el...
5

Az inline-block problémája a

tgr · 2012. Okt. 27. (Szo), 10.52
Az inline-block problémája a (viszonylag elhanyagolható) kompatibilitási problémákon túl az, hogy a html tag körüli szóközöket nem mindig nyeli le, amitől pici, de csúnya elcsúszások lesznek.

A legegyszerűbb megoldás blokk vízszintesen középre pozicionálására a margin: 0 auto.
6

szélesség

Poetro · 2012. Okt. 27. (Szo), 11.35
Már ha tudod az elem szélességét, mert annak meghatározása nélkül nem fog menni, és a fenti esetben ez a szélesség nem ismert.
7

Nodeviszont

bamegakapa · 2012. Okt. 27. (Szo), 11.44
De valamilyen módszerrel rá kell vegyed ezt a divet, hogy a gyermekei szélességét vegye fel, mivel nem akarod megadni a pontos szélességét (különben persze reflexből mehet a marginos megoldás). Enélkül nem tudnád középre pozícionálni, mivel 100% szélességű lenne.

A "valamilyen módszer"-t kifejtettem, biztos van más is, nekem az a három jutott eszembe hirtelen. A float és az absolute position nem igazán praktikus itt, ezért maradtam az inline-blocknál. A flexbox meg egyelőre nem megoldás, ha széles böngésző-támogatásra vágysz.

De én is szívesen nézegetek további működő megoldásokat, mert tanulni remek és mindig van mit.
9

De a példában a gyereke egy

tgr · 2012. Okt. 28. (V), 07.59
De a példában a gyereke egy blokk, tehát úgyis 100%-os szélessége lesz, ha nem adsz meg neki kézzel (mint ahogy az a fiddle-ben is látszik). Plusz ha a menüd floatolt elemeket tartalmaz, akkor eleve nem is lehet saját szélessége.
12

De műxik

Pepita · 2012. Okt. 28. (V), 22.41
Nem egészen értem, ezzel a #main_nav { display: inline-block; } -al működik. A <li>-k floatoltak, bennük az <a>-k fix szélességűek (mármint a desktop verzióban). Szerintem itt nincs gond, bár még csak IE és FF alatt néztem. (Ezekben nem problémáznak a whitespace karakterek sem, de azt (is) még majd meg kell nézzem több böngészőn is.)
13

Lehet elbeszélünk egymás mellett

bamegakapa · 2012. Okt. 29. (H), 10.59
A menüd hiába tartalmaz bármilyen elemeket, ha önmaga block elem és nincs rajta alkalmazva sem float sem abszolút pozíció. Lesz saját szélessége, méghozzá a szülő 100%-a.
2

Firebug

Práger Ádám · 2012. Okt. 26. (P), 17.02
Használd a firebugot, vagy másik inspectort. Érdemes megjegyezni, hogy a div alapból 100% széles (mivel block elem), de ha épp nem ugrik be, akkor ezek egyből mutatják...

+1 az inline-block megoldásra
4

Firebug

Pepita · 2012. Okt. 26. (P), 19.05
Köszi a tippet, de tudod a bölcsiből már elballagtam, nem a WL-en kezdem egy probléma megoldását, hanem ide hozom azt, amit néha nem sikerül megoldanom...
Önmagában a div szélessége nem oldotta meg a problémát, mint ahogy a témaindítóban is írtam.
8

Ne vedd a szívedre

bamegakapa · 2012. Okt. 27. (Szo), 11.46
Mivel lehet, hogy később mások is rátalálnak erre a topikra hasonló problémával, ezért nem baj, ha olyat is leír, amit te már tudhatsz.
10

Block

Práger Ádám · 2012. Okt. 28. (V), 13.27
Ezzel nem azt akartam mondani, hogy változtasd a szélességet, hanem azt, hogy vedd észre, hogy 100% széles, vedd észre, hogy nem te akartad, hogy annyi legyen... ebből már tudod, hogy block elem, változtasd meg. :)
11

Hosszú

Pepita · 2012. Okt. 28. (V), 22.33
Jó-jó, hosszú lenne ezt kiragozni. Nem az volt a gondom, hogy block-e, inline-block-ot is próbáltam, csak rosszul. Sebaj, a "firebug-reklám" elfér...