Forum Moderators: not2easy

Message Too Old, No Replies

Problem with CSS menu in Chrome

         

galahad2

11:27 am on Apr 21, 2009 (gmt 0)

10+ Year Member



We've set up a CSS / Javascript dropdown menu which works fine in all browsers (even Opera, amazingly) EXCEPT Chrome- does anyone have an idea why? Is Chrome particularly bad with this sort of code?

The CSS for the menu is as follows:

.jqueryslidemenu{
font: bold 12px "Arial Unicode MS", Arial, sans-serif;
background: #6666cc;
width: 97%;
}

.jqueryslidemenu ul{
margin: 0;
padding: 0;
list-style-type: none;
}

/*Top level list items*/
.jqueryslidemenu ul li{
position: relative;
display: inline;
float: left;
}

/*Top level menu link items style*/
.jqueryslidemenu ul li a{
display: block;
background: #6666cc; /*background of tabs (default state)*/
color: white;
padding: 9px 25px;
border-right: 1px solid #fff;
color: #2d2b2b;
text-decoration: none;
border-left:0px;
}

* html .jqueryslidemenu ul li a{ /*IE6 hack to get sub menu links to behave correctly*/
display: inline-block;
}

.jqueryslidemenu ul li a:link, .jqueryslidemenu ul li a:visited{
color: white;
}

.jqueryslidemenu ul li a:hover{
background: #33cc66; /*tab link background during hover state*/
color: white;
}

/*1st sub level menu*/
.jqueryslidemenu ul li ul{
position: absolute;
left: 0;
display: block;
visibility: hidden;
}

/*Sub level menu list items (undo style from Top level List Items)*/
.jqueryslidemenu ul li ul li{
display: list-item;
float: none;
}

/*All subsequent sub menu levels vertical offset after 1st level sub menu */
.jqueryslidemenu ul li ul li ul{
top: 0;
}

/* Sub level menu links style */
.jqueryslidemenu ul li ul li a{
font: normal 12px "Arial Unicode MS", Arial, sans-serif;
width: 120px; /*width of sub menus*/
float:left;
padding: 10px 20px 10px;
margin: 0;
border-top-width: 0;
border-right: 0px solid #fff;
border-left: 0px solid #fff;
border-bottom: 1px solid white;
}

.jqueryslidemenuz ul li ul li a:hover{ /*sub menus hover style*/
background: #eff9ff;
color: black;
}

And it uses the following Javascript file:

var arrowimages={down:['downarrowclass', 'down.gif', 23], right:['rightarrowclass', 'right.gif']}

var jqueryslidemenu={

animateduration: {over: 200, out: 100}, //duration of slide in/ out animation, in milliseconds

buildmenu:function(menuid, arrowsvar){
jQuery(document).ready(function($){
var $mainmenu=$("#"+menuid+">ul")
var $headers=$mainmenu.find("ul").parent()
$headers.each(function(i){
var $curobj=$(this)
var $subul=$(this).find('ul:eq(0)')
this._dimensions={w:this.offsetWidth, h:this.offsetHeight, subulw:$subul.outerWidth(), subulh:$subul.outerHeight()}
this.istopheader=$curobj.parents("ul").length==1? true : false
$subul.css({top:this.istopheader? this._dimensions.h+"px" : 0})
$curobj.children("a:eq(0)").css(this.istopheader? {paddingRight: arrowsvar.down[2]} : {}).append(
)
$curobj.hover(
function(e){
var $targetul=$(this).children("ul:eq(0)")
this._offsets={left:$(this).offset().left, top:$(this).offset().top}
var menuleft=this.istopheader? 0 : this._dimensions.w
menuleft=(this._offsets.left+menuleft+this._dimens ions.subulw>$(window).width())? (this.istopheader? -this._dimensions.subulw+this._dimensions.w : -this._dimensions.w) : menuleft
if ($targetul.queue().length<=1) //if 1 or less queued animations
$targetul.css({left:menuleft+"px", width:this._dimensions.subulw+'px'}).slideDown(jqu eryslidemenu.animateduration.over)
},
function(e){
var $targetul=$(this).children("ul:eq(0)")
$targetul.slideUp(jqueryslidemenu.animateduration. out)
}
) //end hover
}) //end $headers.each()
$mainmenu.find("ul").css({display:'none', visibility:'visible'})
}) //end document.ready
}
}

//build menu with ID="myslidemenu" on page:
jqueryslidemenu.buildmenu("myslidemenu", arrowimages)

And lastly, the menu is placed in pages as follows (example):

<div id="myslidemenu" class="jqueryslidemenu">
<ul>
<li class="mainmenu"><a href="index.htm">Home</a></li>
<li class="mainmenu"><a href="news.htm">News &amp; Events</a></li>
<li class="mainmenu"><a href="products.htm">Products &amp; Services</a>
<ul>
<li class="menu"><a href="#nogo">New Products</a>
<ul>
<li class="menu"><a href="clinaxysdetails.htm">Details</a></li>
<li class="menu"><a href="clinaxystrials.htm">Trials</a></li>
<li class="menu"><a href="clinaxyssafety.htm">Safety</a></li>
<li class="menu"><a href="instruments.htm">Instruments</a></li>
</ul>
</li>
<li class="menu"><a href="installation.htm">Installation</a></li>
<li class="menu"><a href="training.htm">Training</a></li>
<li class="menu"><a href="maintenance.htm">Maintenance</a></li>
<li class="menu"><a href="usergroup.htm">User Group</a></li>
</ul>
</li>
<li class="mainmenu"><a href="#nogo">Quality</a>
<ul>
<li class="menu"><a href="qualitypolicy.htm">Policy</a></li>
<li class="menu"><a href="qualitycert.htm">Certificate</a></li>
</ul>
</li>
<li class="mainmenu"><a href="customers.php">Customer Area</a></li>
<li class="mainmenu"><a href="contacts.htm">Contacts</a></li>
<li class="mainmenu"><a href="login.php">Log In</a></li>
</ul>
<br style="clear: left" />
</div>

Works fine in everything we've tried, apart from Chrome...?

swa66

2:30 pm on Apr 21, 2009 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Could you describe the problem ?

Is safari doing it different from Chrome ? (they share a rendering engine)

DrDoc

7:48 pm on Apr 21, 2009 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Chrome has a lot of strange quirks, I've found. There are some really serious bugs in it.

And, yes, Chrome renders situational things differently from Safari. Awkward.