如何在 CSS 中制作具有变化高度的固定顶部菜单栏?

Posted

技术标签:

【中文标题】如何在 CSS 中制作具有变化高度的固定顶部菜单栏?【英文标题】:How can I make a fixed top menubar with a changing height in CSS? 【发布时间】:2014-07-01 14:03:54 【问题描述】:

我想在我的网站顶部有一个固定的菜单栏。 (当我们滚动时它不会移动)。我的问题是这个菜单栏可以有一个可变的高度(一个或两个(或更多)级别,具体取决于项目的数量/屏幕大小)

因为顶部菜单是固定的,之后我必须为我的“真实”内容添加一个边距顶部(否则它将开始隐藏在菜单下),但由于菜单高度是可变的,我无法设置上边距。

那么,是否可以“强制”内容不在我的菜单栏下方/上方?我怎么能这样做? (我不想用javascript来做这个定位之王)

这是我用来测试解决方案的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="language" content="en" />

    <style>
        body
        
            margin: 0;
            padding: 0;
            color: #575757;
            font: normal 10pt Arial,Helvetica,sans-serif;
            background: #cdcdcd;
        

        #page
        
            margin-top: 0px;
            margin-bottom: 5px;
            width:100%;
            max-width:1500px;
            margin-left:auto;
            margin-right:auto;
        

        #mainmenu
        
            background:#b90014 repeat-x left top;
            position:fixed;
            /*height:28px;*/
            width:100%;
            z-index:100;
            left:0;
            background-image:linear-gradient(#b90014, #d00018);
        

        #mainmenu p#lastUpdate
        
            float:right;
            color:#ffffff;
            margin-top:5px;
            margin-right:10px;
            margin-bottom:0px;
            margin-left:5px;
        

        #mainmenu ul
        
            padding:6px 20px 5px 20px;
            margin:0px;
        

        #mainmenu ul li
        
            display: inline;
        

        #mainmenu ul li a
        
            color:#ffffff;
            background-color:transparent;
            font-size:12px;
            font-weight:bold;
            text-decoration:none;
            padding:8px 8px 4px;
        

        #mainmenu ul li a:hover, #mainmenu ul li.active a
        
            color: #d00018;
            background-color:#FFFFFF;
            text-decoration:none;
        
    </style>

</head>

<body>

<div id="page">

    <div id="mainmenu">
        <p id="lastUpdate">Last Update : this date</p><ul id="yw0">
            <li><a href="/index.php?r=index">Accueil</a></li>
            <li><a href="/index.php?r=reports">Rapports</a></li>
            <li><a href="/index.php?r=nestedReport">Rapports personnalisés</a></li>
            <li class="active"><a href="/index.php?r=quickReport">Rapports instantannés</a></li>
        </ul>

    </div><!-- mainmenu -->

    <div id="content">
        <div id="contentbox">
            HELLO WORLD
        </div>
    </div><!-- content -->

</div><!-- page -->

</body>
</html>

谢谢!

【问题讨论】:

【参考方案1】:

我认为您正在寻找的是媒体查询:

https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries

您可以根据屏幕大小应用 CSS 样式。

【讨论】:

如果避免使用 JS,这可能是要走的路,但请记住,您需要有很多语句,并且需要选择一些关键高度点重置。 id 建议我们为不在主栏中的项目设置较低的 z-index 谢谢,我会去调查的! :)【参考方案2】:

我认为您不能仅在 CSS 中执行此操作,因为它无法检测到页面中的更改。如下所述,您可以使用 css 填充获得接近您想要的东西,但我怀疑它不会正是您想要的。这是 JavaScript 设计的目的之一。我很高兴被证明是错误的

【讨论】:

提问者明确要求避免使用JS;尽管他想要的确切行为在 CSS 中可能无法实现,但很可能是。 你是对的@EamonNerbonne 我只是想强调没有 JS 会很困难,但可能没有很好地说明。编辑了我的答案 也感谢您的回答!我大多不想使用 javascript,因为我担心如果我开始使用 javscript 来处理这么小的事情,我的页面会变得太“沉重”(也许不是最好的翻译......)太快了!我将查看媒体查询,如果这是我唯一/最好的选择,我将切换到 javascript! (我实际上希望有一种方法可以说“内容不属于固定元素”,但似乎不是这样!

以上是关于如何在 CSS 中制作具有变化高度的固定顶部菜单栏?的主要内容,如果未能解决你的问题,请参考以下文章

css 如何增加Bootstrap中导航栏的高度? Twitter bootstrap navbar固定顶部重叠网站?

滚动时如何使菜单栏固定在顶部

CSS 如果元素可见,则更改正文边距大小

css 用户滚动时固定菜单保持在顶部 - 调整“顶部”以与大型设备上的内容对齐。侧边栏的宽度设置。添加'固定't

VANT菜单键的固定

Bootstrap 3 固定顶部导航栏显示水平滚动