【问题标题】:CSS Drop down menu - moving everything on the page when activatedCSS 下拉菜单 - 激活时移动页面上的所有内容
【发布时间】:2013-01-24 06:15:51
【问题描述】:

我有一个在网站上使用多年的导航栏。它工作得很好。现在,我正在尝试在其中一个由 CSS 驱动的导航项上添加下拉效果。

这个想法是,当您将鼠标悬停在下面的“下拉菜单”链接上时,您将获得一个附加菜单选项的垂直列表。

问题是,当我将鼠标悬停在下方的“下拉菜单”链接上时,生成的弹出框会抛出其下方的所有内容。其下方 div 容器中的文本行被换行,横幅广告被向下移动,页面基本上失去了它的形式。

有没有办法让下拉 CSS 框覆盖现有页面并且不移动其下方的所有元素?

我的导航行如下所示:

<ul id="navlist">
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>        
    <li><a href="">Services</a></li>        
    <li style="float:right"><a href="#">Pull Down Menu</a>
            <ul>
            <li><a href="">Option 1</a></li><br>
            <li><a href="">Option 2</a></li><br>
            <li><a href="">Option 3</a></li><br>
            </ul>
    </li>
</ul>
</div>
//below this I have some other stuff
<div align="center">Here is a line of text about 800 pixles wide</div>
<div align="center">A BANNNER AD GOES HERE</div>
<div align="center">THE BODY OF THE PAGE GOES HERE</div>

然后我的 CSS 看起来像这样:

ul#navlist    {
width: 980px; line-height: 2em;
list-style-type: none;
clear: both;}

ul#navlist li { display: inline; }
ul#navlist li a {float: center;}
ul#navlist li a:hover {color: #fff;}

ul#navlist ul {display: none;}
ul#navlist li:hover > ul {display: block;}

【问题讨论】:

    标签: php html css


    【解决方案1】:

    虽然 CSS 没问题,但最好是重构它。如果您提供了包含问题的页面的屏幕截图,那就更好了。好的,我有一个解决方案。检查下面的代码,尝试用这种方式重构 CSS 和 HTML,虽然 HTML 是一样的。

    HTML

    <ul class="nav">
        <li>
            <a href="#">Menu 1</a>
            <ul>
                <li><a href="#">Sub Menu Item</a></li>
                <li><a href="#">Sub Menu Item</a></li>
                <li><a href="#">Sub Menu Item</a></li>
            </ul>
        </li>
        <li>
            <a href="#">Menu 2</a>
            <ul>
                <li><a href="#">Sub Menu Item</a></li>
                <li><a href="#">Sub Menu Item</a></li>
                <li><a href="#">Sub Menu Item</a></li>
            </ul>
        </li>
        <li>
            <a href="#">Menu 3</a>
            <ul>
                <li><a href="#">Sub Menu Item</a></li>
                <li><a href="#">Sub Menu Item</a></li>
                <li><a href="#">Sub Menu Item</a></li>
            </ul>
        </li>
    </ul>
    

    CSS

    * {font-family: "Segoe UI", Tahoma;}
    ul.nav {border-bottom: 1px solid #999;}
    ul.nav li a {display: block; text-decoration: none; color: #333; padding: 5px; border: 1px solid #fff;}
    ul.nav > li:hover {border: 1px solid #666; border-bottom: 1px solid #fff;}
    ul.nav li a:hover {background: #ccc; border: 1px solid #999;}
    ul.nav > li {display: inline-block; position: relative; border: 1px solid #fff;}
    ul.nav > li ul {display: none; position: absolute; left: -1px; width: 150px; border: 1px solid #666; border-top-color: #fff; margin-top: 1px;}
    ul.nav > li:hover ul {display: block;}
    ul.nav > li ul li {display: block;} /* Vertical Menu */
    ul.nav > li ul li {display: inline-block;} /* Horizontal Menu */
    

    小提琴:
    http://jsfiddle.net/vMuxA/(垂直菜单)
    http://jsfiddle.net/vMuxA/1/(水平菜单)

    【讨论】:

      【解决方案2】:

      如果您希望在添加其他内容时页面不向下移动,您需要使用position: absolute。由于这里没有确切的例子,我无法给出一个确切的例子来说明我的意思。

      相反,这里有一些解释 CSS 定位的资源:

      http://css-tricks.com/absolute-positioning-inside-relative-positioning/ http://www.impressivewebs.com/absolute-position-css/

      只是一个简短的免责声明 - 绝对定位可能是您最好的朋友和最大的敌人。确保您进行跨浏览器测试并了解您要完成的任务。

      只要您的项目是绝对定位的并且给定了topleft 值,它们就不会影响页面流。

      【讨论】:

      • 最好避免使用绝对位置,尤其是在这种情况下。
      猜你喜欢
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 2017-02-04
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      相关资源
      最近更新 更多