親のヒスイのテンプレートにナビゲーションバーがあり、現在表示されているアイテムを強調表示したい。だから私がブログページにいるなら、
ul
li Home
li.active Blog
li Contact Us
li About
ナビゲーションバーの構造を各子テンプレートにコピーせずに、親テンプレートが拡張するページを確認し、それに応じてactive
クラスを適用する方法はありますか?
parent.jade
doctype 5
html
block link
-var selected = 'home'; //default
-var menu = { 'home': '/home', 'blog': '/blog', 'contact': '/contact' };
body
nav
ul
each val, key in menu
li
if selected === key
a.selected(href=val, title=key)= key
else
a(href=val, title=key)= key
child.jade
extends parent
block link
-var selected = 'blog';
ここに簡単な方法があります:
これをlayout.jadeで使用します(ここでnav
はアクティブなページの名前です。たとえば、nav = 'about')
ul(class="#{nav}")
li.home Home
li.blog Blog
li.contact Contact Us
li.about About
次に、これがあなたのCSSです:
ul.home li.home,
ul.blog li.blog,
ul.contact li.contact,
ul.about li.about {
color: red;
}
適用される唯一のcssルールは、ul
クラスが存在するものです。使用しているページに応じて、「about」、「home」、「contact」、または「blog」に等しい変数nav
を渡す必要があります。
現在のオブジェクト を三項式で使用します。すべてはドキュメントにあります。
オブジェクトのプロパティを使用して、アクティブメニューを生成できます。ナビゲーションメニューでフォルダを使用する場合(Jadeバージョン):
ul(class="nav-menu")
li: a(class="#{ current.path[0] === 'index' ? 'active' : '' }", href="/") home
li: a(class="#{ current.path[0] === 'about' ? 'active' : '' }", href="/about/") about
さて、上記の解決策は非常に明確ですが、誰かがメニューのより多くのコントロールを探している場合は、node.jsで使用可能なモジュールがあります。これを使用すると、メニューを完全に制御できます。
ユースケース:ロールに基づいてメニューが表示される場合