Digg 的设计充满了巧妙的创意。 网站标识清晰醒目,但不会占用太多宝贵的垂直空间。 使用简单的下拉菜单压缩导航。 订阅、搜索和帐户信息等重要内容都位于您期望的位置的顶部。 它是流体宽度,但不会缩小太多或增长太大。
让我们设计 Digg 头部!
1. 页面包裹(智能流体宽度)
我们知道,如果页面允许增长过大或缩小过小,流体宽度 可能会带来负面影响。 我们可以通过设置最小和最大宽度来防止这种情况,然后对不支持最大/最小宽度的浏览器(IE)使用“表达式”。
#page-wrap {
min-width: 960px; max-width: 1260px;
margin: 0 auto; padding: 0 10px;
width:expression(document.body.clientWidth < 961? "960px" : document.body.clientWidth > 1261? "1260px" : "auto");
}
2. 右上角个人资料信息
徽标图像默认情况下将左对齐,但我们需要将所有这些内容浮动到右侧。
#right-side {
float: right;
padding-top: 15px;
}
#right-side img {
border: 1px solid white;
vertical-align: middle;
}
请注意右侧内容中 img 标签的代码。 我们为用户图标添加了一点白色边框,并将其垂直对齐设置为“中间”。 这使得右侧的文本保持良好居中,而无需使用表格或顶部填充(两者都不理想)。
3. 右上角搜索区域
form#main-search {
display: inline;
position: relative;
padding-right: 10px;
}
form#main-search label {
display: none;
}
#search-button {
position: absolute;
right: 0px;
top: -6px;
}
我们需要将表单区域设置为内联元素,以使其不会像块级元素那样换行。 在所有输入表单中包含标签元素是一种良好的做法,但由于设计不需要实际的文本标签,我们可以使用 display: none; 将其隐藏。 使用一点绝对定位,我们可以将放大镜按钮图像放置在搜索表单的右侧。
4. 滑动门悬停效果
为了使菜单区域尽可能地可扩展,它需要是常规的网页文本。 但是我们想要的漂亮的悬停效果需要图像。 由于网页文本可以增长,但图像不能,我们需要通过使用称为滑动门技术的技巧来弥补这一点。
这是一种相当常见的技术,但这种情况下的独特之处在于,此滑动门的两侧都需要应用为悬停状态。 我们需要像这样分别应用这些背景图像
#zone-bar ul li:hover {
background: url(images/zonebar-navleft.png) center left no-repeat;
}
#zone-bar ul li a:hover {
background: url(images/zonebar-navright.png) center right no-repeat;
}
由于某些浏览器(再次是 IE)不支持页面元素(锚链接除外)上的悬停伪类,因此“navright”图形是较短的一个,这本身应该看起来不错。
5. 下拉菜单(又名 jQuery 初学者之夜)
这是单个菜单项的代码示例
<li>
<a href="#"><span>
Science
<em class="opener-science">
<img src="images/zonebar-downarrow.png" alt="dropdown" />
</em>
</span></a>
<ul class="sciencesublist">
<li><a href="#">Enviornment</a></li>
<li><a href="#">General Sciences</a></li>
<li><a href="#">Space</a></li>
</ul>
</li>
底部的无序列表是下拉部分。 我们将使用一些绝对定位将其推到条形下方,然后使用 display: none; 默认隐藏它。
#zone-bar ul li ul {
display: none;
position: absolute;
top: 29px;
left: 0px;
width: 150px;
border: 1px solid #ccc;
background: white;
padding: 10px 0 0 0;
}
这里需要注意两点。 使用绝对定位时,某些浏览器确实希望看到垂直值(顶部或底部)和水平值(左侧或右侧)。 即使默认值应该是 left: 0,但将其放在那里也是一个好主意。 确保为该菜单设置背景颜色,以便当它覆盖内容时,您不会看到菜单后面的内容。
特别需要注意的是标记中的 em 标签。 这是我用来使用 jQuery 定位以打开菜单的额外钩子。
$(document).ready(function(){
$(".opener-technology").click(function(){
$(".technologysublist").toggle();
});
});
jQuery 中的“toggle”函数自动在 display: none; 和 display: block; 之间切换。 这可以解决问题,但这是一种非常业余的处理方式。 事后看来,我可能应该只将一个类应用于箭头本身的图像并使用它。 我知道也有更智能的方法来处理这个问题。 我所采用的笨方法需要为每个打开箭头和子菜单使用一个唯一的类。 我只是在学习,所以不要对我太苛刻 =)
已知问题
- 当您打开下拉菜单时,Opera 会折叠主菜单列表项的大小。 我的 jQuery 有问题吗?
- 菜单保持打开状态直到关闭。 如果菜单在打开另一个菜单时关闭会很好。 也许向上滑动并淡出?
您的脚本还有一个问题。 我正在使用 FF3 beta 5,但这与浏览器无关。 每个菜单都保持打开状态,直到您手动关闭它。 有一种方法可以解决此问题,它涉及一个“!”,但我记不太清了。
我以前从未听说过 :expression。
它的支持程度如何?
@Tyler:是的,我将其列为已知问题。 当我对 jQuery 了解更多时,我将修复该菜单以使其工作得更好。
@David:它是微软独有的。 而且它在那里也有一些错误(因此代码中存在 1 像素的偏移)。 它只是为了使 IE 6 中的最大/最小宽度工作。
IE 6 在处理头部方面遇到了很多麻烦。 而且由于某种原因,它似乎以 1260 的固定宽度显示。此外,此页面在代码示例中的 IE6 中也存在问题。
不错的用户图标 Chris ;)
哈哈!那是你!
我喜欢这个——尤其是使文本垂直对齐,但是菜单只能在再次点击时关闭的问题有点令人担忧……
如何让它在鼠标悬停时关闭? 我发现这比这种方式错误更少。
嗨,
不错。 这是修复保持打开错误和更小的 js 代码的方法。
$(document).ready(function(){
$(‘#zone-bar li em’).click(function() {
$(‘#zone-bar>ul>li>ul’).hide();
$(this).parents(‘li’).children(‘ul’).show();
});
});
此致
c)hristian
嗨,
不错的教程,但我的 IE6 显示效果不太好! FF 还可以;)
Tobi
这几乎是我想要的。 我正在尝试以 Digg 登录按钮的工作方式来做一些事情,以重新设计我的乐队网站(您可以在 此处查看其早期阶段)。 我相信如果我投入时间和精力,我可以解决它,但目前我没有时间。
感谢 Dean Edwards 和他的 IE6 .js,这个头部在 IE6 中没问题了
我正在尝试以Digg登录按钮的样式做一些事情,这对我的网站很有帮助……祝您有愉快的一天。
尝试不错,但在FF3.01和IE7上无法正常工作。对齐方式不正确,还有其他几个问题,看起来很粗糙。
IE 6崩溃了。为什么崩溃,我不知道。Firefox 2和3以及Opera 9都正常。
看到最新版Firefox 3中的菜单了吗?链接背景贯穿其中……