我想创建一个看起来像的菜单:
首页| FOO | BAR |关于| CONTACT
我该怎么做呢?
以下是我的尝试:
<lift:Menu.builder ul:class="menu" li_item:class="current" />
和
ul.menu li {
display: inline;
list-style-type: none;
text-transform: uppercase;
border-right: 1px solid white;
padding-right: 5px;
}
li.current span {
background: white;
color: black;
padding: 5px 5px 3px 5px;
font-size: 11px;
}
li.current a, a:visited, a:link {
color: white;
padding: 5px 5px 3px 5px;
font-size: 11px;
}
这很接近,但看起来不太合适。最后你最后会得到一条额外的线。我希望这些线条与文字的高度相同。
http://lh5.ggpht.com/_5DxlOp9F12k/S2aFQHfupzI/AAAAAAAAJiY/Ds0IpEyu78I/s800/menu.png
答案 0 :(得分:4)
可能有更简洁的方法来做到这一点。在您的站点地图中声明网址后,您几乎可以将它们用作模板中的常规链接。你会把它们写成纯HTML。
在Boot.scala中:
val menus = List(
Menu(Loc("home", List("index"), "Home")),
Menu(Loc("foo", List("foo"), "Foo")),
Menu(Loc("bar", List("bar"), "Bar")),
Menu(Loc("about", List("about"), "About")),
Menu(Loc("contact", List("contact"), "Contact"))
)
LiftRules.setSiteMap(SiteMap(menus: _*))
在您的模板中,例如的index.html:
<div id="menu">
<a href="/index">Home</a> |
<a href="/foo">Foo</a> |
<a href="/bar">Bar</a> |
<a href="/about">About</a> |
<a href="/contact">Contact</a>
</div>
或者如Debilski所说,您也可以按名称调用每个菜单项。这将更像是Lift-iesc。
<div id="menu">
<lift:Menu.item name="home"/>
<lift:Menu.item name="foo"/>
<lift:Menu.item name="bar"/>
<lift:Menu.item name="about"/>
<lift:Menu.item name="contact"/>
</div>
然后,您可以在外部样式表文件或页面内添加所需的任何样式。
答案 1 :(得分:3)
要删除最后一行,可以使用:last-child伪类:
ul.menu li:last-child { border: none; }
答案 2 :(得分:1)
您可能希望尝试使<li>
元素具有inline-block display
。
ul.menu li {
display: inline-block;
*display: inline; zoom: 1; /* inline-block under IE */
vertical-align: middle;
}
这样,它们的行为就像块元素一样,可能会与链接同步。此外,您可以尝试使用line-height
属性而不是添加垂直填充,因为行高会使文本以更精确的方式垂直居中。
答案 3 :(得分:1)
找到其他答案后,我发现了自己的解决方案......
(请注意,我是Lift的新手并且认为菜单太难以手动编码)
<强>解决方案强>
完整解决方案可在以下位置获得: http://subversion.assembla.com/svn/freshcode_public/learn_scala/lift/src/main/scala/code/snippet/CustomMenu.scala
package code.snippet import net.liftweb.widgets.menu.MenuWidget import xml.{Text, NodeSeq} object CustomMenu { private def styleElem = { <style type="text/css"> {Text( ".float-center-item {\n" + " left: 50%;\n" + " position: relative;\n" + "}\n\n" + ".float-center-wrapper {\n" + " float: right;\n" + " position: relative;\n" + " left: -50%;\n" + "}\n\n" + ".float-clear {\n" + " clear:both;\n" + "}\n" + "/* Margin fix for FireFox */\n" + "ul.sf-menu {\n" + " margin-bottom: 0\n" + "}\n" )} </style> } def render(in: NodeSeq) = { // Need to get MenuWidget to provide the plumbing // We render menu ourselves because MenuWidget doesn't seem to do it properly. MenuWidget(List("No Group")) ++ <head> {styleElem} </head> ++ <div class="float-center-wrapper"> <lift:Menu.builder top:class="sf-menu float-center-item" linkToSelf="true" expandAll="true"/> </div> ++ // This div terminates the floating effects properly. <div class="float-clear"></div> } }
用法:
<div class="lift:CustomMenu">nothing</div>