【问题标题】:Navbar and unordered list导航栏和无序列表
【发布时间】:2014-02-16 16:37:53
【问题描述】:

我有一个带有子列表的导航栏。我将此导航栏用作网页顶部的 CSS 导航栏,其中包含主页面的链接和子列表中页面的下拉列表。我想使用相同的结构在我的页面侧面为子列表创建一个导航栏。

我所有的 HTML 页面在创建导航栏的 <BODY> 顶部附近都有以下行:

<?php include('navbar.php'); ?>

此导航栏的 CSS 样式在其他地方处理。

假设我的navbar.php 文件有以下内容:

<nav id="mainnavbar>
    <ul id="index">
        <li><a href="index.html">Home</a></li>
        <li><a href="personal.html">Personal</a>
                <ul id="personal">
                        <li><a href="aboutme.html">About Me</a></li>
                        <li><a href="contact.html">Contact Info</a></li>
                </ul>
        </li>
        <li><a href="professional.html">Professional</a>
                <ul id="professional">
                        <li><a href="activities.html">Activities</a></li>
                        <li><a href="resume.html">Resume</a></li>
                </ul>
        </li>
    </ul>
</nav>

我页面顶部的水平导航栏将列出“主页|个人|专业”,并且“个人”和“专业”会有下拉菜单。这个导航栏很容易包含在所有页面上,以获得统一的体验。不是太难。

但是,如果用户实际上导航到主(或“父”)页面之一(例如“主页”、“个人”或“专业”),我希望有第二个,垂直 该页面一侧的导航栏带有指向该页面“子”的链接。

例如,如果用户进入“个人”页面,应该有一个带有“关于我”和“联系信息”链接的侧导航栏。相反,如果用户导航到“专业”,则该侧边栏应该显示指向“活动”和“恢复”的链接。如果用户决定返回“主页”页面,侧边栏应显示“个人”和“专业”。 (虽然如果它也显示“主页”会 100% 没问题——也许那样会更容易?)

虽然我可以为每个页面硬编码一个新的&lt;nav&gt;,但我已经有一个无序列表结构并且想使用它。有什么想法可以做到这一点,或者是否有更好的方法?


也许我想动态生成(通过 PHP 的魔力)&lt;nav&gt; 的第二个实例,它是上面列出的&lt;nav id="mainnavbar"&gt; 的一种部分副本,但包括一个嵌套的无序列表,而不是一切。然后我可以分别定位和风格化每个导航栏。

(请注意,只有主页、个人和专业页面应该有侧边栏导航菜单,因为只有它们有“子”页面。“子”页面不应该有子菜单。)

本质上,我应该有以下几点:

对于index.html,我应该有以下基于navbar.php动态生成的:

<nav id="subnavbar">
    <ul id="index">
        <li><a href="index.html">Home</a></li>
        <li><a href="personal.html">Personal</a> </li
        <li><a href="professional.html">Professional</a></li>
    </ul>
</nav>

对于personal.html,我应该有以下基于navbar.php动态生成的:

<nav id="subnavbar">
    <ul id="professional">
        <li><a href="activities.html">Activities</a></li>
        <li><a href="resume.html">Resume</a></li>
    </ul>
</nav>

对于professional.html,我应该有以下基于navbar.php动态生成的:

<nav id="subnavbar">
    <ul id="professional">
        <li><a href="activities.html">Activities</a></li>
        <li><a href="resume.html">Resume</a></li>
    </ul>
</nav>

对于所有其他页面,不应有侧边栏导航。 (或者也许我应该有一些默认导航栏作为占位符??)

但是,我不确定在两个不同的 &lt;nav&gt; 部分中为无序列表设置相同的 id 是否会有问题。

再次感谢您的帮助!

【问题讨论】:

    标签: php css navigation html-lists navbar


    【解决方案1】:

    您可以使用 PHP 来确定您所在的页面,并为不同的页面打印出不同的 HTML。我把你所要求的最简单的版本放在一起。使用相同的原则对此进行扩展。您可以使用$_SERVER 超全局查找当前 URL。

    <?php
    // See if current URL ends with "personal.html"
    $personal = preg_match('/personal\.html$/',$_SERVER['REQUEST_URI']);
    ?>
    
    
    <nav>
        <ul>
            <li><a href="index.html">Home</a></li>
            <li><a href="personal.html">Personal</a>
                    <?php if (!$personal) print '<ul>'; ?>
                            <li><a href="aboutme.html">About Me</a></li>
                            <li><a href="contact.html">Contact Info</a></li>
                    <?php if (!$personal) print '</ul>'; ?>
            </li>
            <li><a href="professional.html">Professional</a>
                    <ul>
                            <li><a href="activities.html">Activities</a></li>
                            <li><a href="resume.html">Resume</a></li>
                    </ul>
            </li>
        </ul>
    </nav>
    

    我在这里所做的只是删除个人页面的&lt;ul&gt; 标签,这将使两个嵌套的&lt;li&gt; 与其余导航栏元素内联。您需要对此进行扩展以适应您需要的设计。

    【讨论】:

    • 我会为专业页面做同样的事情吗?这似乎包括“关于我”和“联系信息”到主要的无序列表,除非它在个人页面上。我正在寻找更多的是导航结构中子项的第二个导航栏。
    • 您可以对其他页面使用相同的总体思路。您可以设置另一个 if 语句来执行其他操作,而不是删除 &lt;ul&gt;。基本上想出您希望标题在每个页面上的外观,然后使用 PHP 动态更改 HTML 布局以适合您的设计。
    • 再次感谢! (这对我的一般 PHP 知识很有帮助....)我今晚要试一试,看看我是否不能让它工作。
    • 不幸的是,我无法得到它。我确实决定,如果我可以动态创建第二个&lt;nav id="subnavbar"&gt;,并使用主导航栏中的&lt;ul&gt;s 之一填充它,那将是可行的,它可以让我分别对每个导航栏进行样式化。 (见主帖)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多