下拉菜单隐藏在页面内容后面
Drop down menu hides behind content of page
我正在努力制作一个带有自定义 CSS 的 Squarespace 页面以实现移动响应。在移动屏幕中,我的页面有一个下拉菜单,其中包含页面的不同 link。我的问题是,在某些页面(例如音乐或手表)中,当您单击菜单按钮时,下拉菜单隐藏在页面内容后面。我知道这与使用 position: absolute
有关,但我还没有找到使用 position: relative
放置菜单按钮和下拉列表的方法。这是我的 CSS 菜单:
#mobileNav {
background: none;
position: absolute;
top: 20%;
left: 0;
right: 0;
}
#mobileNav .wrapper {
border-bottom-style: none;
border-bottom-color: none;
}
您可以使用密码 Help123 在 richiequake.com 查看页面。有没有另一种方法可以放置菜单按钮和下拉列表,并使列表 "push" 页面内容向下,以便 link 列表可见?
基本上,您缺少的是 z-index 属性。这会将容器 #mobileNav 放在更高的层中。
通过进行此更改(将 z-index 属性 添加到您的 CSS 选择器中):
#mobileNav {
background: none;
position: absolute;
top: 20%;
left: 0;
right: 0;
z-index: 1;
}
我现在可以在所有页面中看到菜单链接。您可以阅读有关 z-index 规范的更多信息 here.
UPDATE - 在使用绝对定位时也将内容下推:
由于您已经在使用自定义 class 来切换菜单链接,因此您也可以使用它来切换内容部分。
将如下选择器规则添加到您的样式表:
.menu-open~section#page {
transform: translateY(355px);
}
这将做的是,当 menu-open class 在文档中时,具有 id 的同级部分 ,会被下推355px.
如果你想要更平滑的内容下推效果,你也可以添加某种动画,如下所示:
#page {
margin-top: 100px;
margin-bottom: 100px;
opacity: 1;
position: relative;
transition: transform .3s linear;
}
我刚刚添加了 transition,其中 .3s 是转换所需的时间。
使用绝对定位的一个问题是,即使您使用转换来补偿它,在某些设备和浏览器宽度上,徽标会与导航重叠。观察当前解决方案呈现的内容:
另一个问题是导航折叠和文本不再可见之间的延迟:
因为这是 Squarespace,您无权编辑底层 DOM,我会使用 flexbox 来解决这个问题。为此,首先 摆脱这个:
#mobileNav {
background: none;
position: absolute;
top: 20%;
left: 0;
right: 0;
z-index: 1;
}
并添加:
@media only screen and (max-width: 640px) {
#canvas {
display: flex;
flex-direction: column;
}
#mobileMenuLink {
order: 1;
}
#mobileNav {
order: 2;
}
#header {
order: 3;
}
#header ~ * {
order: 4;
}
}
请注意,以上内容没有供应商前缀,因此如果您想支持旧版浏览器,则相应地需要添加供应商前缀。
我正在努力制作一个带有自定义 CSS 的 Squarespace 页面以实现移动响应。在移动屏幕中,我的页面有一个下拉菜单,其中包含页面的不同 link。我的问题是,在某些页面(例如音乐或手表)中,当您单击菜单按钮时,下拉菜单隐藏在页面内容后面。我知道这与使用 position: absolute
有关,但我还没有找到使用 position: relative
放置菜单按钮和下拉列表的方法。这是我的 CSS 菜单:
#mobileNav {
background: none;
position: absolute;
top: 20%;
left: 0;
right: 0;
}
#mobileNav .wrapper {
border-bottom-style: none;
border-bottom-color: none;
}
您可以使用密码 Help123 在 richiequake.com 查看页面。有没有另一种方法可以放置菜单按钮和下拉列表,并使列表 "push" 页面内容向下,以便 link 列表可见?
基本上,您缺少的是 z-index 属性。这会将容器 #mobileNav 放在更高的层中。
通过进行此更改(将 z-index 属性 添加到您的 CSS 选择器中):
#mobileNav {
background: none;
position: absolute;
top: 20%;
left: 0;
right: 0;
z-index: 1;
}
我现在可以在所有页面中看到菜单链接。您可以阅读有关 z-index 规范的更多信息 here.
UPDATE - 在使用绝对定位时也将内容下推:
由于您已经在使用自定义 class 来切换菜单链接,因此您也可以使用它来切换内容部分。
将如下选择器规则添加到您的样式表:
.menu-open~section#page {
transform: translateY(355px);
}
这将做的是,当 menu-open class 在文档中时,具有 id 的同级部分 ,会被下推355px.
如果你想要更平滑的内容下推效果,你也可以添加某种动画,如下所示:
#page {
margin-top: 100px;
margin-bottom: 100px;
opacity: 1;
position: relative;
transition: transform .3s linear;
}
我刚刚添加了 transition,其中 .3s 是转换所需的时间。
使用绝对定位的一个问题是,即使您使用转换来补偿它,在某些设备和浏览器宽度上,徽标会与导航重叠。观察当前解决方案呈现的内容:
另一个问题是导航折叠和文本不再可见之间的延迟:
因为这是 Squarespace,您无权编辑底层 DOM,我会使用 flexbox 来解决这个问题。为此,首先 摆脱这个:
#mobileNav {
background: none;
position: absolute;
top: 20%;
left: 0;
right: 0;
z-index: 1;
}
并添加:
@media only screen and (max-width: 640px) {
#canvas {
display: flex;
flex-direction: column;
}
#mobileMenuLink {
order: 1;
}
#mobileNav {
order: 2;
}
#header {
order: 3;
}
#header ~ * {
order: 4;
}
}
请注意,以上内容没有供应商前缀,因此如果您想支持旧版浏览器,则相应地需要添加供应商前缀。