<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GhoUl &#187; css</title>
	<atom:link href="http://cubussapiens.hu/tag/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://cubussapiens.hu</link>
	<description>A Cubus Sapiens oldal</description>
	<lastBuildDate>Sat, 14 Jan 2012 23:33:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Jelenlét-érzékelés infravörös fény segítségével</title>
		<link>http://cubussapiens.hu/2009/01/jelenlet-erzekeles-infravoros-feny-segitsegevel/</link>
		<comments>http://cubussapiens.hu/2009/01/jelenlet-erzekeles-infravoros-feny-segitsegevel/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 13:02:04 +0000</pubDate>
		<dc:creator>Balage</dc:creator>
				<category><![CDATA[Fejlesztés]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[hardver]]></category>
		<category><![CDATA[infra]]></category>
		<category><![CDATA[pic]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Végre hosszú idő után előkerült a PICkit a fiókból. Az [intlink id="559" type="post"]el%u0151z%u0151 PIC[/intlink]-es próbálkozásom után most egy kicsit bonyolultabb probléma megoldására vállalkoztam. Konkrétan arra, hogy a kütyü képes legyen érzékelni valakinek a jelenlétét. Erre a leggyakrabban alkalmazott módszer infravörös &#8230; <a href="http://cubussapiens.hu/2009/01/jelenlet-erzekeles-infravoros-feny-segitsegevel/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Végre hosszú idő után előkerült a PICkit a fiókból. Az [intlink id="559" type="post"]el%u0151z%u0151 PIC[/intlink]-es próbálkozásom után most egy kicsit bonyolultabb probléma megoldására vállalkoztam. Konkrétan arra, hogy a kütyü képes legyen érzékelni valakinek a jelenlétét. Erre a leggyakrabban alkalmazott módszer infravörös fényt vetít a vizsgált térrész felé, és méri a visszaverődött fény mennyiségét. Minél több fény verődik vissza, annál közelebb van a tárgy, amiről visszaverődött. Az elmélet egyszerű, és mint azt a továbbiakban olvashatjátok, a gyakorlat se sokkal bonyolultabb.</p>
<p>Az első probléma ami felmerült, az a jelentős háttérzaj kérdése. Az infravörös tartományban a nap és a legtöbb mesterséges fényforrás is sugároz, ráadásul sokkal erősebben, mint egy ilyen alkalmazásban szóba jöhető infra-led. A háttérzaj és az infra-led jelét szétválasztani csak úgy lehet, ha modulált jelet sugározunk a térbe, és ezt a modulált jelet keressük a mért értékekben is. Léteznek olyan infra-vevők, melyek hardveresen támogatják a modulált jel érzékelését (pl. <a href="http://www.vishay.com/ir-receiver-modules/">TSOP</a>), de hasonló alkatrészt tucatnyi boltot körbejárva sem találtam (ha tud valaki olyan boltot, ahol vásárolható ilyen, kérem írjon). Ilyen célezköz hiányában a modulációt szoftveresen oldottam meg.</p>
<p>A szoftveres moduláció miatt a hardver rendkívül egyszerű lett, a következő alkatrészekre volt szükségem:</p>
<ul>
<li>Pic16F690</li>
<li>1db infra led</li>
<li>1db fotodióda</li>
<li>1db npn tranzisztor</li>
<li>4db 1kOhm ellenállás</li>
<li>2db vörös led (egy a bekapcsolt állapotot jelzi &#8211; folyton világít, egy pedig a végeredményt adja meg, hogy érzékel-e jelenlétet az eszköz)</li>
</ul>
<p>A munkát minimalizálandó felhasználtam a programozóhoz adott próbapanelt, amin beépített ledek állnak rendelkezésre, ezeket felhasználtam az állapotjelzések számára, így csak a fotódiódát és az infraledet kell hozzákötni, ami egy breadboard segítségével könnyedén kivitelezhető. Az infra-ledet a PIC rc0 kimenete fogja meghajtani, egy ellenállással bekötve ez a rész készen van. A kimenetet jelző led az rc1, a power-led az rc2-re van kötve hasonló módon. A fotódiódát a tranzisztorral erősítve kötjük a beépített A/D konverter bemenetére, hogy erősebb jelet kapjunk, ezzel megnövelve az érzékelés felbontását. A további félreértések rövidre zárásához felraktam egy kapcsolási rajzot:</p>
<p><img src="/wp-content/uploads/images/pickit/pdetector.png" alt="pdetector.png" width="383" height="470" /></p>
<p>A szoftver ezzel a következő módon tud együttműködni: az alapötlet az, hogy kikapcsolt infra-leddel lemérjük a bejövő fény mennyiségét, majd bekapcsoljuk az infrát, és újra mérünk. A bekapcsolt illetve kikapcsolt infra-led melletti mérések különbsége adja meg az infra-led által leadott és visszavert fény mennyiségét. Ha ez a különbség több iteráció után is meghaladja a küszöbértéket, akkor a kimeneten jelezzük az érzékelt jelenlétet. Azaz két paraméter a küszöbérték (mekkora különbséget várunk el kikapcsolt és bekapcsolt infra-led melletti mérések között), és a kitartás (hány iteráción át kell tartani ezt a különbséget).</p>
<p>És íme, a kód. A dolog nehézségét jelzi, hogy a legtöbb időt két érték összehasonlítása vette el. A kódban szereplő makrót a <a href="http://ww1.microchip.com/downloads/en/DeviceDoc/33014g.pdf">Microchip MPasm leírásából</a> vettem, én egy kétszer olyan hosszú megoldást csináltam elötte.</p>
<p><code lang="mpasm"><br />
#include       __config (_INTRC_OSC_NOCLKOUT &amp; _WDT_OFF &amp; _PWRTE_OFF &amp; _MCLRE_OFF &amp; _CP_OFF &amp; _BOR_OFF &amp;<br />
_IESO_OFF &amp; _FCMEN_OFF)</code></p>
<p>;presence detector code.<br />
;assumed peripheres:<br />
;  infra-led on RC0<br />
;  photo-diode connected to AN0<br />
;  detected proximity output on RC1<br />
;  power led on RC2<br />
;<br />
;we measure input on photo diode, while infra-led is turned off.<br />
;then we measure again with turned on infra-led.<br />
;if the infra-ray is reflected from anything, the second measurement<br />
;should return a higher value</p>
<p>;=================================================<br />
;========VARIABLES================================<br />
;=================================================</p>
<p>cblock 0&#215;20<br />
offmeasure ;stores measurement without infra led<br />
onmeasure  ;stores measurement with infra led<br />
output ;output bits<br />
waitcount ;wait count<br />
surecount ;make sure that something is there and not moves<br />
endc</p>
<p>OUT_ILED EQU H&#8217;0000&#8242; ;bit for infra led<br />
OUT_RES EQU H&#8217;0001&#8242; ;bit for output<br />
OUT_POWER EQU H&#8217;0002&#8242; ;power led</p>
<p>THRESHOLD EQU H&#8217;0002&#8242; ;threshold for measurment gain</p>
<p>SURENESS EQU H&#8217;000C&#8217; ;number of measurements before we&#8217;re sure in the result</p>
<p>;===================================================<br />
;==============macros for selecting banks<br />
;====================================================<br />
SELECT_BANK0 macro<br />
bcf       STATUS,RP0<br />
bcf       STATUS,RP1<br />
endm</p>
<p>SELECT_BANK1 macro<br />
bsf       STATUS,RP0<br />
bcf       STATUS,RP1<br />
endm</p>
<p>SELECT_BANK2 macro<br />
bcf       STATUS,RP0<br />
bsf       STATUS,RP1<br />
endm</p>
<p>SELECT_BANK3 macro<br />
bsf       STATUS,RP0<br />
bsf       STATUS,RP1<br />
endm</p>
<p>;==============================================<br />
;=====MACRO TO WAIT=============================<br />
;==============================================</p>
<p>WAIT macro us<br />
local a = 0<br />
while a &lt; us<br />
nop<br />
a += 1<br />
endw<br />
endm</p>
<p>;============================================<br />
;========EXECUTE A MEASUREMENT===============<br />
;============================================</p>
<p>MEASURE macro<br />
WAIT 5<br />
bsf       ADCON0,GO      ; start conversion<br />
btfsc     ADCON0,GO      ; this bit will change to zero when the conversion is complete<br />
goto      $-1</p>
<p>movf ADRESH,w</p>
<p>btfsc output,OUT_ILED<br />
goto  $+3<br />
movwf onmeasure<br />
goto  $+2<br />
movwf offmeasure<br />
nop<br />
endm</p>
<p>;========================================<br />
;=======SWITCH output led================<br />
;========================================</p>
<p>SWITCH_ILED macro<br />
movlw 0&#215;01<br />
xorwf output,F<br />
endm</p>
<p>;========================================<br />
;========REFRESH OUTPUT==================<br />
;========================================</p>
<p>REFRESH_OUTPUT macro<br />
movfw output<br />
movwf PORTC<br />
endm</p>
<p>;======================================================<br />
; compare file to constant and jump if file<br />
; &gt;= constant.<br />
;======================================================<br />
cfl_jge macro file, con, jump_to<br />
movlw con &amp; 0xff<br />
subwf file, w<br />
btfsc STATUS, C<br />
goto jump_to<br />
endm</p>
<p>;===============================================<br />
;==============MAIN PROGRAM=====================<br />
;===============================================<br />
org 0<br />
Init:<br />
;set variables to zero<br />
movlw 0&#215;00<br />
movwf output<br />
movwf onmeasure<br />
movwf offmeasure</p>
<p>;set powerled on<br />
bsf output,OUT_POWER</p>
<p>;initialize devices<br />
SELECT_BANK1<br />
movlw     0xFF<br />
movwf     TRISA          ; Make PortA all input<br />
clrf      TRISC          ; Make PortC all output<br />
movlw     0&#215;10           ; A2D Clock Fosc/8<br />
movwf     ADCON1<br />
SELECT_BANK2<br />
movlw     0xFF           ; we want all Port A pins Analoge<br />
movwf     ANSEL<br />
SELECT_BANK0<br />
movlw     0&#215;01<br />
movwf     ADCON0         ; configure A2D for Channel 0 (RA0), Left justified, and turn on the A2D module</p>
<p>Loop:<br />
MEASURE ;measure with light off<br />
SWITCH_ILED ;turn light on<br />
REFRESH_OUTPUT<br />
call SubWait ;wait a bit</p>
<p>MEASURE ;measure with light on<br />
SWITCH_ILED ;turn light off<br />
call DecideOutput ;decide output<br />
REFRESH_OUTPUT<br />
call SubWait ;wait a bit<br />
goto      Loop</p>
<p>;==============================================<br />
;=====Decide output============================<br />
;==============================================<br />
DecideOutput:<br />
;onmeasure-offmeasure &gt;= threshold<br />
movfw offmeasure<br />
subwf onmeasure,F<br />
cfl_jge onmeasure,THRESHOLD,DecideYes<br />
goto DecideNo<br />
DecideYes:<br />
;bsf output,OUT_RES<br />
incf surecount,F<br />
goto DecideOutputReturn<br />
DecideNo:<br />
clrf surecount<br />
bcf output,OUT_RES<br />
DecideOutputReturn:<br />
cfl_jge surecount,SURENESS, SwitchOn<br />
goto SwitchOff<br />
SwitchOn:<br />
bsf output, OUT_RES<br />
return<br />
SwitchOff:<br />
bcf output, OUT_RES<br />
return</p>
<p>;===========================================<br />
;===========Subroutine for long wait========<br />
;===========================================<br />
SubWait:<br />
movlw 0xFF<br />
movwf waitcount<br />
StartWait:<br />
WAIT 100<br />
decfsz waitcount,F<br />
goto StartWait<br />
return</p>
<p>;===============================================<br />
;=====PROGRAM END===============================<br />
;===============================================<br />
end</p>
<p>A kütyüt felprogramoztam, a perifériákat megépítettem, és pár iteratív hibajavítás/paraméterfinomítás után eljutottam arra az állapotra, amit elégségesnek neveztem a koncepció működésének a bizonyítására.</p>
<p><img src="/wp-content/uploads/images/pickit/dscf1957_small.jpeg" alt="dscf1957_small.jpeg" width="500" height="375" /></p>
<p>A fenti köntörfalas megfogalmazás nem költői önkifejezés, és nem is véletlen. Az eszköz működik, de épp hogy. A környezet által kifejtett fényerő fehérzajként adódik a rendszerhez, és csak magas &#8220;kitartás&#8221; és &#8220;küszöbérték&#8221; paraméter mellett lehet kiszűrni a téves jelzéseket. Ennek az az eredménye, hogy kb. két másodperc után jelzi ha 5cm-nél közelebb teszem a kezemet az infra-led+fotódióda pároshoz. 10cm-nél már bizonytalan a mérés, és akkor is előfordul egy-egy téves jelzés, ha nincs semmi a közelben.</p>
<p>Ezen problémák orvoslására több ötletem is van, egy részük azonnal megoldódna, ha találnék egy rendes infra adó-vevőt. Persze ötleteket, javaslatokat, hasonló problémákban szerzett tapasztalatokat szívesen fogadok.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1312px; width: 1px; height: 1px;"><a href="http://ww1.microchip.com/downloads/en/DeviceDoc/33014g.pdf">http://ww1.microchip.com/downloads/en/DeviceDoc/33014g.pdf</a></div>]]></content:encoded>
			<wfw:commentRss>http://cubussapiens.hu/2009/01/jelenlet-erzekeles-infravoros-feny-segitsegevel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hibrid CSS menü</title>
		<link>http://cubussapiens.hu/2008/02/hibrid-css-menu/</link>
		<comments>http://cubussapiens.hu/2008/02/hibrid-css-menu/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 18:11:35 +0000</pubDate>
		<dc:creator>Zoltán Ujhelyi</dc:creator>
				<category><![CDATA[A mi webünk]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[fordítás]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[menü]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Translated with the permission of <a href="http://www.alistapart.com">A List Apart Magazine</a> and the author[s]. (Az A List Apart oldal és a szerző engedélyével lefordítva.)</p>
<p>Az eredeti cikk 2005. március 30. óta elérhető <a href="http://www.alistapart.com/articles/hybrid">itt</a>.

Tudom, mire gondoltok... &#8222;Biztosan szükség van még egy cikkre a CSS legördülõ menükrõl?&#8221; Hadd gyõzzelek meg titeket. Mi történne, ha lenne egy tiszta, jól struktúrált menünk, ami egyszerre hordozná magában a legördülõ menük dinamizmusát, egyszerû kódját <em>de</em> megszüntetné a fõ problémáit (nem is beszélve a szép megjelenésrõl)?
 <a href="http://cubussapiens.hu/2008/02/hibrid-css-menu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Translated with the permission of <a href="http://www.alistapart.com">A List Apart Magazine</a> and the author[s]. (Az A List Apart oldal és a szerző engedélyével lefordítva.)</p>
<p>Az eredeti cikk 2005. március 30. óta elérhető <a href="http://www.alistapart.com/articles/hybrid">itt</a>.</p>
<p>Tudom, mire gondoltok&#8230; &#8222;Biztosan szükség van még egy cikkre a CSS legördülõ menükrõl?&#8221; Hadd gyõzzelek meg titeket. Mi történne, ha lenne egy tiszta, jól struktúrált menünk, ami egyszerre hordozná magában a legördülõ menük dinamizmusát, egyszerû kódját <em>de</em> megszüntetné a fõ problémáit (nem is beszélve a szép megjelenésrõl)?<br />
<!--break--><br />
A gondok a legördülõ menüvel:</p>
<ol>
<li>az almenük pontjai nem érhetõek el addig, amíg nem kezdjük el az egész menürendszert használni, és</li>
<li>nem ad megfelelõ tájékozódási pontot a felhasználónak. Nehézkes lehet vele az oldalon belüli navigáció, mert mindig le kell gördíteni a menüt az oldalak váltásához.</li>
</ol>
<p>Ez a technika egy bombabiztos megoldás a böngészõkkel való kompatibilitás és a hozzáférhetõség biztosítására még azon felhasználók számára is, akik régi böngészõt használnak, esetleg problémáik vannak a legördülõ menük használatával, akár mert nem tudja, akár mert nem találja kedvezõnek a legördülõ menük alkalmazásának elveit. Emellett sokkal pontosabb információt ad a hagyományos legördülõ menüknél az oldalon belüli pozícióról.</p>
<p>Figyelem! Ez a technika nem mûködik nagy elemszámú listákra, ahol a hagyományos legördülõ menük még jól használhatóak vagy összeomlanak a puszta tömegük alatt, a nézõponttól függõen.</p>
<p>Egy olyan hibrid menüt fogunk készíteni, ami vízszintesen halad keresztül az ablakon. Két szintû navigációt használ (példánkban a fõ témák és a kapcsolódó oldalak). A menünkben legördülõ hozzáférést biztosítunk minden oldalnak mindkét navigációs szinten, valamint állandóan megjelenítjük a kiválasztott témához tartozó választási lehetõségeket, emlékeztetve a felhasználót, hogy az oldal melyik részén van. Emellett a kódja egyszerû és gyorsan mûködõ lesz.</p>
<p>Jól hangzik? Vágjunk bele.</p>
<h2>Elõször is vegyünk egy listát</h2>
<p>Készítsünk egy listát az építészeti korszakokról és az õ nagyobb alakjaikról. Egy ID-t kapcsolunk az &lt;ul&gt; elemhez és &#8222;off&#8221; illetve &#8222;on&#8221; class-t a menülista elemeihez (ami persze feltehetõleg nem a legjobb megoldás, de a cikk céljainak megfelel):</p>
<p><code lang="html4strict"></p>
<ul id="nav">
<li class="off"><a href="#">Renaissance</a>
<ul>
<li><a href="#">Brunelleschi</a></li>
<li><a href="#">Alberti</a></li>
<li><a href="#">Palladio</a></li>
<li><a href="#">Michelangelo</a></li>
<li><a href="#">Bramante</a></li>
</ul>
</li>
<li class="off"><a href="#">Art Nouveau</a>
<ul>
<li><a href="#">Mackintosh</a></li>
<li><a href="#">Guimard</a></li>
<li><a href="#">Horta</a></li>
<li><a href="#">van de Velde</a></li>
</ul>
</li>
<li class="on"><a href="#">Modern</a>
<ul>
<li><a href="#">Sullivan</a></li>
<li><a href="#">Le Corbusier</a></li>
<li><a href="#">Mies</a></li>
<li><a href="#">Gropius</a></li>
<li><a href="#">Yamasaki</a></li>
</ul>
</li>
<li class="off"><a href="#">Postmodern</a>
<ul>
<li><a href="#">Venturi</a></li>
<li><a href="#">Eisenman</a></li>
<li><a href="#">Stern</a></li>
<li><a href="#">Graves</a></li>
<li><a href="#">Gehry</a></li>
</ul>
</li>
<li class="off"><a href="#">Digital</a>
<ul>
<li><a href="#">Xenakis</a></li>
<li><a href="#">Lynn</a></li>
<li><a href="#">Diller+Scofidio</a></li>
<li><a href="#">Zellner</a></li>
<li><a href="#">Hadid</a></li>
</ul>
</li>
</ul>
<p></code></p>
<h2>Formázzuk meg!</h2>
<p>Ez egy jó hely az induláshoz. Egy egyszerû, szemantikus jelölés, ami könnyen karbantartható és egy helyen található. Úgy <a href="http://demo.cubussapiens.hu/hybrid/hybrid-1.html">néz ki</a> ahogy az elvárható.</p>
<p>Az elsõ dolog, amit a CSS felhasználásával el fogunk érni, az az, hogy az elsõ szintjét vízszintesen jelenítjük meg (a float tulajdonság felhasználásával) és elrejtjük az alsóbb szinteket. A linkeket pedig félkövéren, színezve és kerettel jelenítjük meg.</p>
<p><code lang="css"><br />
#nav li {<br />
  /*float the main list items*/<br />
  margin: 0;<br />
  float: left;<br />
  display: block;<br />
  padding-right: 15px;<br />
}</p>
<p>#nav li.off ul, #nav li.on ul {<br />
  /*hide the subnavs*/<br />
  display: none;<br />
}</p>
<p>#nav li a {<br />
  /*for all links in the list*/<br />
  color: #f90;<br />
  font-weight: bold;<br />
  display: block;<br />
  height: 15px;<br />
  width: 100px;<br />
  border: 1px solid #29497b;<br />
  padding: 5px;<br />
}<br />
</code></p>
<p>Most helyezzük el a második listaszintet a fõ lista alá, hogy amikor újra megjelenik, amegfelelõ helyen legyen.</p>
<p><code lang="css"><br />
#nav li.off ul, #nav li.on ul {<br />
  /*put the subnavs below and hide them all*/<br />
  display: none;<br />
  position: absolute;<br />
  top: 33px;<br />
  height: 15px;<br />
  left: 0;<br />
  padding-top: 10px;<br />
}<br />
</code></p>
<p>Végül jelenítsük meg az almenüt az aktív tématerülethez, ami a példánkban &#8222;Modern&#8221;. A legjobb megoldás erre, ha egyetlen központi, mindent lefedõ menüt használunk, egy osztály használata, mondjuk, a &#8222;Modern&#8221; elemen, és ennek megfelelõ kijelölõket használunk. Ebben a cikkben, ami egy másik oldalon belül lesz közzétéve, és önmagában is elégségesnek kell lennie, egy &#8222;on&#8221; osztályt adunk a kiválasztott témához és &#8222;off&#8221;-ot az inaktív témákhoz.</p>
<p><code lang="css"><br />
#nav li.on a {<br />
  /*change border color for active topic area*/<br />
  border: 1px solid #f90;<br />
}</p>
<p>#nav li.on ul a, #nav li.off ul a {<br />
  /*  cancel inherit of border<br />
      on subnav of active topic */<br />
  border: 0;<br />
}</p>
<p>#nav li.on ul {<br />
  /*display active subnav list*/<br />
  display: block;<br />
}<br />
</code></p>
<p>Még hozzáadunk néhány keretet, és így kapjuk az <a href="http://demo.cubussapiens.hu/hybrid/hybrid-2.html">itt látható</a> eredményt.</p>
<h2>És akkor mindenki gördült, de egy kiesett&#8230;</h2>
<p>Most pedig aktiváltjuk a legördülõt. Ez nem különbözik lényegesen a többi CSS legördülõ menütõl &#8211; a hover a li elemen jelenik meg, így az IE alatt nem fog mûködni a rosszul implementált :hover pszeudo-osztály miatt. Ezzel is mindjárt foglalkozunk. A következõ CSS eltünteti a kereteket a második listaszinten, a kiválasztott almenüt mindig megjeleníti, és beállítja az inaktív menük megjelenítését, ha az õsükre rámutatunk az egérrel. Beállítjuk a z-index tulajdonságot is annak érdekében, hogy az egérrel kiválasztott téma mindig elsõbbséget élvezzen az aktuális téma almenüjével szemben.</p>
<p><code lang="css"><br />
#nav li.on ul a, #nav li.off ul a {<br />
  float: left;<br />
  /*ie doesn't inherit the float*/<br />
  border: 0;<br />
  color: #f90;<br />
  width: auto;<br />
  margin-right: 15px;<br />
}</p>
<p>#nav li.on ul {<br />
  /*display the current topic*/<br />
  display: block;<br />
}</p>
<p>#nav li.off:hover ul {<br />
  /*  display the other topics when<br />
      their parent is hovered */<br />
  display: block;<br />
  z-index: 6000;<br />
}<br />
</code></p>
<p>We&#8217;ll make it a little more user-friendly, with a background on the hovered tabs.<br />
Egy kicsit felhasználóbarátabbá is tesszük azzal, hogy hátteret váltunk a kijelölt(:hover) füleken.</p>
<p><code lang="css"><br />
#nav li.off a:hover, #nav li.off:hover a {<br />
  background: #29497b;<br />
  color: #f90;<br />
}<br />
</code></p>
<p><a href="http://demo.cubussapiens.hu/hybrid/hybrid-3.html">Itt</a> lehet megtekinteni, hol is tartunk.</p>
<h2>Foglalkozzunk a &#8222;különleges&#8221; böngészõinkkel&#8230;</h2>
<p>Két választás van azon böngészõk felé, mint az Internet Explorer, amik nem támogatják a :hover osztályt a &lt;a&gt; elemen kívül. Hagyhatjuk úgy, ahogy van, tudva, hogy mûködni fog néhány éven belül, amikor minden böngészõ támogatni fogja a :hover osztályt (lekopogom). Ugyanakkor nyugodtak lehetünk abban a tudatban, hogy minden navigációs elem látható és elérhetõ minden felhasználó számára. Esetleg megpróbálhatunk egy kis JavaScript kódot írni, ami megfelelõen átírja a CSS kijelölõket úgy, hogy az IE is megérti, ezáltal elérhetõvé téve a legördülõ menü dinamizmusát mindenki számára.</p>
<p>(A mûködés IE-ben úgy-ahogy értelmezhetõ) Kicsit igazítani kell az elhelyezésen a csillag-hack segítségével:</p>
<p><code lang="css"><br />
#nav li.off ul, #nav li.on ul {<br />
  /*put the subnav below*/<br />
  top: 33px;<br />
  *top: 44px; /*reposition for IE*/<br />
}<br />
</code></p>
<p>Tehát a menü nagyszerûen mûködik a modern, szabványkövetõ böngészõkben, és korlátozottan, funkcionálisan mûködik megfelelõ elhelyezéssel az Internet Explorer 5 és 6 böngészõkben is. Egy kis segítséggel a legördülõ menüt az Internet Explorer 5-ös és 6-os verzióiban is mûködésre lehet bírni. Ehhez egy egyszerû JavaScipt kódot kell írni a kijelöléskor a kijelölõk módosítására, ez az IE 5.x és 6.x verziókon mûködik (Windows alatt). Köszönet a módszerért Patrick Griffiths-nek és Dan Webbnek, akik a <a href="http://www.alistapart.com/articles/dropdowns">&#8222;Suckerfish Legördülõ menükkel&#8221;</a>elindítottak a CSS-alapú menürendszerek fejlesztése felé (az írás magyarul az oldalon olvasható [[Suckerfish menük]] címmel). Az õ JavaScript részletük a következõképpen néz ki:</p>
<p><code lang="javascript"><br />
startList = function() {<br />
if (document.all &amp;&amp; document.getElementById) {<br />
navRoot = document.getElementById("nav");<br />
for (i=0; i&lt;navRoot.childNodes.length; i++) {<br />
  node = navRoot.childNodes[i];<br />
  if (node.nodeName=="LI") {<br />
  node.onmouseover=function() {<br />
  this.className+=" over";<br />
    }<br />
  node.onmouseout=function() {<br />
  this.className=this.className.replace<br />
      (" over", "");<br />
   }<br />
   }<br />
  }<br />
 }<br />
}<br />
window.onload=startList;<br />
</code></p>
<p>Még egy egyszerû módosítás szükséges a CSS-en:</p>
<p><code lang="css"><br />
#nav li.off:hover ul, #nav li.over ul {<br />
  display: block;<br />
  z-index: 6000;<br />
}</p>
<p>#nav li.off a:hover,<br />
#nav li:hover a,<br />
#nav li.over a {<br />
  background: #29497b;<br />
  color: #f90;<br />
}</p>
<p></code></p>
<p>ahhoz, hogy az &#8222;.over&#8221; osztály hozzáadása a lista elemekhez, amelyeket kijelölünk, mûködésre bírja a rendszert az IE/Win felhasználók számára. Nem mintha nem lenne érdemes egy új böngészõben gondolkodni, de egyelõre folytatjuk a tömegek kiszolgálását olyan módon, amit már õk is megszoktak.</p>
<p>Tehát ez lenne az. Egy inkrementális változtatás, talán, a korábbi CSS legördülõkhöz képest, de egy másik szemszög ahhoz, hogy felfedezzük azokat az eseteket, ahol tényleg hasznos a navigáció megjelenítése ahelyett, hogy elrejtenénk egy legördülõ menü belsejében.</p>
<h2>És lehet szép isl?</h2>
<p>Ok, hogy nem túl szép még. Nem tehetem meg, hogy egy sokkal szebb grafikával ellátott verziót mutatok ezzel a technikával a pedánsak kedvéért a való világnak. Néhány változtatással, a <a href="http://www.alistapart.com/articles/sprites/">CSS sprite navigációs</a> képekkel (köszönet <a href="http://www.mezzoblue.com">Dave Shea</a>nak, egy fénykép New York Citybõl, egy kicsit több CSS, és olyan menürendszert kapunk, ami megmutatja a CSS igazi erejét, ha grafikai tervezéssel kombináljuk. Kipróbálható a <a href="http://demo.cubussapiens.hu/hybrid/hybrid-4.html">végleges Hibrid CSS legördülõ menü</a>, tökéletesen mûködõképes az összes modern böngészõven.</p>
<h2>A szerzőről</h2>
<p>Eric Shepherd az alapítója az <a href="http://www.arkitrave.com">arkitrave web media</a>-nak, egy kis, webbel és grafikával foglalkozó cégnek a new yorki Buffaloban. Éppen egy építészeti diplomát szerez (Master of Architecture degree) a <a href="http://www.ap.buffalo.edi/architecture/index.asp" title="University at Buffalo">a Buffaloi Egyetemen</a>. Emelett még zongorista is. A munkája megjelent a <a href="http://www.csszengarden.com/088">CSS Zen Garden</a> oldalon, és stratégiai partnere a <a href="http://www.nepostrategies.com">Nepo Strategies</a>-nek, egy buffaloi e-kereskedelmi és webes stratégiai cégnek. Már foglalkozik vele, hogy hogyan magyarázza el az XHTML, a CSS és Javascript DOMmal kombinált erejét a zseniális egyhónapos lányának, Naia-nak.</p>
<p>Translated with the permission of <a href="http://www.alistapart.com">A List Apart Magazine</a> and the author[s]. (Az A List Apart oldal és a szerző engedélyével lefordítva.)</p>
<p>Az eredeti cikk 2005. március 30. óta elérhető <a href="http://www.alistapart.com/articles/hybrid">itt</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cubussapiens.hu/2008/02/hibrid-css-menu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Suckerfish menük</title>
		<link>http://cubussapiens.hu/2007/05/suckerfish-menuk/</link>
		<comments>http://cubussapiens.hu/2007/05/suckerfish-menuk/#comments</comments>
		<pubDate>Thu, 24 May 2007 15:07:16 +0000</pubDate>
		<dc:creator>Zoltán Ujhelyi</dc:creator>
				<category><![CDATA[A mi webünk]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[fordítás]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[menü]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Translated with the permission of <a href="http://www.alistapart.com">A List Apart Magazine</a> and the author[s]. (Az A List Apart oldal és a szerző engedélyével lefordítva.)

Az eredeti cikk 2003. november 7. óta elérhető <a href="http://www.alistapart.com/articles/dropdowns">itt</a>.

A &#8222;DHTML&#8221; legördülő menük maguk után vonták az otromba, böngészőspecifikus hackelésekkel teletömött Javascript kódokat, amik az egyébként elegáns, szemantikus HTML kódot meglehetősen hozzáférhetetlenné<fn> A hozzáférhető/hozzáférhetetlen fogalmakon a webtervezői szókincsben megfelelő accessibility kifejezést értem.</fn> teszik. Ó, azok a pehelykönnyű, hozzáférhető, szabványos, böngészőfüggetlen módszerek! Tekintsd meg a Suckerfish <fn>Suckerfish: Brehm és Wikipedia alapján rövidszárnyú bojtorjánhal. Ez a hal a Gályatartóhal-félék családjába tartozik. Ezek a halak már az ókorban is ismertek voltak a Földközi-tenger vidékén, a halak különlegessége, hogy más halakhoz, esetenként hajókhoz kapcsolódtak, velük vitették magukat. Konkrétan a bojtorjánhalról Brehm ezt írja: &#8222;Elterjedésének határa valószínűen egybeesik a kardoshalakéval, mivel többedmagával ezekre tapadva viteti magát. (<cite><a href="http://mek.oszk.hu/03400/03408/html/2208.html">Brehm: Az állatok világa</a></cite>)</fn> menüket!
 <a href="http://cubussapiens.hu/2007/05/suckerfish-menuk/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Translated with the permission of <a href="http://www.alistapart.com">A List Apart Magazine</a> and the author[s]. (Az A List Apart oldal és a szerző engedélyével lefordítva.)</p>
<p>Az eredeti cikk 2003. november 7. óta elérhető <a href="http://www.alistapart.com/articles/dropdowns">itt</a>.</p>
<p>A „DHTML” legördülő menük maguk után vonták az otromba, böngészőspecifikus hackelésekkel teletömött Javascript kódokat, amik az egyébként elegáns, szemantikus HTML kódot meglehetősen hozzáférhetetlenné A hozzáférhető/hozzáférhetetlen fogalmakon a webtervezői szókincsben megfelelő accessibility kifejezést értem. teszik. Ó, azok a pehelykönnyű, hozzáférhető, szabványos, böngészőfüggetlen módszerek! Tekintsd meg a Suckerfish Suckerfish: Brehm és Wikipedia alapján rövidszárnyú bojtorjánhal. Ez a hal a Gályatartóhal-félék családjába tartozik. Ezek a halak már az ókorban is ismertek voltak a Földközi-tenger vidékén, a halak különlegessége, hogy más halakhoz, esetenként hajókhoz kapcsolódtak, velük vitették magukat. Konkrétan a bojtorjánhalról Brehm ezt írja: „Elterjedésének határa valószínűen egybeesik a kardoshalakéval, mivel többedmagával ezekre tapadva viteti magát. (<cite><a href="http://mek.oszk.hu/03400/03408/html/2208.html">Brehm: Az állatok világa</a></cite>) menüket!<br />
<!--break--><br />
<!--tableofcontents--></p>
<h2>Először a HTML</h2>
<p>Először is, válasszuk a legjobb módszert a menü leírásához — egy listát. Példánkban egy egyszerű HTML sorszámozás nélküli listát használunk.</p>
<pre>&lt;ul&gt;
  &lt;li&gt;Sunfishes

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=""&gt;Blackbanded sunfish&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;Shadow bass&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;Ozark bass&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;White crappie&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

  &lt;/li&gt;

  &lt;li&gt;Grunts

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=""&gt;Smallmouth grunt&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;Burrito&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;Pigfish&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

  &lt;/li&gt;

  &lt;li&gt;Remoras

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=""&gt;Whalesucker&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;Marlinsucker&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;Ceylonese remora&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;Spearfish remora&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;Slender suckerfish&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

  &lt;/li&gt;
&lt;/ul&gt;</pre>
<p>Tényleg eléggé magától értetődő — tiszta és elegáns HTML, ami a hozzáférhetőséget biztosítja. De ezt most átalakítjuk egy dinamikus listává — a listaelemek első szintje egy vízszintes menüsávot fog alkotni, ebből fognak legördülni a második szintű listák.</p>
<h2>Formázzuk meg!</h2>
<p>Kezdésként minden listaelemet piszkáljunk meg egy kicsit — nevezetesen a margót és kitöltést nullára állítjuk, a listaelemek jelzését pedig kikapcsoljuk:</p>
<pre>ul {
  padding: 0;
  margin: 0;
  list-style: none;
  }</pre>
<p>A következő lépésben a lista első szintjét átalakítjuk egy vízszintes menüsávvá. Többféle technika van erre, amiket <a href="http://www.alistapart.com/articles=taminglists">máshol</a> részletesebben kifejtenek. Megjelölhetnénk az elemeket a <code>display: inline;</code> jellemzővel, de ebben a példában inkább balra lebegtetjük őket.</p>
<pre>li {
  float: left;
  position: relative;
  width: 10em;
  }</pre>
<p>Az elemek helye <code>position: relative;</code>-ra lett állítva, mivel a beágyazott listákat az első szinthez képest relatívan helyezzük majd el, a fix (!) szélességmegadás meg azért szükséges, hogy elérjünk bizonyos méreteket. A legördülő menü lassan összeáll.</p>
<p>Ezek után nézzük a lista második szintjét, ami a tényleges legördülő menü lesz:</p>
<pre>li ul {
  display: none;
  position: absolute;
  top: 1em;
  left: 0;
  }</pre>
<p>Ez a listák második szintjét abszolút módon helyezi el (kiemeli a HTML folyamból, és külön kezeli őket), és alapértelmezetten meg nem jelenítettekké állítja. Abban az esetben, ha a <code>display: none;</code> részt <code>display: block;</code>-ra cserélnénk, akkor látjuk szükségét a top és a left értékek beállításának az Internet Explorerben, mert ezek nélkül az IE a második szintű listákat az ősük jobb felső sarkába helyezi a bal alsó helyett. Sajnos ez az IE megoldás elkavarja a dolgokat az Opera-hoz hasonló böngészőkben, így  ezekben a következő CSS kódra van szükség a top és left paraméterek beállításához:</p>
<pre>li &gt; ul {
  top: auto;
  left: auto;
  }</pre>
<div class="note">Angolul: And now, making the sucker work. Lefordíthatatlan szójáték, az angol suckerfish névvel játszik.</div>
<p>És most rakjuk hozzá az összekapcsolást! Ahhoz, hogy a második listaszintet megjelenítsük, amikor az első szinten a pontok „kiválasztódnak”, egyszerűen a következő kódot kell hozzáadni:</p>
<pre>li:hover ul { display: block; }</pre>
<p>Ami annyit jelent, hogy bármely elem, ami egy olyan pont alatti listában szerepel, amire az egérkurzor rámutat, megjelenítendő.</p>
<p>Végül, mert a listaelemek balra vannak lebegtetve, a tartalmat alattuk függetleníteni kell a lebegtetéstől a <code>clear: left</code> formázás kijelölésével.</p>
<h2>Várjunk egy pillanatot!</h2>
<p>”Ez a legördülő halandzsa nem működik!” &#8211; hallom az olvasók 102,6 százalékát (vagy a legfrissebb, éppen csökkenő hányadukat) kiabálni. Igen, mint kitalálható, az Internet Explorer felhasználóiról beszélek. Minél többet használod egyszerű szörfözőként, vagy webfejlesztőként a Mozillához hasonló böngészőket, annál feltűnőbb, hogy mennyire nevetséges az Internet Explorer, ha a webes szabványokról esik szó. A <code>:hover</code> pszeudoosztálynak elvben minden elemre működnie kellene, de az Internet Explorerben csak a linkekre működik. Pont. Mi a haszna a legördülő menünek, ha csak a böngészők -2,6 százalékán működik? Hogy őszinték legyünk, nem sok. Egy kicsit többet kell még varázsolnunk.</p>
<h2>A mentőöv: DOM-szkriptelés</h2>
<p>Ugyan megállapítottuk, hogy az IE ugyan nem támogatja a <code>:hover</code> pszeudo-osztályt, de a Document Object Model használatával egyszerűen kapcsolhatunk egéreseményeket (mouseover, mouseout) bármilyen elemhez. Ez jó hír számunkra, mert azt jelenti, hogy egy rövid JavaScript kódocskával hatékonyan orvosolhatjuk az IE <code>:hover</code> gondjait.</p>
<p>Mivel az IE vak, ahhoz, hogy azonosítsuk a <code>:hover</code> pszeudoosztály tulajdonságait, más módszert kell találni. A JavaScript segítségével manipulálhatuk a className tulajdonságát egy elemnek, így először egy kicsit a CSS-t kell megváltoztatnunk:</p>
<pre>li:hover ul{ display: block; }</pre>
<p>helyett a következő kód használható:</p>
<pre>li:hover ul, li.over ul{ display: block; }</pre>
<p>Ezután meghívhatjuk a <code>:hover</code> CSS szabályokat a kívánt elemre, ha hozzáadjuk az <code>over</code> osztályt a kívánt elemhez. Szükségünk lehet továbbá arra, hogy megmondjuk az IE-nek, hogy mely UL elemek szolgálnak az oldalon legördülő menüként. Ez egy <code>id</code> hozzáadásával tesszük meg a listánk gyökér <code>ul</code> elemére:</p>
<p>Ezáltal a</p>
<pre>&lt;ul&gt;</pre>
<p>kódból a következő lesz:</p>
<pre>&lt;ul id="nav"&gt;</pre>
<p>Most, hogy tudjuk azonosítani a gyökér <code>ul</code> elemét a legördülő listánknak, kiemelhetjük ezt az elemet, és végigmehetünk az összes gyerekelemén, hozzáadva a mouseover és mouseout eseményeket az összes <code>li</code> elemhez a belsejében. Ezt így tehetjük meg:</p>
<pre>startList = function() {
if (document.all&amp;&amp;document.getElementById) {
navRoot = document.getElementById("nav");
for (i=0; i&lt;navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+=" over";
  }
  node.onmouseout=function() {
  this.className=this.className.replace(" over", "");
   }
   }
  }
 }
}
window.onload=startList;</pre>
<p>A lap betöltésekor a <code>startList</code> függvény meghívódik. Ez meghatározza, hogy a böngésző IE 5 vagy újabb a <code>document.all</code> objektum és a <code>document.getElementById</code> függvény létezésének vizsgálatával. Ez egy picit nyers megoldás, de rövid és egyszerű, és mivel mi egy kompakt megoldást szeretnénk, ez is megteszi. Ezután végiglépked a listákon, engedélyezve a mouseover és a mouseout eseményeket, amik hozzáadják/eltávolítják a <code>over</code> osztályt a <code>className</code> tulajdonságához az elemnek.</p>
<p>Így már működik. Probléma esetén érdemes megnézni a megjegyzésekkel ellátott <a href="http://www.htmldog.com/articles/suckerfish/bones/">példa vázat</a> működés közben.</p>
<h3>Kopoltyúk, uszonyok, pikkelyek&#8230;</h3>
<p>Eddig amit csináltunk, egy kicsit meztelennek tűnik. Ez a cikk csak az ötlet alapjait mutatja be, de CSS segítségével <a href="http://www.htmldog.com/articles/suckerfish/example/">sokkal szebben</a> meg lehet valósítani. Egy nyilvánvaló kiindulópont lehet háttérszín hozzárendelése a második listaszinthez.</p>
<p>Miután visszaállítottuk a top és left tulajdonságokat, ahogy korábban leírtuk, a legördölő menük a <a href="http://www.htmldog.com/articles/suckerfish/example/">szép</a> példában közvetlenül a feliratok alatt jelennek meg a legtöbb modern böngészőben, de sajnos nem mindben. A Safari 1.0-ban még mindig a képernyő bal felső sarkából gördülnek le.</p>
<h3>További használhatósági és hozzáférhetőségi gondolatok</h3>
<p>Ha az első listaszint elemeiből hivatkozásokat csinálunk, megengedjük a tabstop használatát azon olvasók számára, akik nem használnak mutatóeszközöket. Ha sikerül olyan oldalakra mutatnunk, amik magasabb szinten vannak, mint az almenü elemei, az még jobb eredményt ad.</p>
<h2>A szerzőkről</h2>
<p>Patrick Griffiths egy szabadúszó londoni webtervező, aki kedveli, tiszteli a soul-t, az evolúciót és a kedves weboldalát (megjegyzés: az eredeti pet kedvencet és háziállatot egyaránt jelent), a <a title="A good practice guide to HTML and CSS" href="http://www.htmldog.com"><span class="caps">HTML </span>Dog</a>-ot. Időnként becézgeti a <a title="PTG’s little site thing" href="http://www.htmldog.com/ptg/"><span class="caps">PTG</span></a>-t a hangulatától függően.</p>
<p><a href="http://www.danwebb.net">Dan Webb</a> egy webtervező és DJ-nek is tanul. A korábbi munkái között szerepel szabványkövető, hozzáférhető oldalak és webalkalmazások megvalósítása az Egyesült Királyság kormányzati hivatalainak és emberek táncra penderítése London homályos szórakozóhelyein.</p>
<hr />Translated with the permission of <a href="http://www.alistapart.com">A List Apart Magazine</a> and the author[s]. (Az A List Apart oldal és a szerző engedélyével lefordítva.)</p>
<p>Az eredeti cikk elérhető <a href="http://www.alistapart.com/articles/dropdowns">itt</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cubussapiens.hu/2007/05/suckerfish-menuk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

