我正在使用CSS和HTML5设置水平菜单。(我的经验有限。)这是我的菜单css:
.horizontalMenu {
background-color: white;
display: inline-block;
}
.horizontalMenu ul {
padding: 0;
margin: 0;
list-style: none;
position: relative;
text-align: left;
box-shadow: 0 6px 10px -1px #888888;
behavior: url(/css/pie/PIE.htc);
}
.horizontalMenu ul li {
display: inline-block;
background-color: white;
white-space: nowrap;
}
.horizontalMenu a {
display: block;
padding: 0 15px 0 15px;
color: black;
font-size: 16px;
line-height: 45px;
text-decoration: none;
cursor: pointer;
}
.horizontalMenu a:hover{
background-color: #B0B0B0;
}
.horizontalMenu a.active{
background-color: #6789AE;
}
/* Hide Dropdowns by Default */
.horizontalMenu ul ul {
display: none;
position: absolute;
top: 45px;
z-index: 1;
}
/* Display Dropdowns on Hover */
.horizontalMenu ul li:hover > ul {
display: block;
}
/* First Tier Dropdown */
.horizontalMenu ul ul li {
float: none;
display: list-item;
position: relative;
}
/* Sub-menu options should be compact */
.horizontalMenu ul ul a{
font-size: 14px;
line-height: 30px;
}
/* Second, Third and more Tiers */
.horizontalMenu ul ul ul{
position: absolute;
left: 100%;
top: 0;
}
我需要添加“锁定”功能,以便如果用户向下滚动到菜单所在的位置,则菜单将被锁定到屏幕顶部并随之出现。我通过添加“固定”类并使用JS代码动态应用它来实现此目的:
.horizontalMenu.fixed {
position:fixed;
top:0;
display:block;
right: 0;
left: 0;
margin-right: auto;
margin-left: auto;
width:710px;
}
JS代码:
$(function(){
var numScroll = 240; //number of pixels before modifying styles
$(window).bind('scroll', function () {
if ($(window).scrollTop() > numScroll) {
$('.horizontalMenu').addClass('fixed');
} else {
$('.horizontalMenu').removeClass('fixed');
}
});
});
这样做相对不错,除了我在不同浏览器中硬编码为710px的宽度似乎略有不同外,因此我似乎找不到适合所有浏览器的宽度。在页面顶部处于常规状态的菜单使用自动宽度居中(通过我未设置且未完全理解的包含div中的代码),并且在某些浏览器中向下滚动时会变宽。有什么方法可以将“固定的”类宽度设置为自动宽度,而不是将其硬编码为特定的像素宽度,从而使其在所有浏览器中都能工作?
我试图拼凑一个jsfiddle,但是在设置它来说明我的观点上并没有完全成功,但这是一个基本思想。
为了清楚起见进行更新:
例如,这种带有346px硬编码宽度的小提琴在Chrome中对我来说非常合适,但在FF和IE中则略有不同。
我确实想将宽度设置为auto,但是当我尝试将其扩展以占据屏幕的整个宽度时,可能是由于“ display:block”所致。我对CSS的了解不足,无法正确设置此设置。
好吧,我会说您需要重新考虑您的问题,因为这需要将您的元素视为table
,因此您可以利用display:table
和一些js计算来使您的元素居中:
以下代码段是原始的具有相同菜单项的代码段。
var numScroll = 20;
$(window).bind('scroll', function() {
if ($(window).scrollTop() > numScroll) {
$('.horizontalMenu').addClass('fixed').css('left', function(){
return ($(window).width()-$(this).width())/2
});
} else {
$('.horizontalMenu').removeClass('fixed').removeAttr('style');
}
});
.horizontalMenu {
background-color: white;
display: table;
margin: 0 auto;
}
.horizontalMenu ul {
padding: 0;
margin: 0;
list-style: none;
position: relative;
text-align: left;
box-shadow: 0 6px 10px -1px #888888;
behavior: url(/css/pie/PIE.htc);
}
.horizontalMenu ul li {
display: table-cell;
background-color: white;
white-space: nowrap;
}
.horizontalMenu a {
display: table-cell;
padding: 0 15px 0 15px;
color: black;
font-size: 16px;
line-height: 45px;
text-decoration: none;
cursor: pointer;
}
.horizontalMenu a:hover {
background-color: #B0B0B0;
}
.horizontalMenu a.active {
background-color: #6789AE;
}
/* Hide Dropdowns by Default */
.horizontalMenu ul ul {
display: none;
position: absolute;
top: 45px;
z-index: 1;
}
/* Display Dropdowns on Hover */
.horizontalMenu ul li:hover > ul {
display: table;
}
/* First Tier Dropdown */
.horizontalMenu ul ul li {
float: none;
display: list-item;
position: relative;
}
/* Sub-menu options should be compact */
.horizontalMenu ul ul a {
font-size: 14px;
line-height: 30px;
}
/* Second, Third and more Tiers */
.horizontalMenu ul ul ul {
position: absolute;
left: 100%;
top: 0;
}
/* If any menu options are added, the width needs to be adjusted */
.horizontalMenu.fixed {
position: fixed;
top: 0;
display: table;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<div class='horizontalMenu'>
<ul>
<li><a>Website Config ▾</a>
<ul>
<li><a>Include Files</a></li>
</ul>
</li>
<li><a>User Training ▾</a>
<ul>
<li><a>Upload new webinar ▸</a>
<ul>
<li><a>Training webinar</a></li>
<li><a>Some other webinar</a></li>
</ul>
</li>
<li><a>Upload new guide</a></li>
</ul>
</li>
<li><a>Data</a></li>
</ul>
</div>
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />END
在小提琴中,我们添加了更多菜单项,并且效果很好。
查看其他包含更多菜单项的代码段。
var numScroll = 20;
$(window).bind('scroll', function() {
if ($(window).scrollTop() > numScroll) {
$('.horizontalMenu').addClass('fixed').css('left', function(){
return ($(window).width()-$(this).width())/2
});
} else {
$('.horizontalMenu').removeClass('fixed').removeAttr('style');
}
});
.horizontalMenu {
background-color: white;
display: table;
margin: 0 auto;
}
.horizontalMenu ul {
padding: 0;
margin: 0;
list-style: none;
position: relative;
text-align: left;
box-shadow: 0 6px 10px -1px #888888;
behavior: url(/css/pie/PIE.htc);
}
.horizontalMenu ul li {
display: table-cell;
background-color: white;
white-space: nowrap;
}
.horizontalMenu a {
display: table-cell;
padding: 0 15px 0 15px;
color: black;
font-size: 16px;
line-height: 45px;
text-decoration: none;
cursor: pointer;
}
.horizontalMenu a:hover {
background-color: #B0B0B0;
}
.horizontalMenu a.active {
background-color: #6789AE;
}
/* Hide Dropdowns by Default */
.horizontalMenu ul ul {
display: none;
position: absolute;
top: 45px;
z-index: 1;
}
/* Display Dropdowns on Hover */
.horizontalMenu ul li:hover > ul {
display: table;
}
/* First Tier Dropdown */
.horizontalMenu ul ul li {
float: none;
display: list-item;
position: relative;
}
/* Sub-menu options should be compact */
.horizontalMenu ul ul a {
font-size: 14px;
line-height: 30px;
}
/* Second, Third and more Tiers */
.horizontalMenu ul ul ul {
position: absolute;
left: 100%;
top: 0;
}
/* If any menu options are added, the width needs to be adjusted */
.horizontalMenu.fixed {
position: fixed;
top: 0;
display: table;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<div class='horizontalMenu'>
<ul>
<li><a>Website Config ▾</a>
<ul>
<li><a>Include Files</a></li>
</ul>
</li>
<li><a>User Training ▾</a>
<ul>
<li><a>Upload new webinar ▸</a>
<ul>
<li><a>Training webinar</a></li>
<li><a>Some other webinar</a></li>
</ul>
</li>
<li><a>Upload new guide</a></li>
</ul>
</li>
<li><a>Data</a></li>
<li><a>Data2</a></li>
<li><a>Data3</a></li>
</ul>
</div>
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />END
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句