Zum Inhalt springen

GMENU und Alphatransparenz im IE

Erstellt am 30. Mai 2007 · 7 Antworten · letzte Antwort am 1. Juni 2007

Tags: Bilder, HTML & CSS, Frage

italiener ·

Hallo Typo3ler

Ich möchte ein GMENU erzeugen mit einem halbtransparenten Hintergrund + Logo! D.h. das dahinterliegende Bild muss durchschimmern! In Firefox und Opera klappt das auf Anhieb, aber wie das so ist... im Internet Explorer natürlich nicht...

Die "tpg_iepngfix" Extension habe ich bereits getestet - bringt nix!

Beim Rollover soll das halbtransparente PNG erscheinen. Tut es im IE auch, aber halt komplett transparent. Und das Logo sieht total kantig aus...

Hat jemand Tips zum Umgang mit PNGs im GMENU?

Hier mein TS:

lib.menu1 = HMENU
lib.menu1.special = list
lib.menu1.special.value = {$id_mainmenu}

lib.menu1.1 = GMENU 
lib.menu1.1.expAll = 0
lib.menu1.1.wrap = |
lib.menu1.1 {
	
	NO {
	wrap = |
	ATagTitle.dataWrap = {$atag} {field:title}

	XY = 230,145
	
	3 = IMAGE
	3.file = fileadmin/templates/images/menu1_bg1.png
	3.offset = 0,0
	3.antiAlias = 1
	
	10 = TEXT
	10.text.field = title

	10.fontFile = fileadmin/templates/fonts/{$var_font_1}
	10.fontSize = 11

	10.fontColor = white
	10.offset = 35,136 || 18,136
	10.niceText = 0
	10.antiAlias = 1
	10.iterations = 2
	}

	RO < .NO
	RO = 1
	RO.3.file = fileadmin/templates/images/menu1_bg1_ro.png

	ACT < .NO
	ACT = 1
	ACT.3.file = fileadmin/templates/images/menu1_bg1_ro.png
}
fuss ·

Olla!

tpg_iepngfix kenn ich nicht, habe ich mir auch noch nicht angeguckt.

Ich habe das bisher immer wie folgt gelöst:

Ist ein bisschen Vorarbeit von Nöten, um dem drecks InternetExploder 6 pngs beizubringen, aber es geht. Angenommen Dein GMENU liegt in einem div mit der id="navmain":

/* css only for exploder 6 */
* html #navmain img { behavior: url(DEINPFAD/iepngfix.htc) }

DEINPFAD könnte z.B. sein fileadmin/templates.

Dieses CSS sollte mit einer Browserweiche, die NUR für InternetExploder 6 greift, eingebunden werden.

Der behavior Parameter ist ein M$ eigener Kram, und somit nicht valide nach W3C, das sollte aber für einen Browser, welchen eh kein normaler Mensch mit halbwegs gesundem Menschenverstand nutzt, ziemlich egal sein. (Deswegen auch die Browserweiche, jeder bekommt halt das, was er verdient.)

Als nächstes legen wir uns unter DEINPFAD eine leere Datei mit Namen iepngfix.txt an.
In diese Datei wird folgendes reinkopiert:

<public:component>
<public:attach event="onpropertychange" onevent="doFix()" />

<script type="text/javascript">

// IE5.5+ PNG Alpha Fix v1.0RC4
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com

// This is licensed under the CC-GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/


// This must be a path to a blank image. That's all the configuration you need.
if (typeof blankImg == 'undefined') var blankImg = '1px_TRANS.gif';


var f = 'DXImageTransform.Microsoft.AlphaImageLoader';

function filt(s, m)
{
 if (filters[f])
 {
  filters[f].enabled = s ? true : false;
  if (s) with (filters[f]) { src = s; sizingMethod = m }
 }
 else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
}

function doFix()
{
 // Assume IE7 is OK.
 if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
  (event && !/(background|src)/.test(event.propertyName))) return;

 var bgImg = currentStyle.backgroundImage || style.backgroundImage;

 if (tagName == 'IMG')
 {
  if ((/\.png$/i).test(src))
  {
   if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
    style.width = offsetWidth + 'px';
   filt(src, 'scale');
   src = blankImg;
  }
  else if (src.indexOf(blankImg) < 0) filt();
 }
 else if (bgImg && bgImg != 'none')
 {
  if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
  {
   var s = RegExp.$1;
   if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
    style.width = offsetWidth + 'px';
   style.backgroundImage = 'none';
   filt(s, 'crop');
   // IE link fix.
   for (var n = 0; n < childNodes.length; n++)
    if (childNodes[n].style) childNodes[n].style.position = 'relative';
  }
  else filt();
 }
}

doFix();

</script>
</public:component>

Auf den Hinweis, dass das Script nicht von mir ist, verzichte in an dieser Stelle, anyway: thanks Angus Turnbull! 😉

Diese Datei nun umbennen in iepngfix.htc weil eine .htc nicht innerhalb von TYPO3 editiert werden darf, sind wir den Umweg über die .txt gegangen

Jetzt brauchst Du nur noch unter DEINPFAD eine Datei mit Namen 1px_TRANS.gif welche -wie der Name schon sagt 😉- eine transparente gif Datei mit 1x1 px Größe ist, hochladen.

Das sollte es gewesen sein.

Have phun!

gruss, fuss

italiener ·

Hallo fuss!

Also ich habs echt probiert, aber es bringt rein gar nichts!
Habe erstmal ohne eine condition die Zeile

* html #menu1 img { behavior: url(../scripts/iepngfix.htc) }

hinzugefügt, dann die .htc Datei in Scripts geschoben und dann das 1x1px transparente GIF "1px_TRANS.gif" in scripts gezogen. Aber auch jetzt gibts keine Besserung! Er macht noch immer alles entweder völlig transparent oder halt komplett ausgefüllt. Der IE kann einfach keine halben Sachen! ;-)

Ich muss also weiter probieren...
Muss ich beim GMENU irgendwas beachten bezüglich des Transparenzverhaltens beachten? Ich hab zwar schon jegliche Kombination probiert, aber vielleicht weiß der fuss ja weiter?! o.O

transparentBackground = 1
backColor = #ff0000
transparentColor = #ff0000
Unbekannter Benutzer ·

Kann sein, dass die url Angabe beim behaviour nicht dem normalen Weg folgt, sondern das die vom Webroot aus sein muss... Also sowas wie fileadmin/templates/scripts/iepngfix.htc

fuss ·

Ja, hat er aber in seinem Codebeispiel nicht berücksichtigt.... Daher...

Opps, stimmt! Sorry, shame on me 😉[/quote]