ugrás a tartalomhoz

Vertikális és horizontális pozícionálás gombokra

Jazoja · 2011. Okt. 15. (Szo), 17.27
Egy változó magasságú elemen belül (td), 4 gombot szeretnék elhelyezni a következő módon:
- egy alul középen
- egy fent középen
- egy jobb szélen középen
- egy bal szélen középen

Táblázattal már sikerült összehozni a kívánt eredményt, FF alatt működik, Chrome és Opera alatt viszont nem.
CSS vertical-align és társairól elolvastam amit találtam, de sokkal előrébb nem jutottam.

Gondoltam megkérdezem tud-e valaki rá egyszerű megoldást (vagy akármilyent), mielőtt feladom...
 
1

position

idahoo · 2011. Okt. 15. (Szo), 18.44
Nos, ha jól látom és értelmezem, akkor Te táblán belül, vagy táblára szeretnél stílust írni...

A javaslatom, hogy ha a táblákkal (table <td>) szeretnéd felépíteni oldalad, akkor azt felejtsd el, s használj diveket <div> és azokra írj stílust. Hidd el, sokkal jobban jársz mind gyorsaság, áttekinthetőség és stilizálás szempontjából.

A kérdésedet nem igazán értem, viszont elképzelésem szerint Te egy olyan dobozt szeretnél, ahol a gombok a 4 oldalon helyezkednek el (fent, lent, jobb, bal).
Erre a javaslatom a következő lenne -ami nem biztos, hogy jó, csak az én elképzelésem-;
A positionnal megadod a relatív értékre az adott gombot, majd beállítod annak pozícióját a top és left paraméterekkel. Ha szeretnél a dobozba még írni, így hely is kellene, vagy nem szeretnéd, hogy szétcsússzon, akkor használd a float, vagy a z-index paramétereket, vagy létrehozol még egy divet, aminek megadod a gombok méreteinek kivonásával a méretet és elhelyezed a dobozon belül, majd a köré építed a gombokat. A belső doboznak adsz fix méretet, így a szétcsúszástól mentve vagy.

Íme a példa az elképzelésemről:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
.doboz {
width: 400px; height:400px;
border: #000 solid 1px;
margin: 0 auto;
padding: 0;
margin-top: 150px;
}

.gomb-fent,
.gomb-lent,
.gomb-jobb,
.gomb-bal
{
width: 50px;
height: 20px;
border: #000 solid 1px;
background: #666666;
color: white;
position: relative;
font-size: 10px;
text-align: center;
}

.gomb-fent {
top: -1px;
left: 175px;
}

.gomb-lent {
top: 357px;
left: 175px;
}

.gomb-jobb {
top: 155px;
left: -1px;
}

.gomb-bal {
top: 135px;
left: 349px;
}

</style>
</head>
<body>


<div class="doboz">
<div class="gomb-fent">gomb-fent</div>
<div class="gomb-lent">gomb-lent</div>
<div class="gomb-jobb">gomb-jobb</div>
<div class="gomb-bal">gomb-bal</div>
</div>



</body>
</html>


Remélem segítettem!
Üdv,
Idahoo
2

tábla vs div

Jazoja · 2011. Okt. 17. (H), 01.04
A példád kicsit módosítottam, hogy dinamikusan alkalmazkodjon a változó magassághoz. (px helyett %, illetve float:left/right használatával).

A tábla elem azért kellett, mert van egy nagy változó magasságú szövegdoboz, és tőle jobbra a négy gomb.

A td elemen belül lévő div elemen alkalmazott "top" CSS tulajdonságot, mintha a böngészők nem vennék figyelembe és így a 4 gomb középre kerül.

A div-re való átíráskor kicsit belekeveredtem a float meg clear használatába.
3

div-ek egymás mellett

Jazoja · 2011. Okt. 17. (H), 23.04
Hát a táblát átírtam div-re, de nem sikerült összehozni, hogy az egyik div magassága automatikusan igazodjon a mellette lévő div magasságához.
Hogy világos legyen mit szeretnék, lerajzoltam, ehhez szeretnék segítséget kérni:
4

Jazoja, tudtommal két dolgot

asam9 · 2011. Okt. 18. (K), 00.09
Jazoja, tudtommal két dolgot tehetsz:

1.,
készítesz a két float-olt elemed köré egy befoglaló div-et és ennek a befoglaló div-nek megadsz egy háttérképet CSS-ben (ismételtetheted is repeat-y-nal, ha homogén a háttér), amit kis vizuális csalással úgy készítesz el, hogy ha ránézel fel se tűnjön, hogy az a háttérkép nem a két float-olt div-ednek van beállítva.

<div class="clearfix" style="background: url(bg.png) repeat-y 0 0; width: ___px;">
<div style="display: inline; float: left; width: ___px;"></div>
<div style="display: inline; float: left; width: ___px;"></div>
</div>


2.,
használsz js-t, pl. itt
(én még nem próbáltam, biztos van jQuerys-s alternatíva is)


clearfix-ről itt
5

Szerintem is vagy

mahoo · 2011. Okt. 18. (K), 06.38
Szerintem is vagy javascripttel pozicionálsz illetve méretezel (ez jquery-vel könnyen megoldható) vagy táblázat...
Az pedig úgy, hogy a jobboldali "gombos" cellát 4 részre osztod (1-2-1 cella soronként), a jobboldalinak rowspan=3 kell. Így a gombokat nem könnyen poziciónálhatod.

Én sem szeretem a táblázatokat, de már sztem inkább table mint jquery...
6

táblázat

Jazoja · 2011. Okt. 18. (K), 19.39
Eredetileg táblázattal csináltam meg, ez FF alatt szépen műxik is. Csak ugye Chrome, Opera alatt nem...
Most a következő van:
- a tábla alapból 3x3-as
- bal oszlop "rowspan=3"-al egybe van nyitva a szövegdoboz számára
- a jobb oldali 2x3-as rész, az 1-2-1 miatt alsó és felső sorban "colspan=2"-vel van egybe nyitva
- alul és felül az oszlop magassága 50px, a középső részre nincs beállítva semmi

FF a középső részt automatikusan növeli (ami így jó), Chrome és Opera meg az alsót (ami nem jó - nekem).

Próbáltam egybenyitni a gombok sorait, de akkor meg mintha nem működnének a top, bottom által beállított dolgok.
7

<!DOCTYPE HTML PUBLIC

Hidvégi Gábor · 2011. Okt. 18. (K), 20.29
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Cím</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta http-equiv="content-language" content="hu">
  <style type="text/css">
    .masodik {
      position: relative;
      width: 120px;
    }
    .masodik input {
      position: absolute;
      width: 40px;
    }
    #gomb1 {
      left: 50%;
      top: 0px;
      margin-left: -20px;
    }
    #gomb2 {
      top: 50%;
      right: 0px;
      margin-top: -5px;
    }
    #gomb3 {
      left: 50%;
      bottom: 0px;
      margin-left: -20px;
    }
    #gomb4 {
      top: 50%;
      left: 0px;
      margin-top: -5px;
    }
  </style>
</head>

<body>

  <table>
    <tr>
      <td>
        <p>asdfg</p>
        <p>asdfg</p>
        <p>asdfg</p>
        <p>asdfg</p>
        <p>asdfg</p>
      </td>
      <td class="masodik">
        <input type="button" id="gomb1" value="Gomb1">
        <input type="button" id="gomb2" value="Gomb2">
        <input type="button" id="gomb3" value="Gomb3">
        <input type="button" id="gomb4" value="Gomb4">
      </td>
    </tr>
  </table>

</body>
</html>
8

firefoxban nem

Jazoja · 2011. Okt. 18. (K), 23.37
Nagyon köszönöm, Operában egész jól néz ki, Chrome-ban szinte tökéletes, de Firefox (7.0.1) alatt a gombok a böngésző ablak 4 széléhez igazodnak.
9

Azt kell elérni, hogy a

Hidvégi Gábor · 2011. Okt. 19. (Sze), 09.50
Azt kell elérni, hogy a .masodik firefox alatt kapjon egy display: block-ot, mert úgy tűnik, hogy táblázatcellák esetén a böngésző figyelmen kívül hagyja a position: relative-et. Azért kíváncsi vagyok, hogy ez bug vagy szabványos.
10

diplay:block

Jazoja · 2011. Okt. 19. (Sze), 14.01
Igen, ezzel már én is próbálkoztam (sőt, a display összes opciójával), de display:block esetén a doboz mérete összeesik, így muszály neki fix méretet adnom.
Összes többi opció esetén meg az position:absolute az ablakhoz igazítja a gombokat.
Firefox 10 (UX)-el is ugyanígy jelentkezik a probléma.

Próbáltam átírni a táblát div-ekre és CSS display:table/table-row/table-cell módon összerakni ugyanazt, de az eredmény tkp. ugyanaz lett. (mármint hogy Chrome-ban ment, FF-ben meg ugyanaz a hiba jelentkezett)
12

Utánaolvastam, állítólag a

Hidvégi Gábor · 2011. Okt. 19. (Sze), 15.11
Utánaolvastam, állítólag a firefox csinálja jól, táblázat cellái nem lehetnek relatív szülők (az más kérdés, hogy ennek szerintem semmi értelme).
11

Sokkal egyszerűbb, mint

Hidvégi Gábor · 2011. Okt. 19. (Sze), 15.09
Sokkal egyszerűbb, mint gondolnád:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Cím</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta http-equiv="content-language" content="hu">
  <style type="text/css">
    #szulo {
      position: relative;
      width: 300px;
    }
    #tartalom {
      width: 200px;
      border: 1px solid red;
    }
    .gomb {
      position: absolute;
      width: 40px;
    }
    #gomb1 {
      left: 230px;
      top: 0px;
    }
    #gomb2 {
      top: 50%;
      right: 0px;
      margin-top: -5px;
    }
    #gomb3 {
      left: 230px;
      bottom: 0px;
    }
    #gomb4 {
      top: 50%;
      left: 200px;
      margin-top: -5px;
    }
  </style>
</head>

<body>

  <div id="szulo">
    <div id="tartalom">
      <p>asdfg</p>
      <p>asdfg</p>
      <p>asdfg</p>
      <p>asdfg</p>
      <p>asdfg</p>
    </div>
    <input type="button" id="gomb1" class="gomb" value="gomb">
    <input type="button" id="gomb2" class="gomb" value="gomb">
    <input type="button" id="gomb3" class="gomb" value="gomb">
    <input type="button" id="gomb4" class="gomb" value="gomb">
  </div>

</body>
</html>
13

Valóban...:-)

Jazoja · 2011. Okt. 19. (Sze), 18.42
Nagyon köszönöm, tényleg sokkal egyszerűbb és az összes tesztelt böngészőben úgy működik ahogy kell... :-)
14

ugyanez

Zozzy087 · 2016. Dec. 13. (K), 15.38
Nekem hasonló a problémám, de mivel nem értek hozzá segítséget kérek benne. Nekem 5 gombon van egymás alatt, de egymás mellé szeretném őket rakni. Hogyan tudom megoldani? Íme a kódok:
  1. <style>  
  2. /* start flex */  
  3.   
  4. .container {  
  5.   display: flex;  
  6.   flex-direction: column;  
  7.   justify-content: flex-end;  
  8.   align-items: center;  
  9.   align-contentcenter;  
  10.   
  11. }  
  12.   
  13. .row {  
  14.   display: flex;  
  15.   flex-direction: row;  
  16.   justify-contentcenter;  
  17.   align-items: center;  
  18.   align-content: flex-end;  
  19.   flex-wrap: wrap;  
  20.   
  21. }  
  22.   
  23. /* end flex */  
  24. * {  
  25.   box-sizing: border-box;  
  26. }  
  27.   
  28. body {  
  29.   background#FFFFCC;  
  30.   margin0 auto;  
  31.   max-width1000px;  
  32. }  
  33.   
  34. header {  
  35.   width100%;  
  36.   backgroundblack;  
  37.   text-aligncenter;  
  38. }  
  39.   
  40. h1 {  
  41.   colorwhite;  
  42.   font-size5rem;  
  43.   text-shadow1px 1px 3px #FFFFFF;  
  44. }  
  45.   
  46. section {  
  47.   background#FF4500;  
  48.   padding1.5rem;  
  49.   min-width200px;  
  50.   border-radius: 20px;  
  51.   margin-top1rem;  
  52.   min-hight: 170px;  
  53. }  
  54.   
  55. section:last-of-type {  
  56.   margin-bottom1rem;  
  57. }  
  58.   
  59. div.dice{  
  60.      
  61.     width80px;  
  62.   height80px;  
  63.     backgroundwhite;  
  64.     border2px solid black;  
  65.     font-size4rem;  
  66.     text-align:center;  
  67.   line-height: px;  
  68.   margin-right60px;  
  69. }  
  70.   
  71. button {  
  72.   background#000000;  
  73.   border-radius: 10px;  
  74.   colorwhite;  
  75.   text-shadow1px 1px 1px black;  
  76.   font-size1rem;  
  77.   positionrelative;  
  78.   outlinenone;  
  79. }  
  80.   
  81. button:active:before {  
  82.   content"";  
  83.   background: rgba(0000.5);  
  84.   width100%;  
  85.   height100%;  
  86.   positionabsolute;  
  87.   border-radius: 10px;  
  88.   left: 0;  
  89.   top: 0;  
  90. }  
  91.   
  92. .button {  
  93.   background#FFFFFF;  
  94.   colorblack;  
  95.   border1px solid rgba(0001);  
  96.   border-radius: 15px;  
  97.   positionrelative;  
  98. }  
  99.   
  100.   
  101.   
  102. h2 {  
  103.   color#000000;  
  104. }  
  105.   
  106. </style>  
  1. <div class="container">  
  2.   <header>  
  3.     <h1><font face="Arial Black">Ide jön valami szöveg</font face></h1>  
  4.   </header>  
  5.   
  6. <!-- első gomb -->  
  7. <section>  
  8. <div class="row">   
  9. <div id="die4" class="dice">0</div>  
  10.   <div class="button" onclick="rollDice4()"><font size"10"> <font face="Algerian">első gomb</font size> </font face></div>  
  11. </div>  
  12. <div class="row">  
  13. <h2 id="status4" style="clear:left;"></h2>  
  14. </div>  
  15. </section>  
  16. <!-- első gomb vége -->  
  17.   
  18. <!-- második gomb -->  
  19. <section>  
  20. <div class="row">   
  21. <div id="die6" class="dice">0</div>  
  22.   <div class="button" onclick="rollDice6()"><font size"10"> <font face="Algerian">második gomb</font size> </font face></div>  
  23. </div>  
  24. <div class="row">  
  25. <h2 id="status6"></h2>  
  26. </div>  
  27. </section>  
  28. <!-- második gomb vége -->  
  29.   
  30. <!-- harmadik gomb -->  
  31. <section>  
  32. <div class="row">   
  33. <div id="die16" class="dice">0</div>  
  34. <div class="button" onclick="rollDice16()"><font size"10"> <font face="Algerian">harmadik gomb</font size> </font face></div>  
  35. </div>  
  36. <div class="row">  
  37. <h2 id="status16" style="clear:left;"></h2>  
  38. </div>  
  39. </section>  
  40. <!-- harmadik gomb vége -->  
  41.   
  42. <!-- negyedik gomb-->  
  43.   <section>  
  44. <div class="row">   
  45. <div id="die40" class="dice">0</div>  
  46. <div class="button" onclick="rollDice40()"><font size"10"> <font face="Algerian">negyedik gomb</font size> </font face></div>  
  47. </div>  
  48. <div class="row">  
  49. <h2 id="status40" style="clear:left;"></h2>  
  50. </div>  
  51. </section>  
  52.   
  53. <!--ötödik gomb-->  
  54. <section>  
  55. <div class="row">   
  56. <div class="button" onclick="rollDice20()"><font size"10"> <font face="Algerian">ötödik gomb</font size> </font face></div>  
  57. </div>  
  58. <div class="row">  
  59. <h2 id="status20"></h2>  
  60. </div>  
  61. </section>  
15

Egy sorba?

Pepita · 2016. Dec. 18. (V), 17.02
Pl úgy tudod megoldani, ha egy sorba (row) teszed őket. :)

Szerk:
Hibás a HTML is, a .button pedig kér szépen egy display: inline -t.