ugrás a tartalomhoz

Relative vs Absolute positioning gondjaim

saya-jin · 2007. Szep. 19. (Sze), 14.36
Helló!

A problémám a következő: Több helyen összesikerült futnom azzal, hogy van egy olyan DIV, UL, vagy hasonló elem aminek a szülőnodehoz kéne igazodnia méretekben (elsősorban a szélességben), de átfedések miatt kellene az absolute positioning.
Egészen konkrétan van egy a <select>-et kiváltó listám. amiben van egy <ul>, ami értelemszerűen felette kell lennie a következő elemeknek, és nem szabad, hogy megnyújtsa az őt tartalmazó divet. Viszont akkor az a probléma adódik, hogy a lista elemeket csak az ablakhoz tudom méretezni százalékosan, vagy pixeleznem kell. Így pedig nem tudom az őt tartalmazó spam szélességéhez igazítani.

A combobox így néz ki, de Javascripttel generálom valójában, ami minden selectet lecserél ilyenre.

<span class="combobox">
  <div class="selection"></div>
  <ul class="dropdown">  <!-- Ez egy onclick vezérelten kap egy "dropdown_open" classt -->
    <li>choice 1</li>
    <li>choice 1</li>
    <li>choice 1</li>
  </ul>
</span>
A form pedig így néz ki:

<form class="basic">
  <fieldset>
    <legend>Section 1</legend>

    <div>
      <label for="mychoice">Choose one:</label>
      <select name="mychoice" id="mychoice">
        <option>choice 1</option>
        <option>choice 2</option>
        <option>choice 3</option>
      </select>
    </div>
  </fieldset>
</form>
és akkor a css:

span.combobox {
	float: left;
	width: 60%;
	padding: 0px 10px;
}

div.selection {
	border: 1px solid #000000;
	cursor: pointer;
	background: #F00000;
	height: 1.65em;
}

ul.dropdown {
	display: none;
	height: 1.65em;
}

ul.dropdown_open {
	margin: 0;
	padding: 0;
        /* Ide kellene jönnie valami varázslatnak, hogy a width: 100% működjön */
	
	list-style: none;

	display: block;
	position: absolute;
	top: auto;
	left: auto;
	
	border-left: 1px solid #000000;
	border-right: 1px solid #000000;
	border-bottom: 1px solid #000000;
	background: #A00000;
}

ul.dropdown_open li {
	cursor: pointer;
        /* Ide kellene jönnie valami varázslatnak, hogy a width: 100% működjön */

	display: block;
	position: relative;
}

ul.dropdown_open li:hover {
	background: #F00000;
}
 
1

Spanba nem rakunk UL-t

Jano · 2007. Szep. 19. (Sze), 17.58
Spanba nem rakunk UL-t.

Relative vs absolute
2

Nem vagy túl szószátyár...

saya-jin · 2007. Szep. 20. (Cs), 23.13
Miért is nem? A span tudtommal ugyanaz, mint a div, csak inline. Egyébként teljesen mindegy, kipróbáltam divvel is, de ha az általam óhajtott eredményt akarom elérni, azaz hogy úgy viselkedjen mint egy select tag, akkor muszáj vagy a divet inlinera tenni, márpedig akkor pedig ott vagyok, hogy spant is betehetek...
Szóval még megoldásra vár a problémám...
3

csak inline

Táskai Zsolt · 2007. Szep. 21. (P), 00.04
és inline elemben nem lehet block típusú... más megközelítésben elég egy ránézés a HTML 4 DTD-jére. szóval a HTML szempontjából egy inline DIV tartalmazhat UL-t, a SPAN meg nem. ez ilyen. persze a problémádat ez tényleg nem oldja meg... bocs, abba most nem gondolok bele.
4

HML és CSS különböző

Jano · 2007. Szep. 21. (P), 09.30
HTML-ben vannak szabályok, bizonyos elemeket csak bizonyos más elemekbe lehet tenni. Ilyen általános szabály, hogy inline típusú elembe csak más inline típusú elemet lehet rakni. Hogy melyik milyen az a szabványban benne van.
Ha van egy szabváynos HTML-ed azt utána már CSS-ből formázhatod ahogy akarod. Például egy DIV-et, vagy LI elemet is lehetne display:table-cell; segítségével tábláztatos megjelenítésre kényszeríteni, csak ezt sajnos ez elvi lehetőség, mert gyakorlatban IE nem támogatja.

Div és span pedig pont ezért van kettő. Részletesebben: DIV és SPAN
5

DHTML: a megoldás

saya-jin · 2007. Szep. 29. (Szo), 12.12
Hát más megoldást nem találtam sajnos, csak a DHTML-t. Ha már úgyis javascripttel generálok, akkor le tudom kérdezni az eredeti select szélességét, amit már tudok úgy rendezni, ahogyan azt én akarom, hiszen az közvetlenül a formon csügg. Illetve annak egy részletén, amelynek szélessége egyenlő a forméval. Így aztán csak át kell vennem a szélességértéket a list itemekhez, és már műxik is. Azért köszönöm a szabványosítás körüli hsz.eket. Amit viszont találtam ebben a témában, az teljesen más téma. Ti. a span lehet, hogy inline element (erre van kitalálva), de hát ide pont az szükséges. Betehetnék ugyan egy divet is helyette, de azt meg inlinera kell állítanom, tehát ott vagyunk, mintha spant raktam volna be. Ez esetleg olyanoknál érdekes, mint a paragraph...
6

Igen: a divet állitsad inline-ra.

Jano · 2007. Szep. 29. (Szo), 14.05
Nagyon fontos, hogy megértsed a különbséget! A HTML önmagában is értelmezhető a kinézetet befolyásoló CSS nélkül! A HTML-ednek szabványosnak kell lenni!Csak egy szabványos HTML fájl kapcsán várhatod el, hogy azt más programok értelmezni tudják.
Az, hogy te egy elemnek más megjelenítést akarsz, azt a CSS alkalmazásával oldod meg.
A HTML-ben egy blokk típusú általános vagy megfelelő jelölő hiányában mással el nem nevezhető eelemet DIV-vel KELL jelöni, egy sortípusó elemet pedig SPAN-nal. Ha egy általános elemben más blokk típusó elemet teszel akkor ez a befoglaló elem CSAK és KIZÁROLAG DIV lehet. Ezt nem te döntheted el, ezt a HTML szabvány írja elő!