【问题标题】:Responsive design layout CSS menu position overlaps header logo响应式设计布局 CSS 菜单位置与标题徽标重叠
【发布时间】:2013-11-08 08:35:06
【问题描述】:

我想要它,所以当窗口为 800px 宽或低于它时,它会隐藏菜单 <div> 并显示 菜单图标 ☰ 在单击图标时,我希望菜单出现在整洁的布局,以便 iPhone 可以在320px 上查看它,

这是我当前的 HTML。

<div id="header">
    <div class="wrap">
        <div id="logo">
            <p>LOGO HERE</p>
        </div><!--logo-->
        <div id="menu_wrapper">
            <ul id="nav">
                <div id="homeBtn"><a href="index.php"><span id="homeBtnImg"></span></a></div>
                <li><a href="#">WORK</a></li>
                <li><a href="#">SERVICES</a></li>
                <li><a href="#">ABOUT</a></li>
                <li id="end"><a href="#">CONTACT</a></li>
            </ul>
        </div>
    </div><!--wrap-->
</div><!--header-->

也作为demo fiddle

【问题讨论】:

  • 你是怎么弄坏东西的?它应该是什么样子的?你应该给我们一个例子,因为“整洁的布局”可以是任何东西..
  • 根据设计图更新了我的答案。
  • 已编辑问题,如果不正确请回复

标签: html css responsive-design media-queries


【解决方案1】:

我认为我对问题的理解足以提供解决方案。

绝对定位元素和浮动元素可以重叠。当点击 ☰ 时,元素被赋予float: right,这也将赋予元素display: block;这意味着它占用了100% 的宽度并将整个垂直导航向左推向徽标。另一个问题出现在#logo 呈现在菜单顶部(这里的z-index 不起作用),因此☰ 不再看到 click 由于另一个元素呈现在顶部。

z-index 无法正常工作,因为定位元素会创建新的堆叠上下文 - 请参阅 http://philipwalton.com/articles/what-no-one-told-you-about-z-index/ 了解更多信息。

此处不需要 CSS float,可以将其替换为 inline-block 或 table-cell 显示值。我还在演示中删除了z-index。

最后,我更改了$(window).resize() 计算以删除与@media 查询宽度相同的垂直导航 类,因为以前的垂直菜单可以使用宽度为100px在变成水平的之前消失。

更新答案(基于请求的design)

使用添加的信息,此解决方案可以更加简洁,我还可以从原始答案中删除display: table-cell(留在下方)。

Updated demo

HTML

<div id="header">
    <div id="logo">
        <p>LOGO HERE</p>
        <span id="menu">&#9776;</span>
    </div>
    <ul id="nav">
        <li id="homeBtn"><a href="index.php"><span id="homeBtnImg"></span></a></li>
        <li><a href="#">WORK</a></li>
        <li><a href="#">SERVICES</a></li>
        <li><a href="#">ABOUT</a></li>
        <li><a href="#">CONTACT</a></li>
    </ul>
</div>

CSS

#header {
    background-color: #f06060;
    padding: 52px 0px;
}
#logo {
    display:inline-block;
    width: 348px;
    height: 57px;
    border:1px dotted black;
    position:relative;
}
#menu {
    position: absolute;
    right: 0;
    top: 15px;
    display:none;
}
#nav {
    list-style: none;
    padding: 0;
    display: inline-block;
}
#nav.vertical {
    display: block;
    padding-left: 20px;
}
#nav.vertical li {
    display: list-item;
    line-height: 40px;
}
#nav li {
    display:inline-block;
    padding-right: 40px;
}
#nav li:last-child {
    padding-right: 0;
}
@media screen and (max-width: 800px) {
    #menu {
        display: inline-block;
    }
    #nav {
        display: none;
    }
}

JavaScript

与下面的原始答案相同。


原答案

请参阅this demo 或下面的代码。

HTML

<div id="header">
    <div id="wrap">
        <div id="logo">
            <p>LOGO HERE</p>
        </div>
        <div id="menu_wrapper">
            <div id="menu">&#9776;</div>
            <ul id="nav">
                <li id="homeBtn"><a href="index.php"><span id="homeBtnImg"></span></a></li>
                <li><a href="#">WORK</a></li>
                <li><a href="#">SERVICES</a></li>
                <li><a href="#">ABOUT</a></li>
                <li><a href="#">CONTACT</a></li>
            </ul>
        </div>
    </div>
</div>

CSS

#header {
    background-color: #f06060;
    padding: 52px 0px;
    display:table;
    width:100%;
}
#wrap {
    display:table-row;
}
#logo {
    display:table-cell;
    width: 338px;
    height: 57px;
}
#menu {
    display:none;
}
#menu_wrapper {
    display:table-cell;
    text-align:right;
    padding-right:5px;
}
#nav {
    list-style: none;
    padding: 0;
    text-align: left;
}
#nav.vertical {
    display: block;
}
#nav.vertical li {
    display: list-item;
    line-height: 40px;
}
#nav li {
    display:inline-block;
    padding-right: 40px;
}
#nav li:last-child {
    padding-right: 0;
}
@media screen and (max-width: 800px) {
    #menu {
        display: block;
    }
    #nav {
        display: none;
    }
}

JavaScript

$(window).resize(function(){
    if (window.innerWidth > 800) {
        $("#nav").removeClass('vertical');
    }
});

$("#menu").click(function(){
    $("#nav").toggleClass('vertical');
    return false;
});

【讨论】:

  • 谢谢你,我现在就调查一下。
  • 由于某种原因我的菜单图标没有激活菜单? real-creative.co.uk/new/demo3.php
  • 您使用的是哪个浏览器?它在 Chrome 31 中为我工作
【解决方案2】:

您应该使用媒体查询。像这样:

#menu_wrapper{ 
/* menu style */ 
}
#logo{ 
/* logo style */ 
display:none;
}
@media (max-width: 800px) {
  #menu_wrapper { display:none }
  #logo { display:block }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多