Autor Zpráva
phanuel
Profil *
Dobrý den, mám drobný problém udělal jsem si pomocí css hover vysouvací menu na

bona-foto.wz.cz

v css mám

#sidebar ul ul ul,
#sidebar ul ul li:hover ul ul
{display: none;}

#sidebar ul ul li:hover ul,
#sidebar ul ul ul li:hover ul
{display: block;}


na stránkách vše dobře funguje, ale IE ejhle to nemůže přežvýkat tady na fórech jsem našel hodně informací o .....htc, ale jaksi jsem nepochopil asi podstatu sám mám v dokumentu csshover.htc


<attach event="ondocumentready" handler="parseStylesheets" />
<script>
/**
 *	Whatever:hover - V1.41.050927 - hover & active
 *	------------------------------------------------------------
 *	(c) 2005 - Peter Nederlof
 *	Peterned - http://www.xs4all.nl/~peterned/
 *	License  - http://creativecommons.org/licenses/LGPL/2.1/
 *
 *	Whatever:hover is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU Lesser General Public
 *	License as published by the Free Software Foundation; either
 *	version 2.1 of the License, or (at your option) any later version.
 *
 *	Whatever:hover is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 *	Lesser General Public License for more details.
 *
 *	Credits and thanks to:
 *	Arnoud Berendsen, Martin Reurings, Robert Hanson
 *
 *	howto: body { behavior:url("csshover.htc"); }
 *	------------------------------------------------------------
 */
 
var csshoverReg = /(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active)/i,
currentSheet, doc = window.document, hoverEvents = [], activators = {
	onhover:{on:'onmouseover', off:'onmouseout'},
	onactive:{on:'onmousedown', off:'onmouseup'}
}
 
function parseStylesheets() {
	if(!/MSIE (5|6)/.test(navigator.userAgent)) return;
	window.attachEvent('onunload', unhookHoverEvents);
	var sheets = doc.styleSheets, l = sheets.length;
	for(var i=0; i<l; i++) 
		parseStylesheet(sheets[i]);
}
	function parseStylesheet(sheet) {
		if(sheet.imports) {
			try {
				var imports = sheet.imports, l = imports.length;
				for(var i=0; i<l; i++) parseStylesheet(sheet.imports[i]);
			} catch(securityException){}
		}
 
		try {
			var rules = (currentSheet = sheet).rules, l = rules.length;
			for(var j=0; j<l; j++) parseCSSRule(rules[j]);
		} catch(securityException){}
	}
 
	function parseCSSRule(rule) {
		var select = rule.selectorText, style = rule.style.cssText;
		if(!csshoverReg.test(select) || !style) return;
		
		var pseudo = select.replace(/[^:]+:([a-z-]+).*/i, 'on$1');
		var newSelect = select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2' + pseudo);
		var className = (/\.([a-z0-9_-]*on(hover|active))/i).exec(newSelect)[1];
		var affected = select.replace(/:(hover|active).*$/, '');
		var elements = getElementsBySelect(affected);
		if(elements.length == 0) return;
 
		currentSheet.addRule(newSelect, style);
		for(var i=0; i<elements.length; i++)
			new HoverElement(elements[i], className, activators[pseudo]);
	}
 
function HoverElement(node, className, events) {
	if(!node.hovers) node.hovers = {};
	if(node.hovers[className]) return;
	node.hovers[className] = true;
	hookHoverEvent(node, events.on, function() { node.className += ' ' + className; });
	hookHoverEvent(node, events.off, function() { node.className = node.className.replace(new RegExp('\\s+'+className, 'g'),''); });
}
	function hookHoverEvent(node, type, handler) {
		node.attachEvent(type, handler);
		hoverEvents[hoverEvents.length] = { 
			node:node, type:type, handler:handler 
		};
	}
 
	function unhookHoverEvents() {
		for(var e,i=0; i<hoverEvents.length; i++) {
			e = hoverEvents[i]; 
			e.node.detachEvent(e.type, e.handler);
		}
	}
 
function getElementsBySelect(rule) {
	var parts, nodes = [doc];
	parts = rule.split(' ');
	for(var i=0; i<parts.length; i++) {
		nodes = getSelectedNodes(parts[i], nodes);
	}	return nodes;
}
	function getSelectedNodes(select, elements) {
		var result, node, nodes = [];
		var identify = (/\#([a-z0-9_-]+)/i).exec(select);
		if(identify) return [doc.getElementById(identify[1])];
		
		var classname = (/\.([a-z0-9_-]+)/i).exec(select);
		var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');
		var classReg = classname? new RegExp('\\b' + classname[1] + '\\b'):false;
		for(var i=0; i<elements.length; i++) {
			result = tagName? elements[i].all.tags(tagName):elements[i].all; 
			for(var j=0; j<result.length; j++) {
				node = result[j];
				if(classReg && !classReg.test(node.className)) continue;
				nodes[nodes.length] = node;
			}
		}	return nodes;
	}
</script>


Bude-li mít někdo vteřinku se na to mrknout budu moc rád. Děkuji
Bubák
Profil
Máš IE ve quirku a deklaraci pro csshover.htc zpřístipňuješ jen pro IE nižších verzí, než IE7.
Jen pro příště, kódy jsi sem vložil úplně zbytečně, ještě, že jsi dal aspoň adresu stránky.
habendorf
Profil
No hlavně nevidím nikde definovanou třídu .hover.
phanuel
Profil *
habendorf:
jsem si pomocí css hover vysouvací menu na

Dá se zpříštupnit i pro IE7? Někde jsem to četl v angličtině, ale nějak jsem tomu neporozumněl.
Chamurappi
Profil
Reaguji na phanula:
Vyhoď z csshover.htc řádek č. 34.
phanuel
Profil *
Chamurappi:
Vyhoď z csshover.htc řádek č. 34.
Mohl bys prosímtě napsat obsah řádku - mám to pod kompresí, takže řádek č.34 neexistuje
Chamurappi
Profil
Reaguji na phanula:
Nemohl. Přečti si ho z řádku č. 34 v kódu, který jsi sem vložil.
Plaváček
Profil
phanuel:

Nebo ten řádek (nějak ho už najdeš) uprav takto:

 if(!/MSIE (5|6|7)/.test(navigator.userAgent)) return;


A je to.
Chamurappi
Profil
Reaguji na Plaváčka:
A co osmička? A další verze, které přijdou?
Plaváček
Profil
Chamurappi:

A co osmička? A další verze, které přijdou?

Popravdě - nevím. Pro sedmičkovou verzi (pokud běží v quirku) ale tahle blbůstka funguje. Víc jsem zatím nepátral, protože rozbalovací navigaci nepoužívám zas tak moc často, vlastně prakticky vůbec. Ale mám pocit, že osmička už :hover umí, ne?
Chamurappi
Profil
Reaguji na Plaváčka:
Pro sedmičkovou verzi (pokud běží v quirku) ale tahle blbůstka funguje.
Pro jakoukoliv verzi v quirku je tahle blbůstka nezbytná, pokud má :hover fungovat na <li>. Proto jsem mu radil tu kontrolu verze smazat úplně.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: