- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想创建一个侧边栏,其中的子菜单向右延伸而不是向下延伸。下图粗略:
我是 flexbox 的新手,这就是我能想到的:
HTML:
<div class="d-flex align-items-stretch">
<nav class="side-navigation">
<ul class="sidebar-nav d-flex flex-column">
<li class="sidebar-nav-expand d-flex toggle">
<a class="nav-link sidebar-nav-expand-toggle py-3" href="#">
<span class="icon icon-ic_compute"></span>
<span class="nav-item-text">Menu1</span>
<span class="float-right"><i class="fas fa-mortar-pestle"></i></span>
</a>
<div class="sidebar-nav-expand-items">
<ul class="sidebar-nav">
<li class="sidebar-nav-item py-3">
<a class="nav-link py-1" href="#some-url1">
<span class="nav-item-text">Menu1 subitem1</span>
</a>
</li>
<li class="sidebar-nav-item py-3">
<a class="nav-link py-1" href="#some-url2">
<span class="nav-item-text">Menu1 subitem2</span>
</a>
</li>
<li class="sidebar-nav-item py-3">
<a class="nav-link py-1" href="#some-url3">
<span class="nav-item-text">Menu1 subitem3</span>
</a>
</li>
</ul>
</div>
</li>
<li class="sidebar-nav-expand d-flex">
<a class="nav-link sidebar-nav-expand-toggle py-3" href="#">
<span class="icon icon-ic_management"></span>
<span class="nav-item-text">Menu2</span>
<span class="float-right"><i class="fas fa-mortar-pestle"></i></span>
</a>
<div class="sidebar-nav-expand-items">
<ul class="sidebar-nav">
<li class="sidebar-nav-item py-3">
<a class="nav-link py-1" href="#some-url21">
<span class="nav-item-text">Menu2 subitem1</span>
</a>
</li>
<li class="sidebar-nav-item py-3">
<a class="nav-link py-1" href="#some-url22">
<span class="nav-item-text">Menu2 subitem2</span>
</a>
</li>
<li class="sidebar-nav-item py-3">
<a class="nav-link py-1" href="#some-url23">
<span class="nav-item-text">Menu2 subitem3</span>
</a>
</li>
</ul>
</div>
</li>
<li class="sidebar-nav-expand">
<a class="nav-link py-3" href="#some-url">
<span class="icon icon-ic_administration"></span>
<span class="nav-item-text">Direct link</span>
<span class="float-right"><i class="fas fa-mortar-pestle"></i></span>
</a>
</li>
</ul>
</nav>
<div class="main">
Content
</div>
</div>
SCSS:
$white: #fff;
$whitesmoke: #ECEFF1;
$aliceblue: #f1f6ff;
$light-gray: #D6DADC;
$blue: #2971FB;
$light-blue: #BFD5FE;
$black: #263238;
$light-black: #364046;
$orange: #FF8F00;
.side-navigation {
max-width: 540px;
transition: all 0.3s;
}
.sidebar-nav {
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
padding-left: 0;
margin-bottom: 0;
list-style: none;
.nav-link {
display: block;
padding: .75rem 1rem;
color: $white;
text-decoration: none;
background: 0 0;
&:hover {
color: $orange;
}
}
.sidebar-nav-item {
width: 100%;
}
.sidebar-nav-expand {
width: 100%;
background-color: $black;
&.toggle {
.sidebar-nav-expand-toggle {
color: $orange;
}
.sidebar-nav-expand-items {
margin-left: 0;
}
}
.sidebar-nav-expand-toggle {
width: 270px;
z-index: 2;
}
.sidebar-nav-expand-items {
width: 270px;
height: 100%;
background-color: $light-gray;
transition: margin-left .25s ease-in-out;
margin-left: -270px;
color: $black;
.nav-link {
color: $black;
&:hover {
color: $orange;
}
&:not(.active) {
margin-left: 8px;
}
&.active {
border-left: solid 8px $orange;
}
}
}
}
}
.main {
width: 100%;
min-height: 100vh;
padding-left: 10px;
}
JS:
$('.sidebar-nav-expand-toggle').on('click', function() {
let self = $(this);
self.parent('.sidebar-nav-expand').toggleClass('toggle');
$('.main').toggleClass('toggle');
});
https://jsfiddle.net/cj4375er/
如您所见,子菜单未正确隐藏在父菜单下,子菜单堆叠在一起,如果打开一个菜单,我希望关闭所有其他菜单。此外,菜单项之间的空间太大。我只需要在正确的方向上指出一些要点。如果有类似案例的例子,我会很高兴。
最佳答案
我看到您试图在 sidebar-nav-expand-toggle
处使用 z-index: 2
来覆盖子菜单栏。但是,您的元素没有正确隐藏,因为您的 sidebar-nav-expand-toggle
没有背景(即它是透明的)。背景实际上来自 sidebar-nav-expand
(#263238
),它渗透了 sidebar-nav-expand-toggle
因为 sidebar-nav-expand-toggle
是透明的。因此,解决方案是指示 sidebar-nav-expand-toggle
继承与其父级相同的背景,导致以下代码:
.sidebar-nav-expand-toggle {
width: 270px;
z-index: 2;
background: inherit;
}
你的菜单是堆叠的,因为你没有处理其他可能打开的子菜单的关闭(你只是切换了被点击的子菜单,但你没有关闭那些可能打开但没有被点击的子菜单)。对您的 JS 代码进行简单添加即可解决此问题:
$('.sidebar-nav-expand-toggle').on('click', function() {
let self = $(this);
let toggled = self.parent('.sidebar-nav-expand').hasClass('toggle')
hideAllSubmenu()
if (toggled)
self.parent('.sidebar-nav-expand').removeClass('toggle')
else
self.parent('.sidebar-nav-expand').addClass('toggle')
$('.main').toggleClass('toggle');
});
function hideAllSubmenu() {
let submenus = $('.sidebar-nav-expand-toggle')
submenus.parent('.sidebar-nav-expand').removeClass('toggle')
}
菜单项之间的空间太大。我的建议是制作一个只有三个带填充的菜单项的 flexbox。然后,对于每个菜单(可以是 a
或 div
),在其中创建一个 div
,它具有 position: absolute
基于这些菜单。然后,您可以使用 transform:translate
在单击时将其滑出。这样,高度就不再依赖于包装容器的高度。
此外,我看到您正在使用 SCSS。我真的建议阅读 BEM selectors here更好地利用 SCSS 来创建更易于阅读的代码。
编辑:
我已经添加了一个小的工作示例来说明我使用 position: absolute
的意思,并且在子菜单展开时仍然能够将主要内容推到右边。请看下面(请根据您的需要调整这个最小的工作示例):
function resetSubmenuStyles() {
let submenus = document.querySelectorAll('.submenu div')
for (let submenu of submenus) {
submenu.style.width = ''
submenu.style.visibility = ''
}
}
document.querySelector('#menuOne').addEventListener('click', e => {
let submenu = document.querySelector('.submenu')
let submenuOne = document.querySelector('#submenuOne')
let submenuStyle = window.getComputedStyle(submenuOne)
let submenuWidth = parseInt(submenuStyle.getPropertyValue('width')) - parseInt(submenuStyle.getPropertyValue('padding-left')) - parseInt(submenuStyle.getPropertyValue('padding-right'))
resetSubmenuStyles()
if (submenuWidth == 0) {
submenu.style.width = '20%'
submenuOne.style.width = '100%'
submenuOne.style.visibility = 'visible'
}
else {
submenu.style.width = ''
submenuOne.style.width = ''
submenuOne.style.visibility = ''
}
})
document.querySelector('#menuTwo').addEventListener('click', e => {
let submenu = document.querySelector('.submenu')
let submenuTwo = document.querySelector('#submenuTwo')
let submenuStyle = window.getComputedStyle(submenuTwo)
let submenuWidth = parseInt(submenuStyle.getPropertyValue('width')) - parseInt(submenuStyle.getPropertyValue('padding-left')) - parseInt(submenuStyle.getPropertyValue('padding-right'))
resetSubmenuStyles()
if (submenuWidth == 0) {
submenu.style.width = '20%'
submenuTwo.style.width = '100%'
submenuTwo.style.visibility = 'visible'
}
else {
submenu.style.width = ''
submenuTwo.style.width = ''
submenuTwo.style.visibility = ''
}
})
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: Helvetica, sans-serif;
}
html, body {
width: 100vw;
height: 100%;
}
body {
display: flex;
}
.menu {
width: 20%;
height: 100%;
background: #000;
color: #FFF;
}
.menu h1 {
padding: 20px;
cursor: pointer;
}
.submenu {
position: relative;
width: 0%;
height: 100%;
background: #333;
color: #FFF;
}
.submenu div {
visibility: hidden;
position: absolute;
width: 0;
top: 0;
left: 0;
padding: 20px;
}
<div class = "menu">
<h1 id = "menuOne">Test</h1>
<h1 id = "menuTwo">Test</h1>
</div>
<div class = "submenu">
<div id = "submenuOne">
Submenu Test One
</div>
<div id = "submenuTwo">
Submenu Test Two
</div>
</div>
<div id = "main">Some Content</div>
关于javascript - 第二层侧边栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59462454/
我想创建一个类似 ABOVE 的可折叠侧边栏。 在折叠的表单中,侧边栏将只有选项图标,当您将鼠标悬停在栏上时,它会展开,向您显示图标的描述/名称。 如果您单击该图标,它将带您进入该图标指定的功能,例如
由于我需要在右侧打开侧边栏,如何将其从左侧更改为右侧?我使用的代码很简单: if revealViewController() != nil { Menubutton.target
我在使用高度标签时遇到了问题。 我想制作一个背景延伸到页面底部的侧边栏。 我已将高度设置为 100%,但这并不像我想象的那样有效。 这是我的侧边栏代码。 #side{ box-sizing:b
我正在为我的网站构建一个过滤器侧边栏,我希望能够通过按 btn 打开和关闭过滤器列表。 jQuery('.parent > .children').parent().click(function()
我将如何使 CONTENT HERE 文本进入红色框区域。我几乎尝试了所有我能想到的方法,但没有任何效果。我什至尝试将文本排成一行,然后将其类设置为“行向左拉”。这是我的代码:
当然 Wordpress 2.7 里有“小工具”选项也能控制 Widget ,但是反复实验后发现样式无法统一,可控性较低。个人认为是比较鸡肋的功能,这里就不谈了。 进入正题。侧边栏
我正在为使用 Qt 和 QML for Ubuntu Linux 的应用程序构建 UI。我有一个带有 Canvas 元素的查看器窗口,默认情况下应该是全屏的。打开应用程序时效果很好(即隐藏了 Ubun
我有一个两列布局。左侧是正文,右侧是侧边栏 ( float: right; width: 30% )。 在小型浏览器上,我想先显示正文,然后是侧边栏。但是如果我删除 float从带有媒体查询的侧边栏中
我是 React 的新手,试图让这个组件工作:https://github.com/balloob/react-sidebar 它有效,除了在跟随链接时侧边栏不会关闭。如何单击侧边栏链接关闭侧边栏?
我开始使用 Sublime Text 2。但是有一个小问题,找不到将侧栏(文件夹平移)移动到窗口右侧的选项。 你能告诉我我该怎么做吗?是否有任何插件或设置选项。 最佳答案 遗憾的是,不支持此功能。 看
在下面的玩具示例中,我在侧边栏中有很多 slider 。对于最后一个,我再也看不到正确的情节了。这个问题有什么不涉及删除 slider 的解决方案吗? # 01-kmeans-app palette(
我想向 Finder 侧边栏添加一个新项目。我发现 Finder 将“地点”列表保存在 `~/Library/Preferences/com.apple.sidebarlists.plist 中。我能
我正在寻找创建一个固定侧边栏,与苹果的(就功能而言)非常相似。当您在他们的商店中配置您的 Mac 时,当您向下滚动页面时,右侧的购物篮会固定位置; 完美。 position:fixed 是相对于视口(
我想使用 SwiftUI 构建一个非常简单的 iOS 14 侧边栏。 设置很简单,我有三个 View HomeView , LibraryView和 SettingsView和一个代表每个屏幕的枚举。
Semantic-UI 预先警告其 sidebar page “当侧边栏出现时,固定位置内容可能无法更改其位置。”然后它提供了两种可能的解决方案。 令人惊讶的是,在同一个页面和整个网站上,Semant
有人用过 React Pro 侧边栏吗?有人可以告诉我如何使用 sass 侧边栏组件以及如何增加侧边栏的长度。是否还有其他库提供了如何使用其侧边栏的示例。这是 React Pro 侧边栏示例。
有人用过 React Pro 侧边栏吗?有人可以告诉我如何使用 sass 侧边栏组件以及如何增加侧边栏的长度。是否还有其他库提供了如何使用其侧边栏的示例。这是 React Pro 侧边栏示例。
我是 React 的新手,一直在尝试寻找一个示例,说明如何在 reactjs 中创建侧边导航栏并将 reactrouter 与它一起使用。现在,我有一个如下所示的“侧边导航” Pane : impor
我正在尝试制作一个像 semantic-ui.com 上那样的简单侧边栏,只是我希望它位于右侧。看起来很简单,除了让按钮附加是我最大的问题。你可以在 jsfiddle 看到它,有点工作......HT
我附上了我的 HTML 和 CSS,希望有人能帮助我。基本上我有一个右侧边栏 div,其中的内容不会推到顶部。当我尝试使用位置和高度属性时,内容只是漂浮在整个页面上,甚至不会停留在右侧边栏中。我希望有
我是一名优秀的程序员,十分优秀!