Zum Inhalt springen

Accessible menü mit Bild und unsichtbarem Text

Erstellt am 29. Januar 2009 · 5 Antworten · letzte Antwort am 16. April 2009

Tags: HTML & CSS, Frage

SimonSchaufi ·

Hallo!
Ich habe schon das Forum durchsucht aber bisher keinen Eintrag gefunden, der mir hilft, mein Problem zu lösen.

Ich möchte gerne einen Menü erstellen, das so aussieht:

<ul>
<li><a href="[link]"><span class="hidden">[hier der Menütext]</span><img src="spacer.gif" /></a></li>
</ul>

Der Benutzer soll dann auf das Bild klicken können, den Text aber nur sehen, wenn er CSS ausschaltet.

Kann mir jemand mit dem TYPOScript helfen? -> wie wrappe ich das?

jenses ·

Z.B. so hier:

/******
*
*
accessible GTMenu

Published in: TYPO3 

URL: http://www.gtmenu.de

Using this TypoScript, 
you can build an accessible GTMenu which may fully be styled using CSS. 
We propose using this instead of ANY GMENU which creates ugly code.

It renders a simple TMENU, 
and wraps an IMG_RESOURCE into the ATagParams by making this a cObject. 
There will be a podcast on typo3.org sometime soon.

Please note: 
in order to use {TSFE:lastImgResourceInfo|0} 
(which reads the width of the last image generated by the gifbuilder) 
you need TYPO3 4.1

*
*
*******/


### TypoScript ###

lib.gtmenu = HMENU
lib.gtmenu {
	1 = TMENU
	1 {
		wrap = <ul id="navi">|</ul>
		NO.doNotLinkIt = 1
		NO.wrapItemAndSub = <li>|</li>
		NO.stdWrap.cObject = COA
		NO.stdWrap.cObject {
			10 = TEXT
			10 {
				field = title
				typolink {
					parameter.field = uid
					
					ATagParams.cObject = COA
					ATagParams.cObject {
						10 = IMG_RESOURCE
						10.file = GIFBUILDER
						10.file {
							XY = [10.w]+[20.w]+10,70
							transparentColor = #ffffff
							10 = TEXT
							10 {
								text.field = subtitle//title
								fontSize = 14
								fontFile=fileadmin/fonts/DINPro-Bold.otf
								offset = 5,20
								fontColor = #787879
							}
							
							20 = BOX
							20 {
								dimensions = 0,30,[10.w]+[20.w]+10,30
								color = #e53827
							}
							
							30 = TEXT
							30 < .10
							30 {
								offset = 5,50
								fontColor = #ffffff
							}
						}
						10.stdWrap.dataWrap = style="width:{TSFE:lastImgResourceInfo|0}px; background-image: url('/|');"
					}
				}
			}
		}
	}
}



### CSS ###

ul#navi {list-style: none;}
ul#navi li {float: left;}
ul#navi li a {background-repeat:no-repeat; display:block; overflow:hidden;text-indent: 999em; white-space:nowrap; height:30px;}
ul#navi li a:hover, ul#navi li.current a,ul#navi li.over a {background-position:0px -30px;}

Das Bild wird dabei als CSS-Hintergrundbild eingebunden und nicht als image-tag,
das ist semantisch sauberer...

SimonSchaufi ·

Auf den ersten Blick glaube ich, dass das Script nicht das macht, was ich gerne hätte.

Mein bisheriges Script sieht so aus:

## Sub Menu [Begin]
temp.submenu = HMENU
temp.submenu.entryLevel = 2
temp.submenu{
  1 = TMENU
  1 {
    expAll=1
    wrap=<ul class="nav3">|</ul>
    NO {
	  afterImg=fileadmin/templates/main_2/spacer.gif
	  afterImgLink=1
	  doNotShowLink=1
	  allWrap=<li>|</li>
    }
  }
  1.ACT < NO
  1.ACT = 1
  1.ACT {
	  afterImg=fileadmin/templates/main_2/spacer.gif
	  afterImgLink=1
	  doNotShowLink=1
	  allWrap=<li>|</li>
	  ATagParams=class="active"
  }
}

was hier aber fehlt ist der Menütext. den hätte ich wie gesagt gerne in einem span, der mit css versteckt wird.

SimonSchaufi ·

Lösung (zwar nicht ganz so wie ich wollte, aber fast):

temp.submenu = HMENU
temp.submenu {
    entryLevel = 2
    1 = TMENU
    1.wrap = <ul class="nav3">|</ul>
    1 {
        NO {
            wrapItemAndSub = <li><span class="hidden">|</li>
            stdWrap.append = COA
            stdWrap.append {
                9 = HTML
                9.value = </span>
                10 = IMAGE
                10.file = fileadmin/templates/main_2/spacer.gif
                10.altText.field = title
                10.titleText.field = title
            }
        }
    }
    1.ACT < NO
    1.ACT = 1
    1.ACT {
        wrapItemAndSub = <li><span class="hidden">|</li>
        stdWrap.append = COA
        stdWrap.append {
            9 = HTML
            9.value = </span>
            10 = IMAGE
            10.file = fileadmin/templates/main_2/spacer.gif
            10.altText.field = title
            10.titleText.field = title
        }
        ATagParams=class="active"
    }
}
fantasmo ·

Ich möchte eigentlich genau so etwas machen, allerdings kein Menü (das hab ich schonmal gemacht, auch mit TS... ging gut).

Ich möchte das bei Texten/Inhaltselementen machen.
Dass der Redakteur also einen Text eingibt...z.B. eine Bedienungsanleitung... der Redakteur soll aber dann die Möglichkeit haben, dass er ein Bild (z.B. eine Grafik, die schön bildlich erklärt, wie man z.B. eben den Videorecorder anschaltet) hochlädt (also ohne TS-Schreiberei, sondern per Bild-Upload-Dialog).
Dieses Bild soll dann den Text ersetzen (Prinzip: text-indent).

Das selbe Prinzip wär auch für Überschriften toll. Text eingeben, hinter dem verbirgt sich eigentlich eine 08/15 Arialschrift und dann lädt man aber ein Bild hoch, wo die Überschrift durch z.B. eine toll gezeichnete kleine Grafik ersetzt wird.

Das alles, "Texte/Listen und Überschriften durch Bilder ersetzen" hab ich schon sehr oft, bei Internetseiten gesehen, gehe aber davon aus, dass die Leute das dort ohne CMS einfach im HTML-Code und in der CSS geregelt haben.
Ich suche eben eine Möglichkeit, wie ich das komfortabel für Typo3-Redakteure machen könnte... Also eine Extension wär toll, hab aber bislang nichts gefunden und weiß auch nicht so recht wie man dieses Verfahren vielleicht nennt.