【问题标题】:Top navbar moves when clicking on a specific menu item单击特定菜单项时顶部导航栏移动
【发布时间】:2018-03-01 23:39:41
【问题描述】:

这是我开发的应用程序: http://azeribocorp.pythonanywhere.com/index/

当我点击菜单中的Search 时,导航栏向下移动,我找不到问题所在。我希望菜单始终固定在页面顶部。任何帮助表示赞赏。

__base.html:

    {% load staticfiles %}

    <!DOCTYPE html>

    <html lang="en" class="no-js">
        <head>
            {% block meta_tags %}{% endblock meta_tags%}

            <title>
                {% block title %}Azeribo Tracking{% endblock title %} 
            </title>

            {% block stylesheets %}         {% endblock %}      
            {% block javascript %}          {% endblock javascript %}       
            {% block extra_head %}          {% endblock %}
        </head>

        <body>
            <header class="topnavbar">
                {% include 'aztracker/_topnavbar.html' %}
            </header>

            <div id="main" role="main">
                <div class="container">
                    {% block content %}
                    {% endblock content %}
                </div>
            </div> {# /#main #}
            <script type='text/javascript' src="{% static 'js/_topnavbar.js' %}"></script>
        </body>
    </html>

_topnavbar.html

{% load static %}
{% load staticfiles %}


<head>
    <link rel="stylesheet" type="text/css" href="{% static 'css/_topnavbar.css' %}">
    <link rel="script" type="text/css" href="{% static 'css/_topnavbar.js' %}">
</head>

<!--Top Navigation-->
<nav role="navigation" class="nav">
    <ul class="nav-items">
        <li class="nav-item">
            <a href="/index/" class="nav-link"><span>Home</span></a>
        </li> 
        <li class="nav-item ">
            <a href="#" class="nav-link"><span>Track Container</span></a>
            <nav class="submenu">
                <ul class="submenu-items">
                    <li class="submenu-item"><a href="#" class="submenu-link">Product #1</a></li>
                    <li class="submenu-item"><a href="#" class="submenu-link">Product #2</a></li>
                    <li class="submenu-item"><a href="#" class="submenu-link">Product #3</a></li>
                </ul>
            </nav>
        </li> 
        <li class="nav-item">
            <a href="/search/" class="nav-link"><span>Search</span></a>
        </li>
        <li class="nav-item">
            <a href="#" class="nav-link"><span>Report</span></a>
        </li> 
        <li class="nav-item dropdown">
            <a href="#" class="nav-link"><span>More</span></a>
            <nav class="submenu">
                <ul class="submenu-items">
                    <li class="submenu-item"><a href="#" class="submenu-link">About</a></li>
                    <li class="submenu-item"><a href="#" class="submenu-link">Contact</a></li>
                    <li class="submenu-item"><hr class="submenu-seperator" /></li>
                    <li class="submenu-item"><a href="#" class="submenu-link">Support</a></li>
                    <li class="submenu-item"><a href="#" class="submenu-link">FAQs</a></li>
                </ul>
            </nav>
        </li>  
    </ul>
</nav>

search_form.html

{% extends 'aztracker/__base.html' %}
{% load staticfiles %}
{% load static %}


{% block stylesheets %}                 
    <link rel="stylesheet" type="text/css" href="{% static 'css/search_form.css' %}">
{% endblock %}

{% block content %}
    {% block main_col %}
        <body>
            <section class="search_section">
                <form  method="POST" action="/search/">         
                    {% csrf_token %}
                    <input type="text" placeholder="What are you looking for?" name="search_input_field" id="search_input">             
                    <button id="search_btn">Search</button>
                </form>
            </section>
        </body>         
    {% endblock main_col %} 
{% endblock content %}

_topnavbar.css

* {border:1px black solid;}
.topnavbar {
    background-color: rgba(0,100,150,0.6);/*rgba(0,255,150,0.6);/*#3EDC99*/
}

html {
    box-sizing: border-box;
}

*, 
*:before, 
*:after {
    box-sizing: inherit;
}

body {
    background-color: #3498db; 
}

.nav {
    width: 550px;
    margin: 0 auto 0 auto;
    text-align: center;
}

/* Navigation */

.nav {
    font-family: Verdana, Georgia, Arial, sans-serif;
    font-size: 14px;
}

.nav-items {
    padding: 0;
    list-style: none;
}

/* color of menu links
span    {

    color:yellow;
}
*/

.nav-item {
    display: inline-block;
    margin-right: 25px;
}

.nav-item:last-child {
    margin-right: 0;
}

.nav-link,
.nav-link:link, 
.nav-link:visited, 
.nav-link:active,
.submenu-link,
.submenu-link:link, 
.submenu-link:visited, 
.submenu-link:active {
    display: block;
    position: relative;
    font-size: 14px;
    letter-spacing: 1px;
    cursor: pointer;
    text-decoration: none;
    outline: none;
    color:#fff;
}

.nav-link ,
.nav-link:link, 
.nav-link:visited, 
.nav-link:active {
    color: #fff;
    font-weight: bold;
}

.nav-link::before {
    content: "";
    position: absolute;
    top: 100%;
    left: 0;
    width: 100%;
    height: 3px;
    background: rgba(0,0,0,0.2);
    opacity: 0;
    -webkit-transform: translate(0, 10px);
    transform: translate(0, 10px);
    transition: opacity 0.3s ease, transform 0.3s ease;
}

.nav-link:hover::before,
.nav-link:hover::before {
    opacity: 1;
    -webkit-transform: translate(0, 5px);
    transform: translate(0, 5px);
}

.dropdown {
    position: relative;
}

.dropdown .nav-link {
    padding-right: 15px;
    height: 17px;
    line-height: 17px;
}

.dropdown .nav-link::after {
    content: "";
    position:absolute;
    top: 6px;
    right: 0;
    border: 5px solid transparent;
    border-top-color: #fff; /*small triangle showing drop down menu*/
}

.submenu {
    position: absolute;
    top: 100%;
    left: 50%;
    z-index: 100;
    width: 200px;
    margin-left: -100px;
    background: #fff;
    border-radius: 3px;
    line-height: 1.46667;
    margin-top: -5px;
    box-shadow: 0 0 8px rgba(0,0,0,.3);
    opacity:0;
    -webkit-transform: translate(0, 0) scale(.85);
    transform: translate(0, 0)scale(.85);
    transition: transform 0.1s ease-out, opacity 0.1s ease-out;
    pointer-events: none;
}

.submenu::after, 
.submenu::before {
    content: ""; 
    position: absolute;
    bottom: 100%;
    left: 50%;
    margin-left: -10px;
    border: 10px solid transparent;
    height: 0;
}

.submenu::after {
    border-bottom-color: #fff;
}

.submenu::before {
    margin-left: -13px;
    border: 13px solid transparent;
    border-bottom-color: rgba(0,0,0,.1);
    -webkit-filter:blur(1px);
    filter:blur(1px);
}

.submenu-items {
    list-style: none;
    padding: 10px 0;
}

.submenu-item {
    display: block;
    text-align: left;
}

.submenu-link,
.submenu-link:link, 
.submenu-link:visited, 
.submenu-link:active {
    color: #3498db;
    padding: 10px 20px;
}

.submenu-link:hover {
    text-decoration: underline;
}

.submenu-seperator {
    height: 0;
    margin: 12px 10px;
    border-top: 1px solid #eee;
}

.show-submenu .submenu {
    opacity: 1;
    -webkit-transform: translate(0, 25px) scale(1);
    transform: translate(0, 25px) scale(1);
    pointer-events: auto;
}

.submenu-link{
    color:red;
}

search_form.css

* {border:1px black solid;}

【问题讨论】:

  • 为什么在内容块中使用 main_col 块?为什么在模板中使用“body”标签? (你已经把它放在 __base.html 上)

标签: html css django django-templates


【解决方案1】:

您在某些时候破坏了您的 HTML,我可以看到您的模板构建中存在一些问题。

第一:

你在你的 body 标签 (_topnavbar.html) 中包含了一个 head 标签

<head>
    <link rel="stylesheet" type="text/css" href="{% static 'css/_topnavbar.css' %}">
    <link rel="script" type="text/css" href="{% static 'css/_topnavbar.js' %}">
</head>

这应该在“extra_head”块内,像这样(_topnavbar.html):

{% block extra_head %}
        <link rel="stylesheet" type="text/css" href="{% static 'css/_topnavbar.css' %}">
        <link rel="script" type="text/css" href="{% static 'css/_topnavbar.js' %}">
{% endblock %}

第二: 你在你的body标签(search_form.html)中添加了一个额外的body标签:

{% block content %}
    {% block main_col %}
        <body>
            <section class="search_section">
                <form  method="POST" action="/search/">         
                    {% csrf_token %}
                    <input type="text" placeholder="What are you looking for?" name="search_input_field" id="search_input">             
                    <button id="search_btn">Search</button>
                </form>
            </section>
        </body>         
    {% endblock main_col %} 
{% endblock content %}

你必须删除那个body标签。

第三

您以错误的方式添加脚本 (_topnavbar.html):

<link rel="script" type="text/css" href="{% static 'css/_topnavbar.js' %}">

你可以这样添加:

<script src="{% static 'css/_topnavbar.js' %}" charset="utf-8"></script>

也许你有更多错误,你应该逐行检查你的代码并找出所有其他问题。

我希望这个答案对你有用,祝你有美好的一天。

【讨论】:

  • 非常感谢您查看并指出错误。我进行了所有更改,但是当我检查呈现的页面时,第三个更改显示错误。这是错误127.0.0.1/:26 GET http://127.0.0.1:8000/static/css/_topnavbar.js net::ERR_ABORTED js 文件有效,但是为什么 chrome 显示这个错误我不知道!
  • 没关系,我找到了。地址中的css必须是js。 js文件在js文件夹中,而不是css
  • 很高兴我的回答对您有所帮助,如果解决了您的问题,您可以设置为正确答案,祝您有美好的一天。
  • 我支持你,应该给你 10 分。事实上,另一个人给出的答案解决了我的问题,但你的意见也有很大帮助,我不知道我还能如何回报你。如果您有任何建议,请告诉我。
  • 没关系,我不知道另一个答案是正确的。
【解决方案2】:

您的 html 中似乎有一个 rouge Unicode 字符。 单击“搜索”后检查页面源会显示 Unicode 字符为 。这个字符是“零宽度无间断空间”。

它不会在您的文本编辑器中看到,因为它会解析字符。 您可以尝试在记事本或某些不理解 Unicode 的文本编辑器中打开您的代码,然后尝试将其从那里删除。

还值得指出的是,您的内容显示在您的标签中

从 RHSeeger 的回答 here 中了解角色

希望这会有所帮助!

【讨论】:

  • 我只是使用 Notepad++ Encoding&gt;Encode in UTF-8 将其编码为 UTF-8 并保存文件,这样隐藏字符就会消失。
【解决方案3】:

在所有子页面(包括搜索)上,尝试将其添加到您的 CSS:

body {
margin: auto;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2014-11-08
    相关资源
    最近更新 更多